Skip to content

Commit 3ff3750

Browse files
update url in tests, fix passing headers as positional args bug and handle IntegrityError in test_create_category_duplicate_name
1 parent 9b7043e commit 3ff3750

File tree

3 files changed

+37
-32
lines changed

3 files changed

+37
-32
lines changed

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ def _create(name, subcategories=None, headers=None):
5858
payload = {"name": name}
5959
if subcategories is not None:
6060
payload["subcategories"] = subcategories
61-
return client.post("/category/create", json=payload, headers=headers)
61+
return client.post("/categories", json=payload, headers=headers)
6262

6363
return _create
6464

tests/test_category.py

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
import sqlite3
2+
13
import pytest
4+
from sqlalchemy.exc import IntegrityError
25

36
from app.models import Category
47
from tests import utils
@@ -36,19 +39,23 @@ def test_create_category(self, create_category):
3639
assert "id" in data
3740
self._verify_category_in_db(self.TEST_CATEGORY_NAME)
3841

39-
def test_create_category_duplicate_name(self, create_category):
40-
create_category(self.TEST_CATEGORY_NAME)
41-
response = create_category(self.TEST_CATEGORY_NAME)
42+
def test_create_category_duplicate_name(self, create_category, create_authenticated_headers):
43+
headers = create_authenticated_headers()
44+
create_category(self.TEST_CATEGORY_NAME, headers=headers)
4245

43-
assert response.status_code == 500
46+
with pytest.raises(IntegrityError) as ie:
47+
create_category(self.TEST_CATEGORY_NAME, headers=headers)
48+
49+
assert isinstance(ie.value.orig, sqlite3.IntegrityError)
50+
assert "UNIQUE constraint failed" in str(ie.value.orig)
4451
assert self._count_categories() == 1
4552
self._verify_category_in_db(self.TEST_CATEGORY_NAME)
4653

4754
def test_get_category_by_id(self, create_category):
4855
response = create_category("Books")
4956
data = response.get_json()
5057
cat_id = data["id"]
51-
get_resp = self.client.get(f"/category/{cat_id}")
58+
get_resp = self.client.get(f"/categories/{cat_id}")
5259

5360
assert get_resp.status_code == 200
5461
data = get_resp.get_json()
@@ -70,14 +77,14 @@ def test_get_all_categories(self, create_category):
7077

7178
def test_update_category(self, create_authenticated_headers, create_category):
7279
headers = create_authenticated_headers()
73-
response = create_category("OldName", headers)
80+
response = create_category("OldName", headers=headers)
7481
data = response.get_json()
7582
cat_id = data["id"]
7683
update_resp = self.client.put(
77-
f"/category/{cat_id}/update", json={"name": "NewName"}, headers=headers
84+
f"/categories/{cat_id}", json={"name": "NewName"}, headers=headers
7885
)
7986

80-
assert update_resp.status_code == 201
87+
assert update_resp.status_code == 200
8188
data = update_resp.get_json()
8289
assert data["name"] == "NewName"
8390
assert data["id"] == cat_id
@@ -87,13 +94,13 @@ def test_update_category(self, create_authenticated_headers, create_category):
8794

8895
def test_delete_category(self, create_authenticated_headers, create_category):
8996
headers = create_authenticated_headers()
90-
response = create_category("ToDelete", headers)
97+
response = create_category("ToDelete", headers=headers)
9198
data = response.get_json()
9299
cat_id = data["id"]
93-
delete_resp = self.client.delete(f"/category/{cat_id}", headers=headers)
100+
delete_resp = self.client.delete(f"/categories/{cat_id}", headers=headers)
94101

95-
assert delete_resp.status_code == 200
96-
get_resp = self.client.get(f"/category/{cat_id}")
102+
assert delete_resp.status_code == 204
103+
get_resp = self.client.get(f"/categories/{cat_id}")
97104
assert get_resp.status_code == 404
98105
self._verify_category_in_db("ToDelete", should_exist=False)
99106

@@ -108,7 +115,7 @@ def test_delete_category(self, create_authenticated_headers, create_category):
108115
def test_create_category_token_error(self, get_headers, expected_code):
109116
headers = get_headers(self)
110117
response = self.client.post(
111-
"/category/create", json={"name": "CreateTokenError"}, headers=headers
118+
"/categories", json={"name": "CreateTokenError"}, headers=headers
112119
)
113120
utils.verify_token_error_response(response, expected_code)
114121
self._verify_category_in_db("CreateTokenError", should_exist=False)
@@ -121,15 +128,14 @@ def test_create_category_token_error(self, get_headers, expected_code):
121128
(lambda self: None, "authorization_required")
122129
]
123130
)
124-
def test_update_category_token_error(self, get_headers, create_category, create_authenticated_headers, expected_code):
125-
headers = create_authenticated_headers()
126-
response = create_category("UpdateTokenError", headers)
131+
def test_update_category_token_error(self, get_headers, create_category, expected_code):
132+
response = create_category("UpdateTokenError")
127133
data = response.get_json()
128134
cat_id = data["id"]
129135

130136
update_headers = get_headers(self)
131137
update_resp = self.client.put(
132-
f"/category/{cat_id}/update",
138+
f"/categories/{cat_id}",
133139
json={"name": "UpdatedName"},
134140
headers=update_headers,
135141
)
@@ -146,14 +152,13 @@ def test_update_category_token_error(self, get_headers, create_category, create_
146152
(lambda self: None, "authorization_required")
147153
]
148154
)
149-
def test_delete_category_token_error(self, get_headers, create_category, create_authenticated_headers, expected_code):
150-
headers = create_authenticated_headers()
151-
response = create_category("DeleteTokenError", headers)
155+
def test_delete_category_token_error(self, get_headers, create_category, expected_code):
156+
response = create_category("DeleteTokenError")
152157
data = response.get_json()
153158
cat_id = data["id"]
154159

155160
delete_headers = get_headers(self)
156-
delete_resp = self.client.delete(f"/category/{cat_id}", headers=delete_headers)
161+
delete_resp = self.client.delete(f"/categories/{cat_id}", headers=delete_headers)
157162

158163
utils.verify_token_error_response(delete_resp, expected_code)
159164
self._verify_category_in_db("DeleteTokenError")

tests/test_relationships.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import pytest
22

3-
from app.models import Category, Subcategory, Product
3+
from app.models import Category, Product, Subcategory
44

55

66
class TestRelationships:
@@ -91,8 +91,8 @@ def test_update_category_adds_subcategories(self, create_authenticated_headers,
9191
category = create_category("U_Cat", subcategories=[subcategory1["id"]]).get_json()
9292

9393
headers = create_authenticated_headers()
94-
update_response = self.client.put(f"/category/{category['id']}/update", json={"subcategories": [subcategory2["id"]]}, headers=headers)
95-
assert update_response.status_code == 201
94+
update_response = self.client.put(f"/categories/{category['id']}", json={"subcategories": [subcategory2["id"]]}, headers=headers)
95+
assert update_response.status_code == 200
9696

9797
assert self._category_subcategory_ids(category["id"]) == sorted([subcategory1["id"], subcategory2["id"]])
9898

@@ -127,20 +127,20 @@ def test_update_product_adds_subcategories(self, create_authenticated_headers, c
127127

128128
def test_get_category_subcategories_empty(self, create_category):
129129
category = create_category("Cat_NoSC").get_json()
130-
resp = self.client.get(f"/category/{category['id']}/subcategories")
130+
resp = self.client.get(f"/categories/{category['id']}/subcategories")
131131
self._assert_related_collection(resp, "subcategories")
132132

133133
def test_get_category_subcategories_populated(self, create_category, create_subcategory):
134134
subcategory1 = create_subcategory("SC1").get_json()
135135
subcategory2 = create_subcategory("SC2").get_json()
136136
category = create_category("Cat_WithSC", subcategories=[subcategory1["id"], subcategory2["id"]]).get_json()
137137

138-
resp = self.client.get(f"/category/{category['id']}/subcategories")
138+
resp = self.client.get(f"/categories/{category['id']}/subcategories")
139139
self._assert_related_collection(resp, "subcategories", expected_ids=[subcategory1["id"], subcategory2["id"]])
140140

141141
def test_get_category_products_empty(self, create_category):
142142
category = create_category("Cat_NoProd").get_json()
143-
resp = self.client.get(f"/category/{category['id']}/products")
143+
resp = self.client.get(f"/categories/{category['id']}/products")
144144
self._assert_related_collection(resp, "products")
145145

146146
def test_get_category_products_populated_with_pagination(self, create_category, create_subcategory, create_product):
@@ -152,8 +152,8 @@ def test_get_category_products_populated_with_pagination(self, create_category,
152152
product_resp = create_product(f"P{index}", "desc", subcategories=[subcategory["id"]])
153153
product_ids.add(product_resp.get_json().get("id"))
154154

155-
page1 = self.client.get(f"/category/{category['id']}/products?page=1").get_json()
156-
page2 = self.client.get(f"/category/{category['id']}/products?page=2").get_json()
155+
page1 = self.client.get(f"/categories/{category['id']}/products?page=1").get_json()
156+
page2 = self.client.get(f"/categories/{category['id']}/products?page=2").get_json()
157157
assert len(page1["products"]) == 10
158158
assert len(page2["products"]) == 2
159159

@@ -210,8 +210,8 @@ def test_get_product_subcategories_populated(self, create_product, create_subcat
210210
@pytest.mark.parametrize(
211211
"path",
212212
[
213-
"/category/999999/subcategories",
214-
"/category/999999/products",
213+
"/categories/999999/subcategories",
214+
"/categories/999999/products",
215215
"/subcategory/999999/categories",
216216
"/subcategory/999999/products",
217217
"/product/999999/subcategories",

0 commit comments

Comments
 (0)