Skip to content

Commit 1756f82

Browse files
update subcategory tests and add duplicate link test
1 parent 2f65cdd commit 1756f82

File tree

3 files changed

+84
-39
lines changed

3 files changed

+84
-39
lines changed

tests/conftest.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ def _create(name, categories=None, products=None, headers=None):
7373
payload["categories"] = categories
7474
if products is not None:
7575
payload["products"] = products
76-
return client.post("/subcategory/create", json=payload, headers=headers)
76+
return client.post("/subcategories", json=payload, headers=headers)
7777

7878
return _create
7979

tests/test_relationships.py

Lines changed: 59 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -112,23 +112,58 @@ def test_update_category_adds_linked_subcategories(self, create_authenticated_he
112112
assert self._category_subcategory_ids(category["id"]) == [subcategory["id"]]
113113

114114
def test_update_subcategory_adds_categories_and_products(self, create_authenticated_headers, create_category, create_product, create_subcategory):
115-
category1 = create_category("UC1").get_json()
116-
category2 = create_category("UC2").get_json()
117-
product1 = create_product("UP1").get_json()
118-
product2 = create_product("UP2").get_json()
119-
subcategory = create_subcategory("U_SC").get_json()
120-
121115
headers = create_authenticated_headers()
116+
category1 = create_category("UC1", headers=headers).get_json()
117+
category2 = create_category("UC2", headers=headers).get_json()
118+
product1 = create_product("UP1", headers=headers).get_json()
119+
product2 = create_product("UP2", headers=headers).get_json()
120+
subcategory = create_subcategory("U_SC", headers=headers).get_json()
121+
122122
update_response = self.client.put(
123-
f"/subcategory/{subcategory['id']}/update",
123+
f"/subcategories/{subcategory['id']}",
124124
json={"categories": [category1["id"], category2["id"]], "products": [product1["id"], product2["id"]]},
125125
headers=headers,
126126
)
127-
assert update_response.status_code == 201
127+
assert update_response.status_code == 200
128128

129129
assert self._subcategory_category_ids(subcategory["id"]) == sorted([category1["id"], category2["id"]])
130130
assert self._subcategory_product_ids(subcategory["id"]) == sorted([product1["id"], product2["id"]])
131131

132+
def test_update_subcategory_adds_linked_categories_and_products(self, create_authenticated_headers, create_category, create_product, create_subcategory):
133+
headers = create_authenticated_headers()
134+
category = create_category("UC1", headers=headers).get_json()
135+
product = create_product("UP1", headers=headers).get_json()
136+
subcategory = create_subcategory("U_SC", categories=[category["id"]], products=[product["id"]], headers=headers).get_json()
137+
138+
with pytest.raises(IntegrityError) as ie_c:
139+
self.client.put(
140+
f"/subcategories/{subcategory['id']}",
141+
json={"categories": [category["id"]]},
142+
headers=headers,
143+
)
144+
with pytest.raises(IntegrityError) as ie_p:
145+
self.client.put(
146+
f"/subcategories/{subcategory['id']}",
147+
json={"products": [product["id"]]},
148+
headers=headers,
149+
)
150+
with pytest.raises(IntegrityError) as ie_cp:
151+
self.client.put(
152+
f"/subcategories/{subcategory['id']}",
153+
json={"categories": [category["id"]], "products": [product["id"]]},
154+
headers=headers,
155+
)
156+
157+
assert isinstance(ie_c.value.orig, sqlite3.IntegrityError)
158+
assert isinstance(ie_p.value.orig, sqlite3.IntegrityError)
159+
assert isinstance(ie_cp.value.orig, sqlite3.IntegrityError)
160+
assert "UNIQUE constraint failed" in str(ie_c.value.orig)
161+
assert "UNIQUE constraint failed" in str(ie_p.value.orig)
162+
assert "UNIQUE constraint failed" in str(ie_cp.value.orig)
163+
164+
assert self._subcategory_category_ids(subcategory["id"]) == [category["id"]]
165+
assert self._subcategory_product_ids(subcategory["id"]) == [product["id"]]
166+
132167
def test_update_product_adds_subcategories(self, create_authenticated_headers, create_product, create_subcategory):
133168
subcategory1 = create_subcategory("UPS1").get_json()
134169
subcategory2 = create_subcategory("UPS2").get_json()
@@ -177,32 +212,34 @@ def test_get_category_products_populated_with_pagination(self, create_category,
177212

178213
def test_get_subcategory_categories_empty(self, create_subcategory):
179214
subcategory = create_subcategory("SC_NoCat").get_json()
180-
resp = self.client.get(f"/subcategory/{subcategory['id']}/categories")
215+
resp = self.client.get(f"/subcategories/{subcategory['id']}/categories")
181216
self._assert_related_collection(resp, "categories")
182217

183-
def test_get_subcategory_categories_populated(self, create_category, create_subcategory):
184-
category1 = create_category("C1").get_json()
185-
category2 = create_category("C2").get_json()
186-
subcategory = create_subcategory("SC_Cats", categories=[category1["id"], category2["id"]]).get_json()
218+
def test_get_subcategory_categories_populated(self, create_category, create_subcategory, create_authenticated_headers):
219+
headers = create_authenticated_headers()
220+
category1 = create_category("C1", headers=headers).get_json()
221+
category2 = create_category("C2", headers=headers).get_json()
222+
subcategory = create_subcategory("SC_Cats", categories=[category1["id"], category2["id"]], headers=headers).get_json()
187223

188-
resp = self.client.get(f"/subcategory/{subcategory['id']}/categories")
224+
resp = self.client.get(f"/subcategories/{subcategory['id']}/categories")
189225
self._assert_related_collection(resp, "categories", expected_ids=[category1["id"], category2["id"]])
190226

191227
def test_get_subcategory_products_empty(self, create_subcategory):
192228
subcategory = create_subcategory("SC_NoProd").get_json()
193-
resp = self.client.get(f"/subcategory/{subcategory['id']}/products")
229+
resp = self.client.get(f"/subcategories/{subcategory['id']}/products")
194230
self._assert_related_collection(resp, "products")
195231

196-
def test_get_subcategory_products_populated_with_pagination(self, create_subcategory, create_product):
197-
subcategory = create_subcategory("SC_Pag").get_json()
232+
def test_get_subcategory_products_populated_with_pagination(self, create_subcategory, create_product, create_authenticated_headers):
233+
headers = create_authenticated_headers()
234+
subcategory = create_subcategory("SC_Pag", headers=headers).get_json()
198235

199236
product_ids = set()
200237
for index in range(11):
201-
product_resp = create_product(f"SP{index}", "desc", subcategories=[subcategory["id"]])
238+
product_resp = create_product(f"SP{index}", "desc", subcategories=[subcategory["id"]], headers=headers)
202239
product_ids.add(product_resp.get_json().get("id"))
203240

204-
page1 = self.client.get(f"/subcategory/{subcategory['id']}/products?page=1").get_json()
205-
page2 = self.client.get(f"/subcategory/{subcategory['id']}/products?page=2").get_json()
241+
page1 = self.client.get(f"/subcategories/{subcategory['id']}/products?page=1").get_json()
242+
page2 = self.client.get(f"/subcategories/{subcategory['id']}/products?page=2").get_json()
206243
assert len(page1["products"]) == 10
207244
assert len(page2["products"]) == 1
208245

@@ -227,8 +264,8 @@ def test_get_product_subcategories_populated(self, create_product, create_subcat
227264
[
228265
"/categories/999999/subcategories",
229266
"/categories/999999/products",
230-
"/subcategory/999999/categories",
231-
"/subcategory/999999/products",
267+
"/subcategories/999999/categories",
268+
"/subcategories/999999/products",
232269
"/product/999999/subcategories",
233270
],
234271
)

tests/test_subcategory.py

Lines changed: 24 additions & 16 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 Subcategory
47
from tests import utils
@@ -36,28 +39,33 @@ def test_create_subcategory(self, create_subcategory):
3639
assert "id" in data
3740
self._verify_subcategory_in_db(self.TEST_SUBCATEGORY_NAME)
3841

39-
def test_create_subcategory_duplicate_name(self, create_subcategory):
40-
create_subcategory(self.TEST_SUBCATEGORY_NAME)
41-
response = create_subcategory(self.TEST_SUBCATEGORY_NAME)
42+
def test_create_subcategory_duplicate_name(self, create_subcategory, create_authenticated_headers):
43+
headers = create_authenticated_headers()
44+
create_subcategory(self.TEST_SUBCATEGORY_NAME, headers=headers)
4245

43-
assert response.status_code == 500
46+
with pytest.raises(IntegrityError) as ie:
47+
create_subcategory(self.TEST_SUBCATEGORY_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_subcategories() == 1
4552
self._verify_subcategory_in_db(self.TEST_SUBCATEGORY_NAME)
4653

4754
def test_get_subcategory_by_id(self, create_subcategory):
4855
response = create_subcategory("Laptops")
4956
data = response.get_json()
5057
sc_id = data["id"]
51-
get_resp = self.client.get(f"/subcategory/{sc_id}")
58+
get_resp = self.client.get(f"/subcategories/{sc_id}")
5259

5360
assert get_resp.status_code == 200
5461
data = get_resp.get_json()
5562
assert data["name"] == "Laptops"
5663
assert data["id"] == sc_id
5764

58-
def test_get_all_subcategories(self, create_subcategory):
59-
create_subcategory("A")
60-
create_subcategory("B")
65+
def test_get_all_subcategories(self, create_subcategory, create_authenticated_headers):
66+
headers = create_authenticated_headers()
67+
create_subcategory("A", headers=headers)
68+
create_subcategory("B", headers=headers)
6169
resp = self.client.get("/subcategories")
6270

6371
assert resp.status_code == 200
@@ -74,10 +82,10 @@ def test_update_subcategory(self, create_authenticated_headers, create_subcatego
7482
data = response.get_json()
7583
sc_id = data["id"]
7684
update_resp = self.client.put(
77-
f"/subcategory/{sc_id}/update", json={"name": "NewSubcat"}, headers=headers
85+
f"/subcategories/{sc_id}", json={"name": "NewSubcat"}, headers=headers
7886
)
7987

80-
assert update_resp.status_code == 201
88+
assert update_resp.status_code == 200
8189
data = update_resp.get_json()
8290
assert data["name"] == "NewSubcat"
8391
assert data["id"] == sc_id
@@ -89,10 +97,10 @@ def test_delete_subcategory(self, create_authenticated_headers, create_subcatego
8997
response = create_subcategory("ToDelete", headers=headers)
9098
data = response.get_json()
9199
sc_id = data["id"]
92-
delete_resp = self.client.delete(f"/subcategory/{sc_id}", headers=headers)
100+
delete_resp = self.client.delete(f"/subcategories/{sc_id}", headers=headers)
93101

94-
assert delete_resp.status_code == 200
95-
get_resp = self.client.get(f"/subcategory/{sc_id}")
102+
assert delete_resp.status_code == 204
103+
get_resp = self.client.get(f"/subcategories/{sc_id}")
96104
assert get_resp.status_code == 404
97105
self._verify_subcategory_in_db("ToDelete", should_exist=False)
98106

@@ -107,7 +115,7 @@ def test_delete_subcategory(self, create_authenticated_headers, create_subcatego
107115
def test_create_subcategory_token_error(self, get_headers, expected_code):
108116
headers = get_headers(self)
109117
response = self.client.post(
110-
"/subcategory/create", json={"name": "CreateTokenError"}, headers=headers
118+
"/subcategories", json={"name": "CreateTokenError"}, headers=headers
111119
)
112120
utils.verify_token_error_response(response, expected_code)
113121
self._verify_subcategory_in_db("CreateTokenError", should_exist=False)
@@ -128,7 +136,7 @@ def test_update_subcategory_token_error(self, get_headers, create_subcategory, c
128136

129137
update_headers = get_headers(self)
130138
update_resp = self.client.put(
131-
f"/subcategory/{sc_id}/update",
139+
f"/subcategories/{sc_id}",
132140
json={"name": "UpdatedName"},
133141
headers=update_headers,
134142
)
@@ -152,7 +160,7 @@ def test_delete_subcategory_token_error(self, get_headers, create_subcategory, c
152160
sc_id = data["id"]
153161

154162
delete_headers = get_headers(self)
155-
delete_resp = self.client.delete(f"/subcategory/{sc_id}", headers=delete_headers)
163+
delete_resp = self.client.delete(f"/subcategories/{sc_id}", headers=delete_headers)
156164

157165
utils.verify_token_error_response(delete_resp, expected_code)
158166
self._verify_subcategory_in_db("DeleteTokenError")

0 commit comments

Comments
 (0)