fix: preserve OA configuration during database startup
This commit is contained in:
@@ -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")
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -299,7 +299,12 @@ func NewData(runtime *config.Store, appLogger *slog.Logger, storageManager *stor
|
|||||||
}
|
}
|
||||||
admin.Storage = storageConfig
|
admin.Storage = storageConfig
|
||||||
admin.Email = emailConfig
|
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 {
|
if err = d.loadIntegrationRuntime(db); err != nil {
|
||||||
return nil, nil, fmt.Errorf("load integration runtime: %w", err)
|
return nil, nil, fmt.Errorf("load integration runtime: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -195,7 +195,8 @@ func (d *Data) InitializeDatabase(ctx context.Context, input *system.DatabaseCon
|
|||||||
currentAdmin.JWT.SigningKey = signingKey
|
currentAdmin.JWT.SigningKey = signingKey
|
||||||
currentAdmin.Storage = storageConfig
|
currentAdmin.Storage = storageConfig
|
||||||
currentAdmin.Email = emailConfig
|
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 {
|
if d.integrations != nil {
|
||||||
d.integrations.Replace(integrationConfigs)
|
d.integrations.Replace(integrationConfigs)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user