Skip to content

Commit aa5c020

Browse files
Update unit tests with new queries
Add unit tests for details query and parser. Add new test case for parsing search output with no data.
1 parent 1c66a3c commit aa5c020

2 files changed

Lines changed: 74 additions & 6 deletions

File tree

test/simplejustwatchapi/test_parser.py

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
from simplejustwatchapi.query import MediaEntry, Offer, parse_search_response, OfferPackage
1+
from pytest import mark
2+
3+
from simplejustwatchapi.query import MediaEntry, Offer, parse_search_response, OfferPackage, parse_details_response
24

35
DETAILS_URL = "https://justwatch.com"
46
IMAGES_URL = "https://images.justwatch.com"
@@ -261,7 +263,7 @@
261263
[],
262264
)
263265

264-
API_RESPONSE_JSON = {
266+
API_SEARCH_RESPONSE_JSON = {
265267
"data": {
266268
"popularTitles": {
267269
"edges": [
@@ -273,7 +275,30 @@
273275
}
274276
}
275277

278+
API_SEARCH_RESPONSE_NO_DATA = {"data": {"popularTitles": {"edges": []}}}
279+
280+
281+
@mark.parametrize(
282+
argnames=["response_json", "expected_output"],
283+
argvalues=[
284+
(API_SEARCH_RESPONSE_JSON, [PARSED_NODE_1, PARSED_NODE_2, PARSED_NODE_3]),
285+
(API_SEARCH_RESPONSE_NO_DATA, [])
286+
]
287+
)
288+
def test_parse_search_response(response_json, expected_output) -> None:
289+
parsed_entries = parse_search_response(response_json)
290+
assert parsed_entries == expected_output
291+
276292

277-
def test_parse() -> None:
278-
parsed_entries = parse_search_response(API_RESPONSE_JSON)
279-
assert [PARSED_NODE_1, PARSED_NODE_2, PARSED_NODE_3] == parsed_entries
293+
@mark.parametrize(
294+
argnames=["response_json", "expected_output"],
295+
argvalues=[
296+
({"data": {"node": RESPONSE_NODE_1}}, PARSED_NODE_1),
297+
({"data": {"node": RESPONSE_NODE_2}}, PARSED_NODE_2),
298+
({"data": {"node": RESPONSE_NODE_3}}, PARSED_NODE_3),
299+
({"errors": [], "data": {"node": None}}, None)
300+
]
301+
)
302+
def test_parse_details_response(response_json, expected_output) -> None:
303+
parsed_entries = parse_details_response(response_json)
304+
assert parsed_entries == expected_output

test/simplejustwatchapi/test_request.py

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from pytest import mark, raises
22

3-
from simplejustwatchapi.query import prepare_search_request
3+
from simplejustwatchapi.query import prepare_search_request, prepare_details_request
44

55
GRAPHQL_DETAILS_QUERY = """
66
query GetTitleNode(
@@ -161,3 +161,46 @@ def test_prepare_search_request_asserts_on_invalid_country_code(invalid_code: st
161161
with raises(AssertionError) as error:
162162
prepare_search_request("", invalid_code, "", 1, True)
163163
assert str(error.value) == expected_error_message
164+
165+
166+
@mark.parametrize(
167+
argnames=["node_id", "country", "language", "best_only"],
168+
argvalues=[
169+
("NODE ID 1", "US", "language 1", True),
170+
("NODE ID 1", "gb", "language 2", False),
171+
],
172+
)
173+
def test_prepare_details_request(
174+
node_id: str, country: str, language: str, best_only: bool
175+
) -> None:
176+
expected_request = {
177+
"operationName": "GetTitleNode",
178+
"variables": {
179+
"nodeId": node_id,
180+
"language": language,
181+
"country": country.upper(),
182+
"formatPoster": "JPG",
183+
"formatOfferIcon": "PNG",
184+
"profile": "S718",
185+
"backdropProfile": "S1920",
186+
"filter": {"bestOnly": best_only},
187+
},
188+
"query": GRAPHQL_DETAILS_QUERY + GRAPHQL_DETAILS_FRAGMENT + GRAPHQL_OFFER_FRAGMENT,
189+
}
190+
request = prepare_details_request(node_id, country, language, best_only)
191+
assert expected_request == request
192+
193+
194+
@mark.parametrize(
195+
argnames=["invalid_code"],
196+
argvalues=[
197+
("United Stated of America",), # too long
198+
("usa",), # too long
199+
("u",), # too short
200+
],
201+
)
202+
def test_prepare_details_request_asserts_on_invalid_country_code(invalid_code: str) -> None:
203+
expected_error_message = f"Invalid country code: {invalid_code}, code must be 2 characters long"
204+
with raises(AssertionError) as error:
205+
prepare_details_request("", invalid_code, "", True)
206+
assert str(error.value) == expected_error_message

0 commit comments

Comments
 (0)