package lagoon import ( "bytes" "io" "os" "strings" "testing" "git.golem15.com/golem15/summercms/bonfire" ) func TestHistoryTableName(t *testing.T) { got, err := HistoryTableName("golem15.user") if err != nil { t.Fatal(err) } if got != "summer_migrations_golem15_user" { t.Fatalf("got %q", got) } got, err = HistoryTableName("golem15.fonoteka") if err != nil { t.Fatal(err) } if got != "summer_migrations_golem15_fonoteka" { t.Fatalf("got %q", got) } if _, err := HistoryTableName("golem15.user;drop"); err == nil { t.Fatal("want invalid plugin id error") } if _, err := HistoryTableName(""); err == nil { t.Fatal("want empty plugin id error") } } func TestCheckLocaleMessage(t *testing.T) { if err := checkLocale("i", "pl-PL"); err != nil { t.Fatal(err) } err := checkLocale("c", "en_US") if err == nil { t.Fatal("want locale error") } msg := err.Error() for _, want := range []string{"ICU", "pl-PL", "CREATE DATABASE", "LOCALE_PROVIDER icu", "en_US"} { if !strings.Contains(msg, want) { t.Fatalf("missing %q in %s", want, msg) } } } func TestRuntimeCommandsRegisterBareAndColonNames(t *testing.T) { cmds := RuntimeCommands(nil, nil) names := map[string]bool{} for _, c := range cmds { names[c.Name] = true } for _, want := range []string{"migrate", "migrate:rollback", "migrate:status"} { if !names[want] { t.Fatalf("missing %s", want) } } root, err := bonfire.NewRoot("app", cmds, io.Discard) if err != nil { t.Fatal(err) } root.SetArgs([]string{"migrate", "--help"}) if err := root.Execute(); err != nil { t.Fatal(err) } } func TestNoAutoMigrate(t *testing.T) { entries, err := os.ReadDir(".") if err != nil { t.Fatal(err) } for _, entry := range entries { if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".go") || strings.HasSuffix(entry.Name(), "_test.go") { continue } body, err := os.ReadFile(entry.Name()) if err != nil { t.Fatal(err) } if bytes.Contains(body, []byte("AutoMigrate")) { t.Fatalf("%s must not call AutoMigrate", entry.Name()) } } } func TestOpenRequiresDSN(t *testing.T) { _, _, err := Open(t.Context(), " ") if err == nil || !strings.Contains(err.Error(), "database.dsn") { t.Fatalf("got %v", err) } }