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
	 Grail Finder
					Grail Finder