Skip to content
Snippets Groups Projects
Commit 3127546f authored by Anton Sattarov's avatar Anton Sattarov :cucumber: Committed by Pavel Antonov
Browse files

Исправлена ошибка при которой не проиходил fallback на локаль по умолчанию

parent 4244b43b
No related branches found
No related tags found
No related merge requests found
......@@ -14,16 +14,16 @@ import (
type Localizer struct {
schema *schema.Schema
localesKV map[string]*locales.Locale
locales []*locales.Locale
localeID string
locales []*locales.Locale
allowNoPublished bool
allowDisabled bool
}
type Config struct {
Schema *schema.Schema
Locales []*locales.Locale
LocaleID string
Locales []*locales.Locale
AllowNoPublished bool
AllowDisabled bool
}
......@@ -147,13 +147,19 @@ func (l *Localizer) Locales() []*locales.Locale {
return l.locales
}
func (l *Localizer) LocaleID() string {
return l.localeID
}
func (l *Localizer) getTargetAndFallBackLocales() (target, fallback *locales.Locale, err error) {
if target, err = l.locale(l.localeID); err != nil {
return nil, nil, errors.New("target locale not found or disabled")
return nil, nil, errors.Wrap(err, "target locale not found or disabled")
}
if fallback, err = l.locale(target.Fallback); err != nil {
fallback = l.localesKV[locales.DefaultID]
if fallback, err = l.locale(locales.DefaultID); err != nil {
return nil, nil, errors.Wrap(err, "fallback locale not found or disabled")
}
}
return
}
......
......@@ -3,6 +3,7 @@ package localizer
import (
"testing"
"git.perx.ru/perxis/perxis-go/pkg/locales"
"git.perx.ru/perxis/perxis-go/pkg/schema"
"git.perx.ru/perxis/perxis-go/pkg/schema/field"
"github.com/stretchr/testify/assert"
......@@ -35,10 +36,10 @@ func TestLocalizer_localize(t *testing.T) {
)
tests := []struct {
name string
fallback map[string]interface{}
target map[string]interface{}
want map[string]interface{}
name string
wantErr bool
}{
{
......@@ -394,10 +395,10 @@ func TestLocalizer_deLocalize(t *testing.T) {
)
tests := []struct {
name string
fallback map[string]interface{}
target map[string]interface{}
want map[string]interface{}
name string
wantErr bool
}{
{
......@@ -610,3 +611,149 @@ func TestLocalizer_deLocalize(t *testing.T) {
})
}
}
func TestLocalizer_getTargetAndFallBackLocales(t *testing.T) {
tests := []struct {
localizer *Localizer
wantTarget *locales.Locale
wantFallback *locales.Locale
name string
wantErr bool
}{
{
name: "Empty",
localizer: &Localizer{},
wantErr: true,
},
{
name: "Success",
localizer: &Localizer{
localeID: "en",
localesKV: map[string]*locales.Locale{
"en": {ID: "en"},
"default": {ID: "default"},
},
},
wantTarget: &locales.Locale{ID: "en"},
wantFallback: &locales.Locale{ID: "default"},
},
{
name: "Success fallback",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"en": {ID: "en"},
"ru": {ID: "ru", Fallback: "en"},
"default": {ID: "default"},
},
},
wantTarget: &locales.Locale{ID: "ru", Fallback: "en"},
wantFallback: &locales.Locale{ID: "en"},
},
{
name: "Success fallback no default",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"en": {ID: "en"},
"ru": {ID: "ru", Fallback: "en"},
},
},
wantTarget: &locales.Locale{ID: "ru", Fallback: "en"},
wantFallback: &locales.Locale{ID: "en"},
},
{
name: "Success fallback no fallback",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"ru": {ID: "ru", Fallback: "en"},
"default": {ID: "default"},
},
},
wantTarget: &locales.Locale{ID: "ru", Fallback: "en"},
wantFallback: &locales.Locale{ID: "default"},
},
{
name: "Fail fallback no fallback",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"ru": {ID: "ru", Fallback: "en"},
},
},
wantErr: true,
},
{
name: "Fail target nil",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"ru": nil,
},
},
wantErr: true,
},
{
name: "Fail target disabled",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"ru": {ID: "ru", Fallback: "en", Disabled: true},
"default": {ID: "default"},
},
},
wantErr: true,
},
{
name: "Success fallback disabled",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"en": {ID: "en", Disabled: true},
"ru": {ID: "ru", Fallback: "en"},
"default": {ID: "default"},
},
},
wantTarget: &locales.Locale{ID: "ru", Fallback: "en"},
wantFallback: &locales.Locale{ID: "default"},
},
{
name: "Fail target no publish",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"ru": {ID: "ru", Fallback: "en", NoPublish: true},
"default": {ID: "default"},
},
},
wantErr: true,
},
{
name: "Success fallback no publish",
localizer: &Localizer{
localeID: "ru",
localesKV: map[string]*locales.Locale{
"en": {ID: "en", NoPublish: true},
"ru": {ID: "ru", Fallback: "en"},
"default": {ID: "default"},
},
},
wantTarget: &locales.Locale{ID: "ru", Fallback: "en"},
wantFallback: &locales.Locale{ID: "en", NoPublish: true},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotTarget, gotFallback, err := tt.localizer.getTargetAndFallBackLocales()
if tt.wantErr {
require.Error(t, err)
return
}
require.NoError(t, err)
assert.Equal(t, tt.wantTarget, gotTarget)
assert.Equal(t, tt.wantFallback, gotFallback)
})
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment