Files
brain/internal/http/migration_test.go
T
Andrew S Erwin b9721ff13f
release gate / check (push) Failing after 8m35s
initial commit on Federted servers
2026-10-19 16:23:55 -05:00

69 lines
2.2 KiB
Go

package http
import (
"os"
"path/filepath"
"sort"
"strings"
"testing"
)
// The ledgered migrations (review MIG-01) must stay idempotent: applying
// every file twice in order cannot change the backfill guarantees.
func TestUpgradeBackfillsLegacyWatchesWithoutChangingExistingSources(t *testing.T) {
srv, d := testServerDB(t)
_, uid := accountClient(t, srv.URL, "watcher@computer.test")
if _, err := d.Exec(`INSERT INTO "Bookmark"(id,url,"ownerId","imapWatchEnabled","imapQuery") VALUES('old','https://127.0.0.1',$1,true,'Invoices'),('paused','https://127.0.0.1',$1,true,'Receipts'),('off','https://127.0.0.1',$1,false,'Other')`, uid); err != nil {
t.Fatal(err)
}
if _, err := d.Exec(`INSERT INTO "SignalSource"(id,type,config,enabled,"bookmarkId","ownerId") VALUES('modern','email','{"subject":"Modern"}',true,'old',$1),('existing','email','{"legacy":true,"subject":"Paused"}',false,'paused',$1)`, uid); err != nil {
t.Fatal(err)
}
entries, err := os.ReadDir("../../db/migrations")
if err != nil {
t.Fatal(err)
}
names := []string{}
for _, e := range entries {
if strings.HasSuffix(e.Name(), ".sql") {
names = append(names, e.Name())
}
}
sort.Strings(names)
if len(names) == 0 {
t.Fatal("no migration files found")
}
for i := 0; i < 2; i++ {
for _, name := range names {
raw, err := os.ReadFile(filepath.Join("../../db/migrations", name))
if err != nil {
t.Fatal(err)
}
if _, err := d.Exec(string(raw)); err != nil {
t.Fatalf("%s: %v", name, err)
}
}
}
var count int
if err := d.QueryRow(`SELECT count(*) FROM "SignalSource"`).Scan(&count); err != nil {
t.Fatal(err)
}
if count != 3 {
t.Fatalf("expected existing two sources and one backfill, got %d", count)
}
var enabled bool
var subject string
if err := d.QueryRow(`SELECT enabled,config->>'subject' FROM "SignalSource" WHERE id='legacy-old'`).Scan(&enabled, &subject); err != nil {
t.Fatal(err)
}
if !enabled || subject != "Invoices" {
t.Fatal("legacy switch not migrated")
}
if err := d.QueryRow(`SELECT enabled,config->>'subject' FROM "SignalSource" WHERE id='existing'`).Scan(&enabled, &subject); err != nil {
t.Fatal(err)
}
if enabled || subject != "Paused" {
t.Fatal("existing paused watcher modified")
}
}