mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 23:54:33 +01:00
An MMO server without multiplayer defeats the purpose. PostgreSQL is the right choice and Docker Compose already solves the setup pain. This reverts the common/db wrapper, SQLite schema, config Driver field, modernc.org/sqlite dependency, and all repo type changes while keeping the dashboard, wizard, and CI improvements from the previous commit.
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))
|
|
}
|
|
}
|