Skip to content
Snippets Groups Projects
Commit 779fefcf authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

Merge branch 'feature/PRXS-2653-LocalizerFix' into 'master'

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

See merge request perxis/perxis-go!266
parents 4244b43b 3127546f
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.
Finish editing this message first!
Please register or to comment