Skip to content

Commit

Permalink
added more tests, fixed creation dao
Browse files Browse the repository at this point in the history
  • Loading branch information
bomzheg committed Jul 27, 2024
1 parent f9508d9 commit c7409f3
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 6 deletions.
3 changes: 2 additions & 1 deletion shvatka/infrastructure/di/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from shvatka.infrastructure.di.bot import BotProvider
from shvatka.infrastructure.di.config import ConfigProvider, DbConfigProvider
from shvatka.infrastructure.di.db import DbProvider, RedisProvider
from shvatka.infrastructure.di.db import DbProvider, RedisProvider, DAOProvider
from shvatka.infrastructure.di.files import FileClientProvider
from shvatka.infrastructure.di.interactors import GamePlayProvider

Expand All @@ -10,6 +10,7 @@ def get_providers(paths_env):
ConfigProvider(paths_env),
DbConfigProvider(),
DbProvider(),
DAOProvider(),
RedisProvider(),
FileClientProvider(),
BotProvider(),
Expand Down
10 changes: 6 additions & 4 deletions shvatka/infrastructure/di/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,18 @@ async def get_session(
async with pool() as session:
yield session

@provide
def get_level_test_data(self) -> LevelTestingData:
return self.level_test


class DAOProvider(Provider):
@provide(scope=Scope.REQUEST)
async def get_dao(
self, session: AsyncSession, redis: Redis, level_test: LevelTestingData
) -> HolderDao:
return HolderDao(session=session, redis=redis, level_test=level_test)

@provide
def get_level_test_data(self) -> LevelTestingData:
return self.level_test


class RedisProvider(Provider):
scope = Scope.APP
Expand Down
27 changes: 26 additions & 1 deletion tests/integration/test_game_stat.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,38 @@ async def test_game_log_keys(


@pytest.mark.asyncio
async def test_game_spy(started_game: dto.FullGame, dao: HolderDao, clock: ClockMock):
async def test_game_spy_started(started_game: dto.FullGame, dao: HolderDao, clock: ClockMock):
assert started_game.start_at is not None
clock.clear()
clock.add_mock(tz=tz_utc, result=started_game.start_at + timedelta(seconds=10))
clock.add_mock(tz=tz_utc, result=started_game.start_at + timedelta(seconds=10))
game_stat = await get_game_spy(started_game, started_game.author, dao.game_stat)
assert len(clock.calls) == 2
assert len(game_stat) == 2
for level_time in game_stat:
assert level_time.hint.number == 0
assert level_time.hint.time == 0
assert level_time.is_finished is False
assert level_time.level_number == 0


@pytest.mark.asyncio
async def test_game_spy_with_first_and_last_hint(
started_game: dto.FullGame, dao: HolderDao, clock: ClockMock
):
assert started_game.start_at is not None
clock.clear()
clock.add_mock(tz=tz_utc, result=started_game.start_at + timedelta(seconds=10))
clock.add_mock(tz=tz_utc, result=started_game.start_at + timedelta(hours=10))
game_stat = await get_game_spy(started_game, started_game.author, dao.game_stat)
assert len(clock.calls) == 2
assert len(game_stat) == 2
assert game_stat[1].hint.number == 3
assert game_stat[1].hint.time == 5
assert game_stat[1].is_finished is False
assert game_stat[1].level_number == 0

assert game_stat[0].hint.number == 0
assert game_stat[0].hint.time == 0
assert game_stat[0].is_finished is False
assert game_stat[0].level_number == 0
4 changes: 4 additions & 0 deletions tests/mocks/datetime_mock.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@ def __call__(self, tz: tzinfo | None = None) -> datetime:

def add_mock(self, tz: tzinfo | None, result: datetime) -> None:
self.mocks.append((tz, result))

def clear(self) -> None:
self.mocks.clear()
self.calls.clear()

0 comments on commit c7409f3

Please sign in to comment.