diff --git a/internal/data/business_config_test.go b/internal/data/business_config_test.go new file mode 100644 index 0000000..5d22aef --- /dev/null +++ b/internal/data/business_config_test.go @@ -0,0 +1,27 @@ +package data + +import ( + "io" + "kra/internal/config" + "kra/internal/integration/storage" + "log/slog" + "path/filepath" + "testing" +) + +func TestDatabaseStartupPreservesBusinessOAConfiguration(t *testing.T) { + runtime := config.NewStore(&config.Config{BusinessOA: &config.BusinessOA{URL: "http://oa.test", Key: "test-only-key"}, Data: &config.Data{Database: &config.Database{Driver: "sqlite", Source: filepath.Join(t.TempDir(), "startup.db")}}, Admin: &config.Admin{Local: &config.Local{StorePath: filepath.Join(t.TempDir(), "uploads")}}}) + manager, err := storage.NewFileStorage(runtime) + if err != nil { + t.Fatal(err) + } + _, cleanup, err := NewData(runtime, slog.New(slog.NewTextHandler(io.Discard, nil)), manager, testCatalog()) + if err != nil { + t.Fatal(err) + } + defer cleanup() + actual := runtime.Snapshot().BusinessOA + if actual == nil || actual.URL != "http://oa.test" || actual.Key != "test-only-key" { + t.Fatal("database startup discarded the OA service configuration") + } +} diff --git a/internal/data/data.go b/internal/data/data.go index c52de72..cfa3415 100644 --- a/internal/data/data.go +++ b/internal/data/data.go @@ -299,7 +299,12 @@ func NewData(runtime *config.Store, appLogger *slog.Logger, storageManager *stor } admin.Storage = storageConfig admin.Email = emailConfig - runtime.Replace(&config.Config{Server: runtime.Server(), Data: c, Admin: admin}) + next := runtime.Snapshot() + if next == nil { + next = &config.Config{} + } + next.Data, next.Admin = c, admin + runtime.Replace(next) if err = d.loadIntegrationRuntime(db); err != nil { return nil, nil, fmt.Errorf("load integration runtime: %w", err) } diff --git a/internal/data/initialization_backend.go b/internal/data/initialization_backend.go index adef309..4767fdd 100644 --- a/internal/data/initialization_backend.go +++ b/internal/data/initialization_backend.go @@ -195,7 +195,8 @@ func (d *Data) InitializeDatabase(ctx context.Context, input *system.DatabaseCon currentAdmin.JWT.SigningKey = signingKey currentAdmin.Storage = storageConfig currentAdmin.Email = emailConfig - d.runtime.Replace(&configpkg.Config{Server: current.Server, Data: currentData, Admin: currentAdmin}) + current.Data, current.Admin = currentData, currentAdmin + d.runtime.Replace(current) if d.integrations != nil { d.integrations.Replace(integrationConfigs) }