Skip to content

Commit e0c5fc0

Browse files
Merge pull request #21 from piyush-jaiswal/feature/tests/remove-re-logins
speed up tests by by removing redundant logins
2 parents 3be44fe + 08bdd37 commit e0c5fc0

File tree

6 files changed

+48
-51
lines changed

6 files changed

+48
-51
lines changed

tests/conftest.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,16 @@ def _login(email, password):
4242
@pytest.fixture
4343
def create_authenticated_headers(register_user, login_user):
4444
def _get_headers(email="[email protected]", password="testpassword"):
45-
register_user(email, password)
46-
resp = login_user(email, password)
47-
tokens = resp.get_json()
48-
return utils.get_auth_header(tokens["access_token"])
45+
nonlocal headers
46+
if not headers:
47+
register_user(email, password)
48+
resp = login_user(email, password)
49+
tokens = resp.get_json()
50+
headers = utils.get_auth_header(tokens["access_token"])
4951

52+
return headers
53+
54+
headers = None
5055
return _get_headers
5156

5257

tests/test_auth.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
import math
22

33
import pytest
4+
from flask_jwt_extended import decode_token
45

56
from app.models import User
67
from tests import utils
7-
from flask_jwt_extended import decode_token
88

99

1010
class TestAuth:
@@ -50,6 +50,7 @@ def _decode_token(self, token):
5050
# Needs Flask app context for secret/algorithms from current_app.config
5151
with self.client.application.app_context():
5252
return decode_token(token, allow_expired=False)
53+
5354
def _assert_jwt_structure(self, token, expected_sub, expected_type, fresh=False):
5455
assert token.count(".") == 2, f"Token does not have three segments: {token}"
5556
payload = self._decode_token(token)

tests/test_category.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,11 @@ def test_create_category(self, create_category):
3939
assert "id" in data
4040
self._verify_category_in_db(self.TEST_CATEGORY_NAME)
4141

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)
42+
def test_create_category_duplicate_name(self, create_category):
43+
create_category(self.TEST_CATEGORY_NAME)
4544

4645
with pytest.raises(IntegrityError) as ie:
47-
create_category(self.TEST_CATEGORY_NAME, headers=headers)
46+
create_category(self.TEST_CATEGORY_NAME)
4847

4948
assert isinstance(ie.value.orig, sqlite3.IntegrityError)
5049
assert "UNIQUE constraint failed" in str(ie.value.orig)

tests/test_product.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,9 +152,8 @@ def test_create_product_token_error(self, get_headers, expected_code):
152152
(lambda self: None, "authorization_required")
153153
]
154154
)
155-
def test_update_product_token_error(self, get_headers, create_product, create_authenticated_headers, expected_code):
156-
headers = create_authenticated_headers()
157-
response = create_product("UpdateTokenError", "desc", headers=headers)
155+
def test_update_product_token_error(self, get_headers, create_product, expected_code):
156+
response = create_product("UpdateTokenError", "desc")
158157
data = response.get_json()
159158
p_id = data["id"]
160159

@@ -177,9 +176,8 @@ def test_update_product_token_error(self, get_headers, create_product, create_au
177176
(lambda self: None, "authorization_required")
178177
]
179178
)
180-
def test_delete_product_token_error(self, get_headers, create_product, create_authenticated_headers, expected_code):
181-
headers = create_authenticated_headers()
182-
response = create_product("DeleteTokenError", "desc", headers=headers)
179+
def test_delete_product_token_error(self, get_headers, create_product, expected_code):
180+
response = create_product("DeleteTokenError", "desc")
183181
data = response.get_json()
184182
p_id = data["id"]
185183

tests/test_relationships.py

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -100,10 +100,10 @@ def test_update_category_adds_subcategories(self, create_authenticated_headers,
100100
assert self._category_subcategory_ids(category["id"]) == sorted([subcategory1["id"], subcategory2["id"]])
101101

102102
def test_update_category_adds_linked_subcategories(self, create_authenticated_headers, create_category, create_subcategory):
103-
headers = create_authenticated_headers()
104-
subcategory = create_subcategory("U_SC1", headers=headers).get_json()
105-
category = create_category("U_Cat", subcategories=[subcategory["id"]], headers=headers).get_json()
103+
subcategory = create_subcategory("U_SC1").get_json()
104+
category = create_category("U_Cat", subcategories=[subcategory["id"]]).get_json()
106105

106+
headers = create_authenticated_headers()
107107
with pytest.raises(IntegrityError) as ie:
108108
self.client.put(f"/categories/{category['id']}", json={"subcategories": [subcategory["id"]]}, headers=headers)
109109

@@ -112,13 +112,13 @@ 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-
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()
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()
121120

121+
headers = create_authenticated_headers()
122122
update_response = self.client.put(
123123
f"/subcategories/{subcategory['id']}",
124124
json={"categories": [category1["id"], category2["id"]], "products": [product1["id"], product2["id"]]},
@@ -130,11 +130,11 @@ def test_update_subcategory_adds_categories_and_products(self, create_authentica
130130
assert self._subcategory_product_ids(subcategory["id"]) == sorted([product1["id"], product2["id"]])
131131

132132
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()
133+
category = create_category("UC1").get_json()
134+
product = create_product("UP1").get_json()
135+
subcategory = create_subcategory("U_SC", categories=[category["id"]], products=[product["id"]]).get_json()
137136

137+
headers = create_authenticated_headers()
138138
with pytest.raises(IntegrityError) as ie_c:
139139
self.client.put(
140140
f"/subcategories/{subcategory['id']}",
@@ -215,11 +215,10 @@ def test_get_subcategory_categories_empty(self, create_subcategory):
215215
resp = self.client.get(f"/subcategories/{subcategory['id']}/categories")
216216
self._assert_related_collection(resp, "categories")
217217

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()
218+
def test_get_subcategory_categories_populated(self, create_category, create_subcategory):
219+
category1 = create_category("C1").get_json()
220+
category2 = create_category("C2").get_json()
221+
subcategory = create_subcategory("SC_Cats", categories=[category1["id"], category2["id"]]).get_json()
223222

224223
resp = self.client.get(f"/subcategories/{subcategory['id']}/categories")
225224
self._assert_related_collection(resp, "categories", expected_ids=[category1["id"], category2["id"]])
@@ -229,13 +228,12 @@ def test_get_subcategory_products_empty(self, create_subcategory):
229228
resp = self.client.get(f"/subcategories/{subcategory['id']}/products")
230229
self._assert_related_collection(resp, "products")
231230

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()
231+
def test_get_subcategory_products_populated_with_pagination(self, create_subcategory, create_product):
232+
subcategory = create_subcategory("SC_Pag").get_json()
235233

236234
product_ids = set()
237235
for index in range(11):
238-
product_resp = create_product(f"SP{index}", "desc", subcategories=[subcategory["id"]], headers=headers)
236+
product_resp = create_product(f"SP{index}", "desc", subcategories=[subcategory["id"]])
239237
product_ids.add(product_resp.get_json().get("id"))
240238

241239
page1 = self.client.get(f"/subcategories/{subcategory['id']}/products?page=1").get_json()

tests/test_subcategory.py

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,11 @@ def test_create_subcategory(self, create_subcategory):
3939
assert "id" in data
4040
self._verify_subcategory_in_db(self.TEST_SUBCATEGORY_NAME)
4141

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)
42+
def test_create_subcategory_duplicate_name(self, create_subcategory):
43+
create_subcategory(self.TEST_SUBCATEGORY_NAME)
4544

4645
with pytest.raises(IntegrityError) as ie:
47-
create_subcategory(self.TEST_SUBCATEGORY_NAME, headers=headers)
46+
create_subcategory(self.TEST_SUBCATEGORY_NAME)
4847

4948
assert isinstance(ie.value.orig, sqlite3.IntegrityError)
5049
assert "UNIQUE constraint failed" in str(ie.value.orig)
@@ -62,10 +61,9 @@ def test_get_subcategory_by_id(self, create_subcategory):
6261
assert data["name"] == "Laptops"
6362
assert data["id"] == sc_id
6463

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)
64+
def test_get_all_subcategories(self, create_subcategory):
65+
create_subcategory("A")
66+
create_subcategory("B")
6967
resp = self.client.get("/subcategories")
7068

7169
assert resp.status_code == 200
@@ -128,9 +126,8 @@ def test_create_subcategory_token_error(self, get_headers, expected_code):
128126
(lambda self: None, "authorization_required")
129127
]
130128
)
131-
def test_update_subcategory_token_error(self, get_headers, create_subcategory, create_authenticated_headers, expected_code):
132-
headers = create_authenticated_headers()
133-
response = create_subcategory("UpdateTokenError", headers=headers)
129+
def test_update_subcategory_token_error(self, get_headers, create_subcategory, expected_code):
130+
response = create_subcategory("UpdateTokenError")
134131
data = response.get_json()
135132
sc_id = data["id"]
136133

@@ -153,9 +150,8 @@ def test_update_subcategory_token_error(self, get_headers, create_subcategory, c
153150
(lambda self: None, "authorization_required")
154151
]
155152
)
156-
def test_delete_subcategory_token_error(self, get_headers, create_subcategory, create_authenticated_headers, expected_code):
157-
headers = create_authenticated_headers()
158-
response = create_subcategory("DeleteTokenError", headers=headers)
153+
def test_delete_subcategory_token_error(self, get_headers, create_subcategory, expected_code):
154+
response = create_subcategory("DeleteTokenError")
159155
data = response.get_json()
160156
sc_id = data["id"]
161157

0 commit comments

Comments
 (0)