mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-07-14 00:42:17 +08:00
142 lines
4.6 KiB
Go
142 lines
4.6 KiB
Go
package app
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"GoNavi-Wails/internal/connection"
|
|
"GoNavi-Wails/shared/i18n"
|
|
)
|
|
|
|
type fakeOracleMetadataDB struct {
|
|
rows []map[string]interface{}
|
|
fields []string
|
|
err error
|
|
}
|
|
|
|
func (db *fakeOracleMetadataDB) Connect(config connection.ConnectionConfig) error { return nil }
|
|
func (db *fakeOracleMetadataDB) Close() error { return nil }
|
|
func (db *fakeOracleMetadataDB) Ping() error { return nil }
|
|
func (db *fakeOracleMetadataDB) Query(query string) ([]map[string]interface{}, []string, error) {
|
|
return db.rows, db.fields, db.err
|
|
}
|
|
func (db *fakeOracleMetadataDB) Exec(query string) (int64, error) { return 0, nil }
|
|
func (db *fakeOracleMetadataDB) GetDatabases() ([]string, error) { return nil, nil }
|
|
func (db *fakeOracleMetadataDB) GetTables(dbName string) ([]string, error) {
|
|
return nil, nil
|
|
}
|
|
func (db *fakeOracleMetadataDB) GetCreateStatement(dbName, tableName string) (string, error) {
|
|
return "", nil
|
|
}
|
|
func (db *fakeOracleMetadataDB) GetColumns(dbName, tableName string) ([]connection.ColumnDefinition, error) {
|
|
return nil, nil
|
|
}
|
|
func (db *fakeOracleMetadataDB) GetAllColumns(dbName string) ([]connection.ColumnDefinitionWithTable, error) {
|
|
return nil, nil
|
|
}
|
|
func (db *fakeOracleMetadataDB) GetIndexes(dbName, tableName string) ([]connection.IndexDefinition, error) {
|
|
return nil, nil
|
|
}
|
|
func (db *fakeOracleMetadataDB) GetForeignKeys(dbName, tableName string) ([]connection.ForeignKeyDefinition, error) {
|
|
return nil, nil
|
|
}
|
|
func (db *fakeOracleMetadataDB) GetTriggers(dbName, tableName string) ([]connection.TriggerDefinition, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func TestMethodsDBOracleMetadataMessagesUseLocalizedText(t *testing.T) {
|
|
sourceBytes, err := os.ReadFile("methods_db.go")
|
|
if err != nil {
|
|
t.Fatalf("read methods_db.go: %v", err)
|
|
}
|
|
source := string(sourceBytes)
|
|
|
|
checks := map[string]struct {
|
|
rawMessages []string
|
|
keys []string
|
|
}{
|
|
"func inferOracleColumnsFromDictionary": {
|
|
rawMessages: []string{
|
|
`fmt.Errorf("未获取到字段定义")`,
|
|
},
|
|
keys: []string{
|
|
"db.backend.error.column_definitions_missing",
|
|
},
|
|
},
|
|
"func inferOracleColumnsFromEmptySelect": {
|
|
rawMessages: []string{
|
|
`fmt.Errorf("表名不能为空")`,
|
|
`fmt.Errorf("未获取到字段定义")`,
|
|
},
|
|
keys: []string{
|
|
"db.backend.error.table_name_required",
|
|
"db.backend.error.column_definitions_missing",
|
|
},
|
|
},
|
|
}
|
|
|
|
for signature, check := range checks {
|
|
functionSource := methodsDBFunctionSource(t, source, signature)
|
|
for _, rawMessage := range check.rawMessages {
|
|
if strings.Contains(functionSource, rawMessage) {
|
|
t.Fatalf("%s still contains raw Oracle metadata text %q", signature, rawMessage)
|
|
}
|
|
}
|
|
for _, key := range check.keys {
|
|
if !strings.Contains(functionSource, key) {
|
|
t.Fatalf("%s does not reference Oracle metadata i18n key %q", signature, key)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMethodsDBOracleMetadataCatalogKeysExist(t *testing.T) {
|
|
catalogs, err := i18n.LoadCatalogs()
|
|
if err != nil {
|
|
t.Fatalf("LoadCatalogs() error = %v", err)
|
|
}
|
|
|
|
for _, language := range i18n.SupportedLanguages() {
|
|
if strings.TrimSpace(catalogs[language]["db.backend.error.column_definitions_missing"]) == "" {
|
|
t.Fatalf("%s catalog missing Oracle metadata key %q", language, "db.backend.error.column_definitions_missing")
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMethodsDBOracleMetadataUsesEnglishMessages(t *testing.T) {
|
|
app := NewAppWithSecretStore(newFakeAppSecretStore())
|
|
app.configDir = t.TempDir()
|
|
app.SetLanguage(string(i18n.LanguageEnUS))
|
|
|
|
t.Run("dictionary fallback missing columns", func(t *testing.T) {
|
|
_, err := inferOracleColumnsFromDictionary(&fakeOracleMetadataDB{}, "APP", "ORDERS", app.appText)
|
|
if err == nil {
|
|
t.Fatal("expected inferOracleColumnsFromDictionary to fail")
|
|
}
|
|
if got, want := err.Error(), "No column definitions were returned"; got != want {
|
|
t.Fatalf("expected %q, got %q", want, got)
|
|
}
|
|
})
|
|
|
|
t.Run("empty select requires table name", func(t *testing.T) {
|
|
_, err := inferOracleColumnsFromEmptySelect(&fakeOracleMetadataDB{}, "APP", " ", app.appText)
|
|
if err == nil {
|
|
t.Fatal("expected inferOracleColumnsFromEmptySelect to fail")
|
|
}
|
|
if got, want := err.Error(), "Table name is required"; got != want {
|
|
t.Fatalf("expected %q, got %q", want, got)
|
|
}
|
|
})
|
|
|
|
t.Run("empty select missing fields", func(t *testing.T) {
|
|
_, err := inferOracleColumnsFromEmptySelect(&fakeOracleMetadataDB{}, "APP", "ORDERS", app.appText)
|
|
if err == nil {
|
|
t.Fatal("expected inferOracleColumnsFromEmptySelect to fail")
|
|
}
|
|
if got, want := err.Error(), "No column definitions were returned"; got != want {
|
|
t.Fatalf("expected %q, got %q", want, got)
|
|
}
|
|
})
|
|
}
|