Enha: sqlx instead of pgx
This commit is contained in:
104
repos/players_test.go
Normal file
104
repos/players_test.go
Normal file
@ -0,0 +1,104 @@
|
||||
package repos
|
||||
|
||||
import (
|
||||
"gralias/models"
|
||||
"testing"
|
||||
|
||||
"github.com/jmoiron/sqlx"
|
||||
"github.com/stretchr/testify/assert"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
)
|
||||
|
||||
func setupPlayersTestDB(t *testing.T) (*sqlx.DB, func()) {
|
||||
db, err := sqlx.Connect("sqlite3", ":memory:")
|
||||
assert.NoError(t, err)
|
||||
|
||||
schema := `
|
||||
CREATE TABLE IF NOT EXISTS players (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
room_id TEXT,
|
||||
username TEXT,
|
||||
team TEXT,
|
||||
role TEXT,
|
||||
is_bot BOOLEAN
|
||||
);
|
||||
`
|
||||
_, err = db.Exec(schema)
|
||||
assert.NoError(t, err)
|
||||
|
||||
return db, func() {
|
||||
db.Close()
|
||||
}
|
||||
}
|
||||
|
||||
func TestPlayersRepo_AddPlayer(t *testing.T) {
|
||||
db, teardown := setupPlayersTestDB(t)
|
||||
defer teardown()
|
||||
|
||||
repo := &RepoProvider{DB: db}
|
||||
|
||||
player := &models.Player{
|
||||
RoomID: "test_room_player_1",
|
||||
Username: "test_player_1",
|
||||
Team: "blue",
|
||||
Role: "player",
|
||||
IsBot: false,
|
||||
}
|
||||
|
||||
err := repo.AddPlayer(player)
|
||||
assert.NoError(t, err)
|
||||
|
||||
var retrievedPlayer models.Player
|
||||
err = db.Get(&retrievedPlayer, "SELECT * FROM players WHERE room_id = ? AND username = ?", player.RoomID, player.Username)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, player.Username, retrievedPlayer.Username)
|
||||
}
|
||||
|
||||
func TestPlayersRepo_GetPlayer(t *testing.T) {
|
||||
db, teardown := setupPlayersTestDB(t)
|
||||
defer teardown()
|
||||
|
||||
repo := &RepoProvider{DB: db}
|
||||
|
||||
player := &models.Player{
|
||||
RoomID: "test_room_player_2",
|
||||
Username: "test_player_2",
|
||||
Team: "red",
|
||||
Role: "player",
|
||||
IsBot: false,
|
||||
}
|
||||
|
||||
_, err := db.Exec(`INSERT INTO players (room_id, username, team, role, is_bot) VALUES (?, ?, ?, ?, ?)`, player.RoomID, player.Username, player.Team, player.Role, player.IsBot)
|
||||
assert.NoError(t, err)
|
||||
|
||||
retrievedPlayer, err := repo.GetPlayer(player.RoomID, player.Username)
|
||||
assert.NoError(t, err)
|
||||
assert.NotNil(t, retrievedPlayer)
|
||||
assert.Equal(t, player.Username, retrievedPlayer.Username)
|
||||
}
|
||||
|
||||
func TestPlayersRepo_DeletePlayer(t *testing.T) {
|
||||
db, teardown := setupPlayersTestDB(t)
|
||||
defer teardown()
|
||||
|
||||
repo := &RepoProvider{DB: db}
|
||||
|
||||
player := &models.Player{
|
||||
RoomID: "test_room_player_3",
|
||||
Username: "test_player_3",
|
||||
Team: "blue",
|
||||
Role: "player",
|
||||
IsBot: false,
|
||||
}
|
||||
|
||||
_, err := db.Exec(`INSERT INTO players (room_id, username, team, role, is_bot) VALUES (?, ?, ?, ?, ?)`, player.RoomID, player.Username, player.Team, player.Role, player.IsBot)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = repo.DeletePlayer(player.RoomID, player.Username)
|
||||
assert.NoError(t, err)
|
||||
|
||||
var count int
|
||||
err = db.Get(&count, "SELECT COUNT(*) FROM players WHERE room_id = ? AND username = ?", player.RoomID, player.Username)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, 0, count)
|
||||
}
|
Reference in New Issue
Block a user