mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 15:43:49 +01:00
Add 148 integration tests exercising actual SQL against PostgreSQL for all previously untested repository files. Includes 6 new fixture helpers in testhelpers_db.go and CI PostgreSQL service configuration. Discovered and documented existing RecordPurchase SQL bug (ambiguous column reference in ON CONFLICT clause).
111 lines
2.8 KiB
Go
111 lines
2.8 KiB
Go
package channelserver
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
func setupMiscRepo(t *testing.T) (*MiscRepository, *sqlx.DB) {
|
|
t.Helper()
|
|
db := SetupTestDB(t)
|
|
repo := NewMiscRepository(db)
|
|
t.Cleanup(func() { TeardownTestDB(t, db) })
|
|
return repo, db
|
|
}
|
|
|
|
func TestRepoMiscUpsertTrendWeapon(t *testing.T) {
|
|
repo, db := setupMiscRepo(t)
|
|
|
|
if err := repo.UpsertTrendWeapon(100, 1); err != nil {
|
|
t.Fatalf("UpsertTrendWeapon failed: %v", err)
|
|
}
|
|
|
|
var count int
|
|
if err := db.QueryRow("SELECT count FROM trend_weapons WHERE weapon_id=100").Scan(&count); err != nil {
|
|
t.Fatalf("Verification query failed: %v", err)
|
|
}
|
|
if count != 1 {
|
|
t.Errorf("Expected count=1, got: %d", count)
|
|
}
|
|
}
|
|
|
|
func TestRepoMiscUpsertTrendWeaponIncrement(t *testing.T) {
|
|
repo, db := setupMiscRepo(t)
|
|
|
|
if err := repo.UpsertTrendWeapon(100, 1); err != nil {
|
|
t.Fatalf("First UpsertTrendWeapon failed: %v", err)
|
|
}
|
|
if err := repo.UpsertTrendWeapon(100, 1); err != nil {
|
|
t.Fatalf("Second UpsertTrendWeapon failed: %v", err)
|
|
}
|
|
|
|
var count int
|
|
if err := db.QueryRow("SELECT count FROM trend_weapons WHERE weapon_id=100").Scan(&count); err != nil {
|
|
t.Fatalf("Verification query failed: %v", err)
|
|
}
|
|
if count != 2 {
|
|
t.Errorf("Expected count=2 after upsert, got: %d", count)
|
|
}
|
|
}
|
|
|
|
func TestRepoMiscGetTrendWeaponsEmpty(t *testing.T) {
|
|
repo, _ := setupMiscRepo(t)
|
|
|
|
weapons, err := repo.GetTrendWeapons(1)
|
|
if err != nil {
|
|
t.Fatalf("GetTrendWeapons failed: %v", err)
|
|
}
|
|
if len(weapons) != 0 {
|
|
t.Errorf("Expected 0 weapons, got: %d", len(weapons))
|
|
}
|
|
}
|
|
|
|
func TestRepoMiscGetTrendWeaponsOrdering(t *testing.T) {
|
|
repo, _ := setupMiscRepo(t)
|
|
|
|
// Insert weapons with different counts
|
|
for i := 0; i < 3; i++ {
|
|
if err := repo.UpsertTrendWeapon(uint16(100+i), 1); err != nil {
|
|
t.Fatalf("UpsertTrendWeapon failed: %v", err)
|
|
}
|
|
}
|
|
// Give weapon 101 more uses
|
|
if err := repo.UpsertTrendWeapon(101, 1); err != nil {
|
|
t.Fatalf("UpsertTrendWeapon failed: %v", err)
|
|
}
|
|
if err := repo.UpsertTrendWeapon(101, 1); err != nil {
|
|
t.Fatalf("UpsertTrendWeapon failed: %v", err)
|
|
}
|
|
|
|
weapons, err := repo.GetTrendWeapons(1)
|
|
if err != nil {
|
|
t.Fatalf("GetTrendWeapons failed: %v", err)
|
|
}
|
|
if len(weapons) != 3 {
|
|
t.Fatalf("Expected 3 weapons, got: %d", len(weapons))
|
|
}
|
|
// First should be the one with highest count (101 with count=3)
|
|
if weapons[0] != 101 {
|
|
t.Errorf("Expected first weapon=101 (highest count), got: %d", weapons[0])
|
|
}
|
|
}
|
|
|
|
func TestRepoMiscGetTrendWeaponsLimit3(t *testing.T) {
|
|
repo, _ := setupMiscRepo(t)
|
|
|
|
for i := 0; i < 5; i++ {
|
|
if err := repo.UpsertTrendWeapon(uint16(100+i), 1); err != nil {
|
|
t.Fatalf("UpsertTrendWeapon failed: %v", err)
|
|
}
|
|
}
|
|
|
|
weapons, err := repo.GetTrendWeapons(1)
|
|
if err != nil {
|
|
t.Fatalf("GetTrendWeapons failed: %v", err)
|
|
}
|
|
if len(weapons) != 3 {
|
|
t.Errorf("Expected max 3 weapons, got: %d", len(weapons))
|
|
}
|
|
}
|