packages.wenpai.net/internal/db/migrate_test.go
Ben Word 6df4a9a544
Add monthly install tracking for per-package install charts (#59)
* Add monthly install tracking for per-package install charts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

* Incremental aggregation with watermark, event pruning, and API fixes

Switch from full-recompute to watermark-based incremental aggregation
that only processes new events. Add 365-day event retention with pruning.
Fix migration to not seed data (avoids double-counting on first run).
Cap monthly installs API to 36 months and add error logging.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-authored-by: Scott Walkinshaw <scott.walkinshaw@gmail.com>
2026-03-25 12:10:48 -05:00

40 lines
1.2 KiB
Go

package db
import (
"database/sql"
"testing"
wppackagesgo "github.com/roots/wp-packages"
)
func TestMigrateCreatesPackageStatsAndFTS(t *testing.T) {
dbPath := t.TempDir() + "/test.db"
database, err := Open(dbPath)
if err != nil {
t.Fatalf("opening db: %v", err)
}
t.Cleanup(func() { _ = database.Close() })
if err := Migrate(database, wppackagesgo.Migrations); err != nil {
t.Fatalf("running migrations: %v", err)
}
assertObjectExists(t, database, "table", "package_stats")
assertObjectExists(t, database, "table", "monthly_installs")
assertObjectExists(t, database, "table", "packages_fts")
assertObjectExists(t, database, "trigger", "packages_fts_insert")
assertObjectExists(t, database, "trigger", "packages_fts_update")
assertObjectExists(t, database, "trigger", "packages_fts_delete")
}
func assertObjectExists(t *testing.T, database *sql.DB, objType, name string) {
t.Helper()
var count int
err := database.QueryRow(`SELECT COUNT(*) FROM sqlite_master WHERE type = ? AND name = ?`, objType, name).Scan(&count)
if err != nil {
t.Fatalf("querying sqlite_master for %s %s: %v", objType, name, err)
}
if count != 1 {
t.Fatalf("expected %s %s to exist", objType, name)
}
}