Files
snake-python/tests/test_GameStateStore.py
T

97 lines
2.3 KiB
Python

import unittest
from server.GameBoard import GameBoard
from server.GameStateStore import GameStateStore
from snakes.TemplateSnake import TemplateSnake
class _FakeRedis:
def __init__(self):
self.data = {}
async def set(self, key, value, ex=None):
self.data[key] = value
async def get(self, key):
return self.data.get(key)
async def delete(self, key):
self.data.pop(key, None)
async def aclose(self):
return None
class TestGameStateStore(unittest.IsolatedAsyncioTestCase):
def _build_board(self) -> GameBoard:
board = GameBoard(
game_id="game-1",
width=11,
height=11,
ruleset={"name": "standard", "version": "v1.0.0"},
source="custom",
map="standard",
snake_class=TemplateSnake(),
)
board.read_game_data(
{
"turn": 3,
"board": {
"food": [{"x": 1, "y": 1}],
"hazards": [],
"snakes": [
{
"id": "me",
"name": "me",
"health": 99,
"length": 3,
"head": {"x": 2, "y": 2},
"body": [
{"x": 2, "y": 2},
{"x": 2, "y": 1},
{"x": 2, "y": 0},
],
}
],
},
"you": {
"id": "me",
"name": "me",
"health": 99,
"length": 3,
"head": {"x": 2, "y": 2},
"body": [
{"x": 2, "y": 2},
{"x": 2, "y": 1},
{"x": 2, "y": 0},
],
},
"game": {"timeout": 500},
}
)
return board
async def test_memory_backend_returns_none(self):
store = GameStateStore(backend="memory")
board = self._build_board()
await store.save("game-1", board)
loaded = await store.load("game-1")
self.assertIsNone(loaded)
async def test_redis_backend_roundtrip(self):
store = GameStateStore(backend="redis")
store._redis = _FakeRedis()
board = self._build_board()
await store.save("game-1", board)
loaded = await store.load("game-1")
self.assertIsNotNone(loaded)
self.assertEqual(loaded.id, "game-1")
self.assertEqual(loaded.get_turn(), 3)
await store.delete("game-1")
self.assertIsNone(await store.load("game-1"))
if __name__ == "__main__":
unittest.main()