package db import ( "errors" "strings" "testing" "git.sendico.io/tech/sxchnge/bff/pkg/merrors" "git.sendico.io/tech/sxchnge/bff/pkg/model" "go.uber.org/zap" ) func TestPermissionsDatabaseConfigAsDatabaseConfig(t *testing.T) { cfg := &PermissionsDatabaseConfig{ Driver: Mongo, Settings: model.SettingsT{ "database_env": "PERMISSIONS_MONGO_DATABASE", }, } converted := cfg.AsDatabaseConfig() if converted == nil { t.Fatal("expected converted config") } if converted.Driver != Mongo { t.Fatalf("expected driver %q, got %q", Mongo, converted.Driver) } if got := converted.Settings["database_env"]; got != "PERMISSIONS_MONGO_DATABASE" { t.Fatalf("expected database_env to be preserved, got %v", got) } } func TestNewCentralPermissionsConnectionRequiresConfig(t *testing.T) { _, err := NewCentralPermissionsConnection(zap.NewNop(), nil) if !errors.Is(err, merrors.ErrInvalidArg) { t.Fatalf("expected invalid argument, got %v", err) } } func TestNewConnectionRequiresConfig(t *testing.T) { _, err := NewConnection(zap.NewNop(), nil) if !errors.Is(err, merrors.ErrInvalidArg) { t.Fatalf("expected invalid argument, got %v", err) } } func TestNewCentralPermissionsConnectionDelegatesToDBConnection(t *testing.T) { _, err := NewCentralPermissionsConnection(zap.NewNop(), &PermissionsDatabaseConfig{ Driver: DBDriver("bogus"), }) if err == nil { t.Fatal("expected error") } if !strings.Contains(err.Error(), "permissions_database") { t.Fatalf("expected permissions_database context, got %v", err) } if !strings.Contains(err.Error(), "unknown database driver") { t.Fatalf("expected delegated database driver error, got %v", err) } } func TestValidateSplitDomainPermissionsDatabase(t *testing.T) { t.Setenv("DOMAIN_DB", "domain") t.Setenv("PERMISSIONS_DB", "sendico") domain, permissions, err := ValidateSplitDomainPermissionsDatabase( "test service", &Config{ Driver: Mongo, Settings: model.SettingsT{ "database_env": "DOMAIN_DB", }, }, &PermissionsDatabaseConfig{ Driver: Mongo, Settings: model.SettingsT{ "database_env": "PERMISSIONS_DB", }, }, ) if err != nil { t.Fatalf("expected valid split-domain config, got %v", err) } if domain.Name != "domain" || permissions.Name != "sendico" { t.Fatalf("unexpected resolved names: domain=%+v permissions=%+v", domain, permissions) } } func TestValidateSplitDomainPermissionsDatabaseRejectsMissingPermissionsConfig(t *testing.T) { t.Setenv("DOMAIN_DB", "domain") _, _, err := ValidateSplitDomainPermissionsDatabase( "test service", &Config{ Driver: Mongo, Settings: model.SettingsT{ "database_env": "DOMAIN_DB", }, }, nil, ) if !errors.Is(err, merrors.ErrInvalidArg) { t.Fatalf("expected invalid argument, got %v", err) } } func TestValidateSplitDomainPermissionsDatabaseRejectsSameResolvedDatabase(t *testing.T) { t.Setenv("DOMAIN_DB", "domain") t.Setenv("PERMISSIONS_DB", "domain") _, _, err := ValidateSplitDomainPermissionsDatabase( "test service", &Config{ Driver: Mongo, Settings: model.SettingsT{ "database_env": "DOMAIN_DB", }, }, &PermissionsDatabaseConfig{ Driver: Mongo, Settings: model.SettingsT{ "database_env": "PERMISSIONS_DB", }, }, ) if !errors.Is(err, merrors.ErrInvalidArg) { t.Fatalf("expected invalid argument, got %v", err) } }