package shared import ( "testing" "github.com/stretchr/testify/require" ) func TestParseLanguageTag(t *testing.T) { t.Parallel() tests := []struct { name string input string want string wantErrCode string wantErr string }{ { name: "canonicalizes valid tag", input: " en-us ", want: "en-US", }, { name: "rejects invalid tag", input: "en-@", wantErrCode: ErrorCodeInvalidRequest, wantErr: "language tag must be a valid BCP 47 language tag", }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() got, err := ParseLanguageTag(tt.input) if tt.wantErr != "" { require.Error(t, err) require.Empty(t, got) require.Equal(t, tt.wantErrCode, CodeOf(err)) require.Equal(t, tt.wantErr, err.Error()) return } require.NoError(t, err) require.Equal(t, tt.want, got.String()) }) } } func TestParseTimeZoneName(t *testing.T) { t.Parallel() tests := []struct { name string input string want string wantErrCode string wantErr string }{ { name: "accepts valid zone", input: " Europe/Kaliningrad ", want: "Europe/Kaliningrad", }, { name: "rejects invalid zone", input: "Mars/Olympus", wantErrCode: ErrorCodeInvalidRequest, wantErr: "time zone name must be a valid IANA time zone name", }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() got, err := ParseTimeZoneName(tt.input) if tt.wantErr != "" { require.Error(t, err) require.Empty(t, got) require.Equal(t, tt.wantErrCode, CodeOf(err)) require.Equal(t, tt.wantErr, err.Error()) return } require.NoError(t, err) require.Equal(t, tt.want, got.String()) }) } } func TestParseRegistrationPreferredLanguage(t *testing.T) { t.Parallel() got, err := ParseRegistrationPreferredLanguage(" en-us ") require.NoError(t, err) require.Equal(t, "en-US", got.String()) _, err = ParseRegistrationPreferredLanguage("bad@@tag") require.Error(t, err) require.Equal(t, ErrorCodeInvalidRequest, CodeOf(err)) require.Equal(t, "registration_context.preferred_language must be a valid BCP 47 language tag", err.Error()) } func TestParseRegistrationTimeZoneName(t *testing.T) { t.Parallel() got, err := ParseRegistrationTimeZoneName(" Europe/Kaliningrad ") require.NoError(t, err) require.Equal(t, "Europe/Kaliningrad", got.String()) _, err = ParseRegistrationTimeZoneName("Mars/Olympus") require.Error(t, err) require.Equal(t, ErrorCodeInvalidRequest, CodeOf(err)) require.Equal(t, "registration_context.time_zone must be a valid IANA time zone name", err.Error()) }