Skip to content

Commit 688e5ac

Browse files
Add unit tests for "requests" module
1 parent ad201e9 commit 688e5ac

1 file changed

Lines changed: 119 additions & 0 deletions

File tree

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
from pytest import mark, raises
2+
3+
from simplejustwatchpythonapi.requests import prepare_search_request
4+
5+
GRAPHQL_SEARCH_QUERY = """
6+
query GetSearchTitles(
7+
$searchTitlesFilter: TitleFilter!,
8+
$country: Country!,
9+
$language: Language!,
10+
$first: Int!,
11+
$format: ImageFormat,
12+
$profile: PosterProfile,
13+
$backdropProfile: BackdropProfile,
14+
$filter: OfferFilter!,
15+
) {
16+
popularTitles(
17+
country: $country
18+
filter: $searchTitlesFilter
19+
first: $first
20+
sortBy: POPULAR
21+
sortRandomSeed: 0
22+
) {
23+
edges {
24+
...SearchTitleGraphql
25+
__typename
26+
}
27+
__typename
28+
}
29+
}
30+
31+
fragment SearchTitleGraphql on PopularTitlesEdge {
32+
node {
33+
id
34+
objectId
35+
objectType
36+
content(country: $country, language: $language) {
37+
title
38+
fullPath
39+
originalReleaseYear
40+
originalReleaseDate
41+
genres {
42+
shortName
43+
__typename
44+
}
45+
externalIds {
46+
imdbId
47+
__typename
48+
}
49+
posterUrl(profile: $profile, format: $format)
50+
backdrops(profile: $backdropProfile, format: $format) {
51+
backdropUrl
52+
__typename
53+
}
54+
__typename
55+
}
56+
offers(country: $country, platform: WEB, filter: $filter) {
57+
monetizationType
58+
presentationType
59+
standardWebURL
60+
retailPrice(language: $language)
61+
retailPriceValue
62+
currency
63+
package {
64+
id
65+
packageId
66+
clearName
67+
technicalName
68+
icon(profile: S100)
69+
__typename
70+
}
71+
id
72+
__typename
73+
}
74+
__typename
75+
}
76+
__typename
77+
}
78+
"""
79+
80+
81+
@mark.parametrize(
82+
argnames=["title", "country", "language", "count", "best_only"],
83+
argvalues=[
84+
("TITLE 1", "US", "language 1", 5, True),
85+
("TITLE 2", "gb", "language 2", 10, False),
86+
]
87+
)
88+
def test_prepare_search_request(title: str, country: str, language: str, count: int, best_only: bool) -> None:
89+
expected_request = {
90+
"operationName": "GetSearchTitles",
91+
"variables": {
92+
"first": count,
93+
"searchTitlesFilter": {"searchQuery": title},
94+
"language": language,
95+
"country": country.upper(),
96+
"format": "JPG",
97+
"profile": "S718",
98+
"backdropProfile": "S1920",
99+
"filter": {"bestOnly": best_only},
100+
},
101+
"query": GRAPHQL_SEARCH_QUERY,
102+
}
103+
request = prepare_search_request(title, country, language, count, best_only)
104+
assert expected_request == request
105+
106+
107+
@mark.parametrize(
108+
argnames=["invalid_code"],
109+
argvalues=[
110+
("United Stated of America",), # too long
111+
("usa",), # too long
112+
("u",), # too short
113+
]
114+
)
115+
def test_prepare_search_request_asserts_on_invalid_country_code(invalid_code: str) -> None:
116+
expected_error_message = f"Invalid country code: {invalid_code}, code must be 2 characters long"
117+
with raises(AssertionError) as error:
118+
prepare_search_request("", invalid_code, "", 1, True)
119+
assert str(error.value) == expected_error_message

0 commit comments

Comments
 (0)