feat: add administration domain core
This commit is contained in:
1 parent
065dcd955a
commit
cea2751dc5
9 files changed
+1135
No files matched your search
@@ -0,0 +1,96 @@
|
||||
package postgres
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"git.nianxx.cn/wangxuming/NianAIGC/backend/internal/administration"
|
||||
)
|
||||
|
||||
func TestAdministrationListAccountsUsesExplicitColumnsAndParameterizedFilters(t *testing.T) {
|
||||
rows := &identityRows{}
|
||||
querier := &identityQuerier{rows: rows}
|
||||
db := NewDatabase(Config{Backend: BackendPostgres}, querier)
|
||||
_, err := db.ListAccounts(context.Background(), administration.AccountFilters{OrganizationID: "org-1", Role: administration.RoleUser, IncludeDisabled: true})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if querier.sql != ListAdministrationAccountsSQL {
|
||||
t.Fatalf("SQL=%q", querier.sql)
|
||||
}
|
||||
if !reflect.DeepEqual(querier.args, []any{"org-1", administration.RoleUser, true}) {
|
||||
t.Fatalf("args=%#v", querier.args)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteAccountArchivesAllOwnedDataAndIdentityInOneTransaction(t *testing.T) {
|
||||
tx := &administrationTransaction{}
|
||||
db := NewDatabase(Config{Backend: BackendPostgres}, &administrationPool{tx: tx})
|
||||
if err := db.DeleteAccount(context.Background(), "user-1", "archive:org-1"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
wantSQL := []string{ArchiveAssetsSQL, ArchiveGenerationJobsSQL, ArchiveProjectsSQL, ArchiveImageTemplatesSQL, DeleteAdministrationAccountSQL}
|
||||
if !reflect.DeepEqual(tx.sql, wantSQL) {
|
||||
t.Fatalf("SQL sequence=%#v want %#v", tx.sql, wantSQL)
|
||||
}
|
||||
for _, args := range tx.args {
|
||||
if !reflect.DeepEqual(args, []any{"user-1", "archive:org-1"}) && !reflect.DeepEqual(args, []any{"user-1"}) {
|
||||
t.Fatalf("args=%#v", args)
|
||||
}
|
||||
}
|
||||
if tx.commits != 1 || tx.rollbacks != 0 {
|
||||
t.Fatalf("commits=%d rollbacks=%d", tx.commits, tx.rollbacks)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDeleteAccountRollsBackArchiveTransactionFailure(t *testing.T) {
|
||||
tx := &administrationTransaction{failAt: 3, err: errors.New("projects failed")}
|
||||
db := NewDatabase(Config{Backend: BackendPostgres}, &administrationPool{tx: tx})
|
||||
err := db.DeleteAccount(context.Background(), "user-1", "archive:org-1")
|
||||
if !errors.Is(err, tx.err) || tx.commits != 0 || tx.rollbacks != 1 {
|
||||
t.Fatalf("err=%v commits=%d rollbacks=%d", err, tx.commits, tx.rollbacks)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAdministrationStoreFailsClosedWithoutPostgres(t *testing.T) {
|
||||
db := NewDatabase(Config{Backend: BackendLocal}, &identityQuerier{})
|
||||
if _, err := db.ListOrganizations(context.Background(), true); err == nil {
|
||||
t.Fatal("ListOrganizations error=nil")
|
||||
}
|
||||
if err := db.DeleteAccount(context.Background(), "u", "a"); err == nil {
|
||||
t.Fatal("DeleteAccount error=nil")
|
||||
}
|
||||
}
|
||||
|
||||
var _ administration.Store = (*Database)(nil)
|
||||
|
||||
type administrationPool struct{ tx *administrationTransaction }
|
||||
|
||||
func (p *administrationPool) Query(context.Context, string, ...any) (Rows, error) {
|
||||
return nil, errors.New("outside transaction")
|
||||
}
|
||||
func (p *administrationPool) Begin(context.Context) (Transaction, error) { return p.tx, nil }
|
||||
|
||||
type administrationTransaction struct {
|
||||
sql []string
|
||||
args [][]any
|
||||
failAt int
|
||||
err error
|
||||
commits, rollbacks int
|
||||
}
|
||||
|
||||
func (t *administrationTransaction) Query(context.Context, string, ...any) (Rows, error) {
|
||||
return nil, errors.New("unexpected query")
|
||||
}
|
||||
func (t *administrationTransaction) Exec(_ context.Context, query string, args ...any) error {
|
||||
t.sql = append(t.sql, query)
|
||||
t.args = append(t.args, args)
|
||||
if t.failAt == len(t.sql) {
|
||||
return t.err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (t *administrationTransaction) Commit(context.Context) error { t.commits++; return nil }
|
||||
func (t *administrationTransaction) Rollback(context.Context) error { t.rollbacks++; return nil }
|
||||
Reference in new issue
Block a user