* H-300: wire Captain Skills into Web runtime * H-300: enforce effective model and conservative skill budget * H-300: fix CI gosec step * ci: extend golangci-lint timeout * fix lint findings across backend * fix(push): resolve delivery protocol blockers * test(repository): close SQLite test databases * test(repository): reuse SQLite schema per package * H-307: restore backend Go cache in CI * H-307: prefetch modules before cold lint * H-307: resolve govulncheck security gate * H-307: build lint with patched Go toolchain * H-307: clear remaining security scan findings --------- Co-authored-by: Rogee <rogee@ipao.vip>
43 lines
1013 B
Go
43 lines
1013 B
Go
package repository
|
|
|
|
import (
|
|
"database/sql"
|
|
"testing"
|
|
|
|
"github.com/gochat/gochat/internal/model"
|
|
)
|
|
|
|
func TestOpenSQLiteDBReusesSchemaAndIsolatesTests(t *testing.T) {
|
|
var firstPool *sql.DB
|
|
t.Run("write", func(t *testing.T) {
|
|
db := openSQLiteDB(t, []interface{}{&model.Account{}})
|
|
var err error
|
|
firstPool, err = db.DB()
|
|
if err != nil {
|
|
t.Fatalf("get sql.DB: %v", err)
|
|
}
|
|
if err := db.Create(&model.Account{Name: "isolated"}).Error; err != nil {
|
|
t.Fatalf("create account: %v", err)
|
|
}
|
|
})
|
|
|
|
t.Run("read", func(t *testing.T) {
|
|
db := openSQLiteDB(t, []interface{}{&model.Account{}})
|
|
secondPool, err := db.DB()
|
|
if err != nil {
|
|
t.Fatalf("get sql.DB: %v", err)
|
|
}
|
|
if firstPool != secondPool {
|
|
t.Fatal("SQLite schema pool was recreated between tests")
|
|
}
|
|
|
|
var count int64
|
|
if err := db.Model(&model.Account{}).Count(&count).Error; err != nil {
|
|
t.Fatalf("count accounts: %v", err)
|
|
}
|
|
if count != 0 {
|
|
t.Fatalf("previous test data leaked: got %d accounts", count)
|
|
}
|
|
})
|
|
}
|