Skip to content

Commit edfce56

Browse files
committed
refactor tests
1 parent 05e47cd commit edfce56

File tree

8 files changed

+41
-54
lines changed

8 files changed

+41
-54
lines changed

app/api/decks.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import typing
22

33
import fastapi
4-
import sqlalchemy
54
from advanced_alchemy.exceptions import NotFoundError
65
from sqlalchemy import orm
76
from starlette import status
@@ -34,7 +33,7 @@ async def get_deck(
3433
) -> schemas.Deck:
3534
instance = await decks_service.get_one_or_none(
3635
models.Deck.id == deck_id,
37-
statement=sqlalchemy.select(models.Deck).options(orm.selectinload(models.Deck.cards)),
36+
load=[orm.selectinload(models.Deck.cards)],
3837
)
3938
if not instance:
4039
raise fastapi.HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Deck is not found")

app/ioc.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from that_depends import BaseContainer, providers
22

33
from app import repositories
4-
from app.db.resource import create_sa_engine, create_session
4+
from app.resources.db import create_sa_engine, create_session
55
from app.settings import Settings
66

77

File renamed without changes.
File renamed without changes.

tests/factories.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,5 @@ class CardModelFactory(SQLAlchemyFactory[models.Card]):
1414
id = None
1515

1616

17-
class DeckCreateSchemaFactory(ModelFactory[schemas.DeckCreate]):
18-
__model__ = schemas.DeckCreate
19-
20-
2117
class CardCreateSchemaFactory(ModelFactory[schemas.CardCreate]):
2218
__model__ = schemas.CardCreate

tests/test_cards.py

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
from fastapi import status
22
from httpx import AsyncClient
3+
from sqlalchemy.ext.asyncio import AsyncSession
34
from that_depends import Provide, inject
45

56
from app import ioc
6-
from app.repositories import CardsService, DecksService
77
from tests import factories
88

99

1010
@inject
1111
async def test_get_cards_empty(
1212
client: AsyncClient,
13-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
13+
session: AsyncSession = Provide[ioc.IOCContainer.session],
1414
) -> None:
15-
deck = factories.DeckModelFactory.build()
16-
await decks_service.create(deck)
15+
factories.DeckModelFactory.__async_session__ = session
16+
deck = await factories.DeckModelFactory.create_async()
1717

1818
response = await client.get(f"/api/decks/{deck.id}/cards/")
1919
assert response.status_code == status.HTTP_200_OK
@@ -26,14 +26,12 @@ async def test_get_cards_empty(
2626
@inject
2727
async def test_get_cards(
2828
client: AsyncClient,
29-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
30-
cards_repo: CardsService = Provide[ioc.IOCContainer.cards_service],
29+
session: AsyncSession = Provide[ioc.IOCContainer.session],
3130
) -> None:
32-
deck = factories.DeckModelFactory.build()
33-
await decks_service.create(deck)
34-
35-
card = factories.CardModelFactory.build(deck_id=deck.id)
36-
await cards_repo.create(card)
31+
factories.DeckModelFactory.__async_session__ = session
32+
factories.CardModelFactory.__async_session__ = session
33+
deck = await factories.DeckModelFactory.create_async()
34+
card = await factories.CardModelFactory.create_async(deck_id=deck.id)
3735

3836
response = await client.get(f"/api/decks/{card.deck_id}/cards/")
3937
assert response.status_code == status.HTTP_200_OK
@@ -46,14 +44,12 @@ async def test_get_cards(
4644
@inject
4745
async def test_get_card(
4846
client: AsyncClient,
49-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
50-
cards_repo: CardsService = Provide[ioc.IOCContainer.cards_service],
47+
session: AsyncSession = Provide[ioc.IOCContainer.session],
5148
) -> None:
52-
deck = factories.DeckModelFactory.build()
53-
await decks_service.create(deck)
54-
55-
card = factories.CardModelFactory.build(deck_id=deck.id)
56-
await cards_repo.create(card)
49+
factories.DeckModelFactory.__async_session__ = session
50+
factories.CardModelFactory.__async_session__ = session
51+
deck = await factories.DeckModelFactory.create_async()
52+
card = await factories.CardModelFactory.create_async(deck_id=deck.id)
5753

5854
response = await client.get(f"/api/cards/{card.id}/")
5955
assert response.status_code == status.HTTP_200_OK
@@ -69,11 +65,10 @@ async def test_get_card_not_exist(client: AsyncClient) -> None:
6965
@inject
7066
async def test_create_cards(
7167
client: AsyncClient,
72-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
68+
session: AsyncSession = Provide[ioc.IOCContainer.session],
7369
) -> None:
74-
# bulk create
75-
deck = factories.DeckModelFactory.build()
76-
await decks_service.create(deck)
70+
factories.DeckModelFactory.__async_session__ = session
71+
deck = await factories.DeckModelFactory.create_async()
7772

7873
cards_to_create = [factories.CardCreateSchemaFactory.build(), factories.CardCreateSchemaFactory.build()]
7974
response = await client.post(
@@ -107,16 +102,12 @@ async def test_create_cards(
107102
@inject
108103
async def test_update_cards(
109104
client: AsyncClient,
110-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
111-
cards_repo: CardsService = Provide[ioc.IOCContainer.cards_service],
105+
session: AsyncSession = Provide[ioc.IOCContainer.session],
112106
) -> None:
113-
deck = factories.DeckModelFactory.build()
114-
await decks_service.create(deck)
115-
116-
card1 = factories.CardModelFactory.build(deck_id=deck.id)
117-
card2 = factories.CardModelFactory.build(deck_id=deck.id)
118-
await cards_repo.create(card1)
119-
await cards_repo.create(card2)
107+
factories.DeckModelFactory.__async_session__ = session
108+
factories.CardModelFactory.__async_session__ = session
109+
deck = await factories.DeckModelFactory.create_async()
110+
card1, card2 = await factories.CardModelFactory.create_batch_async(size=2, deck_id=deck.id)
120111

121112
updated_data = [
122113
{

tests/test_decks.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import pytest
22
from fastapi import status
33
from httpx import AsyncClient
4+
from sqlalchemy.ext.asyncio import AsyncSession
45
from that_depends import Provide, inject
56

67
from app import ioc
7-
from app.repositories import CardsService, DecksService
88
from tests import factories
99

1010

@@ -22,10 +22,10 @@ async def test_get_decks_not_exist(client: AsyncClient) -> None:
2222
@inject
2323
async def test_get_decks(
2424
client: AsyncClient,
25-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
25+
session: AsyncSession = Provide[ioc.IOCContainer.session],
2626
) -> None:
27-
deck = factories.DeckModelFactory.build()
28-
await decks_service.create(deck)
27+
factories.DeckModelFactory.__async_session__ = session
28+
deck = await factories.DeckModelFactory.create_async()
2929

3030
response = await client.get("/api/decks/")
3131
assert response.status_code == status.HTTP_200_OK
@@ -38,13 +38,14 @@ async def test_get_decks(
3838
@inject
3939
async def test_get_one_deck(
4040
client: AsyncClient,
41-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
42-
cards_service: CardsService = Provide[ioc.IOCContainer.cards_service],
41+
session: AsyncSession = Provide[ioc.IOCContainer.session],
4342
) -> None:
44-
deck = await decks_service.create(factories.DeckModelFactory.build())
45-
card = await cards_service.create(factories.CardModelFactory.build(deck_id=deck.id))
43+
factories.DeckModelFactory.__async_session__ = session
44+
factories.CardModelFactory.__async_session__ = session
45+
deck = await factories.DeckModelFactory.create_async()
46+
card = await factories.CardModelFactory.create_async(deck_id=deck.id)
4647
assert card.id
47-
cards_service.repository.session.expunge_all()
48+
session.expunge_all()
4849

4950
response = await client.get(f"/api/decks/{deck.id}/")
5051
assert response.status_code == status.HTTP_200_OK
@@ -94,10 +95,10 @@ async def test_post_decks(
9495
@inject
9596
async def test_put_decks_wrong_body(
9697
client: AsyncClient,
97-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
98+
session: AsyncSession = Provide[ioc.IOCContainer.session],
9899
) -> None:
99-
deck = factories.DeckModelFactory.build()
100-
await decks_service.create(deck)
100+
factories.DeckModelFactory.__async_session__ = session
101+
deck = await factories.DeckModelFactory.create_async()
101102

102103
# update deck
103104
response = await client.put(
@@ -127,10 +128,10 @@ async def test_put_decks(
127128
client: AsyncClient,
128129
name: str,
129130
description: str,
130-
decks_service: DecksService = Provide[ioc.IOCContainer.decks_service],
131+
session: AsyncSession = Provide[ioc.IOCContainer.session],
131132
) -> None:
132-
deck = factories.DeckModelFactory.build()
133-
await decks_service.create(deck)
133+
factories.DeckModelFactory.__async_session__ = session
134+
deck = await factories.DeckModelFactory.create_async()
134135

135136
# update deck
136137
response = await client.put(

tests/test_main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
async def test_init_resources() -> None:
1414
try:
1515
ioc.IOCContainer.reset_override()
16-
await ioc.IOCContainer.database_engine()
16+
await ioc.IOCContainer.init_resources()
1717
finally:
1818
await ioc.IOCContainer.tear_down()
1919

0 commit comments

Comments
 (0)