chore: load 'assign_default' value from legacy value (#17428)

If this value was set before v2.19.0, then assign_default was in a json
field that would not match. And it would default to `false`. This
corrects that.
This commit is contained in:
Steven Masley
2025-04-16 15:55:37 -05:00
committed by GitHub
parent c4d3dd2791
commit 2e5cd299f2
2 changed files with 79 additions and 0 deletions

View File

@ -213,6 +213,17 @@ type OrganizationSyncSettings struct {
} }
func (s *OrganizationSyncSettings) Set(v string) error { func (s *OrganizationSyncSettings) Set(v string) error {
legacyCheck := make(map[string]any)
err := json.Unmarshal([]byte(v), &legacyCheck)
if assign, ok := legacyCheck["AssignDefault"]; err == nil && ok {
// The legacy JSON key was 'AssignDefault' instead of 'assign_default'
// Set the default value from the legacy if it exists.
isBool, ok := assign.(bool)
if ok {
s.AssignDefault = isBool
}
}
return json.Unmarshal([]byte(v), s) return json.Unmarshal([]byte(v), s)
} }

View File

@ -2,6 +2,7 @@ package idpsync_test
import ( import (
"database/sql" "database/sql"
"fmt"
"testing" "testing"
"github.com/golang-jwt/jwt/v4" "github.com/golang-jwt/jwt/v4"
@ -19,6 +20,73 @@ import (
"github.com/coder/coder/v2/testutil" "github.com/coder/coder/v2/testutil"
) )
func TestFromLegacySettings(t *testing.T) {
t.Parallel()
legacy := func(assignDefault bool) string {
return fmt.Sprintf(`{
"Field":"groups",
"Mapping":{
"engineering":[
"10b2bd19-f5ca-4905-919f-bf02e95e3b6a"
]
},
"AssignDefault":%t
}`, assignDefault)
}
t.Run("AssignDefault,True", func(t *testing.T) {
t.Parallel()
var settings idpsync.OrganizationSyncSettings
settings.AssignDefault = true
err := settings.Set(legacy(true))
require.NoError(t, err)
require.Equal(t, settings.Field, "groups", "field")
require.Equal(t, settings.Mapping, map[string][]uuid.UUID{
"engineering": {
uuid.MustParse("10b2bd19-f5ca-4905-919f-bf02e95e3b6a"),
},
}, "mapping")
require.True(t, settings.AssignDefault, "assign default")
})
t.Run("AssignDefault,False", func(t *testing.T) {
t.Parallel()
var settings idpsync.OrganizationSyncSettings
settings.AssignDefault = true
err := settings.Set(legacy(false))
require.NoError(t, err)
require.Equal(t, settings.Field, "groups", "field")
require.Equal(t, settings.Mapping, map[string][]uuid.UUID{
"engineering": {
uuid.MustParse("10b2bd19-f5ca-4905-919f-bf02e95e3b6a"),
},
}, "mapping")
require.False(t, settings.AssignDefault, "assign default")
})
t.Run("CorrectAssign", func(t *testing.T) {
t.Parallel()
var settings idpsync.OrganizationSyncSettings
settings.AssignDefault = true
err := settings.Set(legacy(false))
require.NoError(t, err)
require.Equal(t, settings.Field, "groups", "field")
require.Equal(t, settings.Mapping, map[string][]uuid.UUID{
"engineering": {
uuid.MustParse("10b2bd19-f5ca-4905-919f-bf02e95e3b6a"),
},
}, "mapping")
require.False(t, settings.AssignDefault, "assign default")
})
}
func TestParseOrganizationClaims(t *testing.T) { func TestParseOrganizationClaims(t *testing.T) {
t.Parallel() t.Parallel()