Skip to content

Commit c14073e

Browse files
committed
Add list characters service tests
1 parent 2fd74b3 commit c14073e

File tree

1 file changed

+225
-0
lines changed

1 file changed

+225
-0
lines changed
Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
from unittest.mock import AsyncMock, MagicMock, patch
2+
3+
import pytest
4+
from faker import Faker
5+
6+
from futuramaapi.routers.services.characters.list_characters import ListCharactersService
7+
8+
9+
@pytest.fixture
10+
def mock_paginate(request):
11+
patcher = patch(
12+
"futuramaapi.routers.services.characters.list_characters.paginate",
13+
new_callable=AsyncMock,
14+
)
15+
mocked = patcher.start()
16+
request.addfinalizer(patcher.stop)
17+
return mocked
18+
19+
20+
class TestListCharactersService:
21+
@pytest.mark.asyncio
22+
async def test_list_characters_success(
23+
self,
24+
mock_session_manager,
25+
mock_paginate,
26+
):
27+
# Arrange
28+
page = MagicMock()
29+
mock_paginate.return_value = page
30+
31+
service = ListCharactersService(
32+
gender=None,
33+
character_status=None,
34+
species=None,
35+
query=None,
36+
)
37+
38+
# Act
39+
result = await service()
40+
41+
# Assert
42+
assert result is page
43+
mock_paginate.assert_called_once()
44+
45+
args, _ = mock_paginate.call_args
46+
assert args[0] is mock_session_manager
47+
48+
@pytest.mark.asyncio
49+
async def test_list_characters_gender_negation(
50+
self,
51+
mock_session_manager,
52+
mock_paginate,
53+
):
54+
# Arrange
55+
mock_paginate.return_value = MagicMock()
56+
57+
service = ListCharactersService(
58+
gender="!male",
59+
character_status=None,
60+
species=None,
61+
query=None,
62+
)
63+
64+
# Act
65+
await service()
66+
67+
# Assert
68+
mock_paginate.assert_called_once()
69+
70+
@pytest.mark.asyncio
71+
async def test_list_characters_gender_positive(
72+
self,
73+
mock_session_manager,
74+
mock_paginate,
75+
):
76+
# Arrange
77+
mock_paginate.return_value = MagicMock()
78+
79+
service = ListCharactersService(
80+
gender="male",
81+
character_status=None,
82+
species=None,
83+
query=None,
84+
)
85+
86+
# Act
87+
await service()
88+
89+
# Assert
90+
mock_paginate.assert_called_once()
91+
92+
@pytest.mark.asyncio
93+
async def test_list_characters_status_positive(
94+
self,
95+
mock_session_manager,
96+
mock_paginate,
97+
):
98+
# Arrange
99+
mock_paginate.return_value = MagicMock()
100+
101+
service = ListCharactersService(
102+
gender=None,
103+
character_status="alive",
104+
species=None,
105+
query=None,
106+
)
107+
108+
# Act
109+
await service()
110+
111+
# Assert
112+
mock_paginate.assert_called_once()
113+
114+
@pytest.mark.asyncio
115+
async def test_list_characters_status_negation(
116+
self,
117+
mock_session_manager,
118+
mock_paginate,
119+
):
120+
# Arrange
121+
mock_paginate.return_value = MagicMock()
122+
123+
service = ListCharactersService(
124+
gender=None,
125+
character_status="!alive",
126+
species=None,
127+
query=None,
128+
)
129+
130+
# Act
131+
await service()
132+
133+
# Assert
134+
mock_paginate.assert_called_once()
135+
136+
@pytest.mark.asyncio
137+
async def test_list_characters_species_positive(
138+
self,
139+
mock_session_manager,
140+
mock_paginate,
141+
):
142+
# Arrange
143+
mock_paginate.return_value = MagicMock()
144+
145+
service = ListCharactersService(
146+
gender=None,
147+
character_status=None,
148+
species="human",
149+
query=None,
150+
)
151+
152+
# Act
153+
await service()
154+
155+
# Assert
156+
mock_paginate.assert_called_once()
157+
158+
@pytest.mark.asyncio
159+
async def test_list_characters_species_negation(
160+
self,
161+
mock_session_manager,
162+
mock_paginate,
163+
):
164+
# Arrange
165+
mock_paginate.return_value = MagicMock()
166+
167+
service = ListCharactersService(
168+
gender=None,
169+
character_status=None,
170+
species="!human",
171+
query=None,
172+
)
173+
174+
# Act
175+
await service()
176+
177+
# Assert
178+
mock_paginate.assert_called_once()
179+
180+
@pytest.mark.asyncio
181+
async def test_list_characters_query_filter(
182+
self,
183+
faker: Faker,
184+
mock_session_manager,
185+
mock_paginate,
186+
):
187+
# Arrange
188+
mock_paginate.return_value = MagicMock()
189+
190+
service = ListCharactersService(
191+
gender=None,
192+
character_status=None,
193+
species=None,
194+
query=faker.word(),
195+
)
196+
197+
# Act
198+
await service()
199+
200+
# Assert
201+
mock_paginate.assert_called_once()
202+
203+
@pytest.mark.asyncio
204+
async def test_list_characters_order_desc(
205+
self,
206+
mock_session_manager,
207+
mock_paginate,
208+
):
209+
# Arrange
210+
mock_paginate.return_value = MagicMock()
211+
212+
service = ListCharactersService(
213+
order_by="id",
214+
direction="desc",
215+
gender=None,
216+
character_status=None,
217+
species=None,
218+
query=None,
219+
)
220+
221+
# Act
222+
await service()
223+
224+
# Assert
225+
mock_paginate.assert_called_once()

0 commit comments

Comments
 (0)