test(11-07): cover jobs, scheduler and lagoon seams branch by branch

- conga: TestOutcome*, TestCancelQueuedNeverRuns, TestCancelRunningCancelsCtx,
  TestStopJobFromWorker, TestManagerPHPSemantics, principal, delay,
  registration, worker and queue-setting branches; TestQueueClear and
  TestQueueWork move to commands_test.go with the batch/state and
  queue-filter cases (coverage 92.5%)
- scheduler: validation, ordering, missing catalog, log writer, dueAt
- lagoon: TestQueueMigrationsUpDown (River v7 + summer_jobs, rollback,
  idempotent rerun), OnDatabase isolation, Transaction edges
- bonfire TestCallEdges, pact TestCadence
This commit is contained in:
Jakub Zych
2026-09-30 14:14:21 +02:00
parent 6f50b6c940
commit 35ac96d664
10 changed files with 1705 additions and 432 deletions

View File

@@ -83,3 +83,50 @@ func TestOnDatabaseAfterActivate(t *testing.T) {
}
})
}
// TestOnDatabaseIsolationAndErrors covers the per-app hook queue: two apps
// keep separate queues, a published app runs later hooks at once, and nil
// arguments are refused.
func TestOnDatabaseIsolationAndErrors(t *testing.T) {
db, _ := dedicatedDB(t, "lagoon_ondatabase_isolation")
gdb, err := Use(t.Context(), db)
if err != nil {
t.Fatal(err)
}
a, b := backpack.New(nil), backpack.New(nil)
var ranA, ranB int
if err := OnDatabase(a, func(*sql.DB, *gorm.DB) error { ranA++; return nil }); err != nil {
t.Fatal(err)
}
if err := OnDatabase(b, func(*sql.DB, *gorm.DB) error { ranB++; return nil }); err != nil {
t.Fatal(err)
}
if err := Publish(a, db, gdb); err != nil {
t.Fatal(err)
}
if ranA != 1 || ranB != 0 {
t.Fatalf("after publishing app a: a ran %d, b ran %d; want 1 and 0", ranA, ranB)
}
if err := Publish(b, db, gdb); err != nil {
t.Fatal(err)
}
if ranA != 1 || ranB != 1 {
t.Fatalf("after publishing app b: a ran %d, b ran %d; want 1 and 1", ranA, ranB)
}
if err := OnDatabase(nil, func(*sql.DB, *gorm.DB) error { return nil }); err == nil {
t.Fatal("nil app accepted")
}
if err := OnDatabase(a, nil); err == nil {
t.Fatal("nil hook accepted")
}
// A second failing queued hook is never reached: Publish returns the
// first error.
c := backpack.New(nil)
boom := errors.New("first")
second := false
_ = OnDatabase(c, func(*sql.DB, *gorm.DB) error { return boom })
_ = OnDatabase(c, func(*sql.DB, *gorm.DB) error { second = true; return nil })
if err := Publish(c, db, gdb); !errors.Is(err, boom) || second {
t.Fatalf("Publish = %v (second ran %v), want the first error only", err, second)
}
}