Skip to content

Commit 17fddab

Browse files
Merge pull request #10 from piyush-jaiswal/feature/add-subcategory-tests
Add subcategory tests
2 parents 9adc854 + 12cc98e commit 17fddab

File tree

3 files changed

+254
-113
lines changed

3 files changed

+254
-113
lines changed

tests/conftest.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
os.environ["JWT_SECRET_KEY"] = os.urandom(24).hex()
88

99
from app import app, db
10+
from tests import utils
11+
1012

1113

1214
@pytest.fixture
@@ -36,3 +38,14 @@ def _login(email, password):
3638
return client.post("/auth/login", json={"email": email, "password": password})
3739

3840
return _login
41+
42+
43+
@pytest.fixture
44+
def create_authenticated_headers(register_user, login_user):
45+
def _get_headers(email="[email protected]", password="testpassword"):
46+
register_user(email, password)
47+
resp = login_user(email, password)
48+
tokens = resp.get_json()
49+
return utils.get_auth_header(tokens["access_token"])
50+
51+
return _get_headers

tests/test_category.py

Lines changed: 42 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,6 @@ def setup(self, client):
1313
with client.application.app_context():
1414
assert Category.query.count() == 0
1515

16-
@pytest.fixture
17-
def create_authenticated_headers(self, register_user, login_user):
18-
def _get_headers(email="[email protected]", password="testpassword"):
19-
register_user(email, password)
20-
resp = login_user(email, password)
21-
tokens = resp.get_json()
22-
return utils.get_auth_header(tokens["access_token"])
23-
24-
return _get_headers
25-
2616
@pytest.fixture
2717
def create_category(self, create_authenticated_headers):
2818
def _create(name, headers=None):
@@ -118,124 +108,63 @@ def test_delete_category(self, create_authenticated_headers, create_category):
118108
assert get_resp.status_code == 404
119109
self._verify_category_in_db("ToDelete", should_exist=False)
120110

121-
def test_create_category_expired_token(self):
122-
headers = utils.get_expired_token_headers(self.client.application.app_context())
111+
@pytest.mark.parametrize(
112+
"get_headers, expected_code",
113+
[
114+
(lambda self: utils.get_expired_token_headers(self.client.application.app_context()), "token_expired"),
115+
(lambda self: utils.get_invalid_token_headers(), "invalid_token"),
116+
(lambda self: None, "authorization_required")
117+
]
118+
)
119+
def test_create_category_token_error(self, get_headers, expected_code):
120+
headers = get_headers(self)
123121
response = self.client.post(
124-
"/category/create", json={"name": "TestExpired"}, headers=headers
125-
)
126-
127-
utils.verify_token_error_response(response, "token_expired")
128-
self._verify_category_in_db("TestExpired", should_exist=False)
129-
130-
def test_create_category_invalid_token(self):
131-
headers = utils.get_invalid_token_headers()
132-
response = self.client.post(
133-
"/category/create", json={"name": "TestInvalid"}, headers=headers
134-
)
135-
136-
utils.verify_token_error_response(response, "invalid_token")
137-
self._verify_category_in_db("TestInvalid", should_exist=False)
138-
139-
def test_create_category_missing_token(self):
140-
response = self.client.post("/category/create", json={"name": "TestMissing"})
141-
utils.verify_token_error_response(response, "authorization_required")
142-
self._verify_category_in_db("TestMissing", should_exist=False)
143-
144-
def test_update_category_expired_token(
145-
self, create_category, create_authenticated_headers
146-
):
147-
headers = create_authenticated_headers()
148-
response = create_category("UpdateExpired", headers)
149-
data = response.get_json()
150-
cat_id = data["id"]
151-
152-
expired_headers = utils.get_expired_token_headers(
153-
self.client.application.app_context()
122+
"/category/create", json={"name": "CreateTokenError"}, headers=headers
154123
)
155-
update_resp = self.client.put(
156-
f"/category/{cat_id}/update",
157-
json={"name": "UpdatedName"},
158-
headers=expired_headers,
159-
)
160-
161-
utils.verify_token_error_response(update_resp, "token_expired")
162-
self._verify_category_in_db("UpdateExpired")
163-
self._verify_category_in_db("UpdatedName", should_exist=False)
164-
165-
def test_update_category_invalid_token(
166-
self, create_category, create_authenticated_headers
167-
):
124+
utils.verify_token_error_response(response, expected_code)
125+
self._verify_category_in_db("CreateTokenError", should_exist=False)
126+
127+
@pytest.mark.parametrize(
128+
"get_headers, expected_code",
129+
[
130+
(lambda self: utils.get_expired_token_headers(self.client.application.app_context()), "token_expired"),
131+
(lambda self: utils.get_invalid_token_headers(), "invalid_token"),
132+
(lambda self: None, "authorization_required")
133+
]
134+
)
135+
def test_update_category_token_error(self, get_headers, create_category, create_authenticated_headers, expected_code):
168136
headers = create_authenticated_headers()
169-
response = create_category("UpdateInvalid", headers)
137+
response = create_category("UpdateTokenError", headers)
170138
data = response.get_json()
171139
cat_id = data["id"]
172140

173-
invalid_headers = utils.get_invalid_token_headers()
141+
update_headers = get_headers(self)
174142
update_resp = self.client.put(
175143
f"/category/{cat_id}/update",
176144
json={"name": "UpdatedName"},
177-
headers=invalid_headers,
145+
headers=update_headers,
178146
)
179147

180-
utils.verify_token_error_response(update_resp, "invalid_token")
181-
self._verify_category_in_db("UpdateInvalid")
148+
utils.verify_token_error_response(update_resp, expected_code)
149+
self._verify_category_in_db("UpdateTokenError")
182150
self._verify_category_in_db("UpdatedName", should_exist=False)
183151

184-
def test_update_category_missing_token(
185-
self, create_category, create_authenticated_headers
186-
):
187-
headers = create_authenticated_headers()
188-
response = create_category("UpdateMissing", headers)
189-
data = response.get_json()
190-
cat_id = data["id"]
191-
192-
update_resp = self.client.put(
193-
f"/category/{cat_id}/update", json={"name": "UpdatedName"}
194-
)
195-
196-
utils.verify_token_error_response(update_resp, "authorization_required")
197-
self._verify_category_in_db("UpdateMissing")
198-
self._verify_category_in_db("UpdatedName", should_exist=False)
199-
200-
def test_delete_category_expired_token(
201-
self, create_category, create_authenticated_headers
202-
):
203-
headers = create_authenticated_headers()
204-
response = create_category("DeleteExpired", headers)
205-
data = response.get_json()
206-
cat_id = data["id"]
207-
208-
expired_headers = utils.get_expired_token_headers(
209-
self.client.application.app_context()
210-
)
211-
delete_resp = self.client.delete(f"/category/{cat_id}", headers=expired_headers)
212-
213-
utils.verify_token_error_response(delete_resp, "token_expired")
214-
self._verify_category_in_db("DeleteExpired")
215-
216-
def test_delete_category_invalid_token(
217-
self, create_category, create_authenticated_headers
218-
):
219-
headers = create_authenticated_headers()
220-
response = create_category("DeleteInvalid", headers)
221-
data = response.get_json()
222-
cat_id = data["id"]
223-
224-
invalid_headers = utils.get_invalid_token_headers()
225-
delete_resp = self.client.delete(f"/category/{cat_id}", headers=invalid_headers)
226-
227-
utils.verify_token_error_response(delete_resp, "invalid_token")
228-
self._verify_category_in_db("DeleteInvalid")
229-
230-
def test_delete_category_missing_token(
231-
self, create_category, create_authenticated_headers
232-
):
152+
@pytest.mark.parametrize(
153+
"get_headers, expected_code",
154+
[
155+
(lambda self: utils.get_expired_token_headers(self.client.application.app_context()), "token_expired"),
156+
(lambda self: utils.get_invalid_token_headers(), "invalid_token"),
157+
(lambda self: None, "authorization_required")
158+
]
159+
)
160+
def test_delete_category_token_error(self, get_headers, create_category, create_authenticated_headers, expected_code):
233161
headers = create_authenticated_headers()
234-
response = create_category("DeleteMissing", headers)
162+
response = create_category("DeleteTokenError", headers)
235163
data = response.get_json()
236164
cat_id = data["id"]
237165

238-
delete_resp = self.client.delete(f"/category/{cat_id}")
166+
delete_headers = get_headers(self)
167+
delete_resp = self.client.delete(f"/category/{cat_id}", headers=delete_headers)
239168

240-
utils.verify_token_error_response(delete_resp, "authorization_required")
241-
self._verify_category_in_db("DeleteMissing")
169+
utils.verify_token_error_response(delete_resp, expected_code)
170+
self._verify_category_in_db("DeleteTokenError")

0 commit comments

Comments
 (0)