mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-05-11 17:49:46 +08:00
- 调整达梦数据库列表获取策略,优先回退查询当前 schema 与当前用户 - 保留可见用户与 owner 聚合逻辑,兼容低权限账号场景 - 补充前端空列表提示与后端单元测试,降低排查成本 - close #203
74 lines
2.2 KiB
Go
74 lines
2.2 KiB
Go
package db
|
|
|
|
import (
|
|
"errors"
|
|
"reflect"
|
|
"testing"
|
|
)
|
|
|
|
func TestCollectDamengDatabaseNames_UsesCurrentSchemaFallback(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
got, err := collectDamengDatabaseNames(func(query string) ([]map[string]interface{}, []string, error) {
|
|
switch query {
|
|
case damengDatabaseQueries[0]:
|
|
return []map[string]interface{}{{"DATABASE_NAME": "APP_SCHEMA"}}, nil, nil
|
|
case damengDatabaseQueries[1]:
|
|
return []map[string]interface{}{{"DATABASE_NAME": "app_schema"}}, nil, nil
|
|
default:
|
|
return nil, nil, errors.New("permission denied")
|
|
}
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("collectDamengDatabaseNames 返回错误: %v", err)
|
|
}
|
|
|
|
want := []string{"APP_SCHEMA"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("unexpected database names, got=%v want=%v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCollectDamengDatabaseNames_CollectsOwnersWhenVisible(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
got, err := collectDamengDatabaseNames(func(query string) ([]map[string]interface{}, []string, error) {
|
|
switch query {
|
|
case damengDatabaseQueries[0], damengDatabaseQueries[1], damengDatabaseQueries[2], damengDatabaseQueries[3], damengDatabaseQueries[4], damengDatabaseQueries[5]:
|
|
return []map[string]interface{}{}, nil, nil
|
|
case damengDatabaseQueries[6]:
|
|
return []map[string]interface{}{{"OWNER": "BIZ"}, {"OWNER": "audit"}}, nil, nil
|
|
case damengDatabaseQueries[7]:
|
|
return []map[string]interface{}{{"OWNER": "BIZ"}}, nil, nil
|
|
default:
|
|
return nil, nil, nil
|
|
}
|
|
})
|
|
if err != nil {
|
|
t.Fatalf("collectDamengDatabaseNames 返回错误: %v", err)
|
|
}
|
|
|
|
want := []string{"audit", "BIZ"}
|
|
if !reflect.DeepEqual(got, want) {
|
|
t.Fatalf("unexpected database names, got=%v want=%v", got, want)
|
|
}
|
|
}
|
|
|
|
func TestCollectDamengDatabaseNames_ReturnsErrorWhenNoNameResolved(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
expectErr := errors.New("last query failed")
|
|
got, err := collectDamengDatabaseNames(func(query string) ([]map[string]interface{}, []string, error) {
|
|
if query == damengDatabaseQueries[len(damengDatabaseQueries)-1] {
|
|
return nil, nil, expectErr
|
|
}
|
|
return nil, nil, errors.New("permission denied")
|
|
})
|
|
if err == nil {
|
|
t.Fatalf("期望返回错误,实际 got=%v", got)
|
|
}
|
|
if !errors.Is(err, expectErr) {
|
|
t.Fatalf("错误不符合预期: %v", err)
|
|
}
|
|
}
|