package db import ( "database/sql" "testing" ) func openTestDB(t *testing.T) *MetaDB { t.Helper() m, err := OpenMeta(":memory:") if err != nil { t.Fatalf("open test db: %v", err) } t.Cleanup(func() { m.Close() }) return m } func TestAddAndGetRedirect(t *testing.T) { m := openTestDB(t) if err := m.AddRedirect("old-slug", "new-slug"); err != nil { t.Fatalf("AddRedirect: %v", err) } got, err := m.GetRedirect("old-slug") if err != nil { t.Fatalf("GetRedirect: %v", err) } if got != "new-slug" { t.Errorf("got %q, want %q", got, "new-slug") } } func TestGetRedirect_NotFound(t *testing.T) { m := openTestDB(t) _, err := m.GetRedirect("missing") if err != sql.ErrNoRows { t.Errorf("expected sql.ErrNoRows, got %v", err) } } func TestCollapseRedirects(t *testing.T) { m := openTestDB(t) // a -> b, then b -> c: collapse should make a -> c if err := m.AddRedirect("a", "b"); err != nil { t.Fatalf("AddRedirect: %v", err) } if err := m.CollapseRedirects("b", "c"); err != nil { t.Fatalf("CollapseRedirects: %v", err) } got, err := m.GetRedirect("a") if err != nil { t.Fatalf("GetRedirect: %v", err) } if got != "c" { t.Errorf("got %q, want %q", got, "c") } } func TestAddRedirect_Upsert(t *testing.T) { m := openTestDB(t) if err := m.AddRedirect("old", "first"); err != nil { t.Fatalf("AddRedirect first: %v", err) } if err := m.AddRedirect("old", "second"); err != nil { t.Fatalf("AddRedirect second: %v", err) } got, err := m.GetRedirect("old") if err != nil { t.Fatalf("GetRedirect: %v", err) } if got != "second" { t.Errorf("got %q, want %q", got, "second") } }