Skip to content

Commit 248ea56

Browse files
ebretontiangolo
authored andcommitted
✅ Add normal-user fixture for testing (#20)
1 parent 44d8a43 commit 248ea56

File tree

4 files changed

+43
-7
lines changed

4 files changed

+43
-7
lines changed

{{cookiecutter.project_slug}}/backend/app/app/core/config.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,5 @@ def getenv_boolean(var_name, default_value=False):
5151
FIRST_SUPERUSER_PASSWORD = os.getenv("FIRST_SUPERUSER_PASSWORD")
5252

5353
USERS_OPEN_REGISTRATION = getenv_boolean("USERS_OPEN_REGISTRATION")
54+
55+
EMAIL_TEST_USER = "[email protected]"

{{cookiecutter.project_slug}}/backend/app/app/tests/api/api_v1/test_users.py

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@ def test_get_users_superuser_me(superuser_token_headers):
2020
assert current_user["email"] == config.FIRST_SUPERUSER
2121

2222

23+
def test_get_users_normal_user_me(normal_user_token_headers):
24+
server_api = get_server_api()
25+
r = requests.get(
26+
f"{server_api}{config.API_V1_STR}/users/me", headers=normal_user_token_headers
27+
)
28+
current_user = r.json()
29+
assert current_user
30+
assert current_user["is_active"] is True
31+
assert current_user["is_superuser"] is False
32+
assert current_user["email"] == config.EMAIL_TEST_USER
33+
34+
2335
def test_create_user_new_email(superuser_token_headers):
2436
server_api = get_server_api()
2537
username = random_lower_string()
@@ -71,16 +83,13 @@ def test_create_user_existing_username(superuser_token_headers):
7183
assert "_id" not in created_user
7284

7385

74-
def test_create_user_by_normal_user():
86+
def test_create_user_by_normal_user(normal_user_token_headers):
7587
server_api = get_server_api()
7688
username = random_lower_string()
7789
password = random_lower_string()
78-
user_in = UserCreate(email=username, password=password)
79-
user = crud.user.create(db_session, user_in=user_in)
80-
user_token_headers = user_authentication_headers(server_api, username, password)
8190
data = {"email": username, "password": password}
8291
r = requests.post(
83-
f"{server_api}{config.API_V1_STR}/users/", headers=user_token_headers, json=data
92+
f"{server_api}{config.API_V1_STR}/users/", headers=normal_user_token_headers, json=data
8493
)
8594
assert r.status_code == 400
8695

{{cookiecutter.project_slug}}/backend/app/app/tests/conftest.py

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

3+
from app.core import config
34
from app.tests.utils.utils import get_server_api, get_superuser_token_headers
5+
from app.tests.utils.user import authentication_token_from_email
46

57

68
@pytest.fixture(scope="module")
@@ -11,3 +13,8 @@ def server_api():
1113
@pytest.fixture(scope="module")
1214
def superuser_token_headers():
1315
return get_superuser_token_headers()
16+
17+
18+
@pytest.fixture(scope="module")
19+
def normal_user_token_headers():
20+
return authentication_token_from_email(config.EMAIL_TEST_USER)

{{cookiecutter.project_slug}}/backend/app/app/tests/utils/user.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
from app import crud
44
from app.core import config
55
from app.db.session import db_session
6-
from app.models.user import UserCreate
7-
from app.tests.utils.utils import random_lower_string
6+
from app.models.user import UserCreate, UserUpdate
7+
from app.tests.utils.utils import get_server_api, random_lower_string
88

99

1010
def user_authentication_headers(server_api, email, password):
@@ -23,3 +23,21 @@ def create_random_user():
2323
user_in = UserCreate(username=email, email=email, password=password)
2424
user = crud.user.create(db_session=db_session, user_in=user_in)
2525
return user
26+
27+
28+
def authentication_token_from_email(email):
29+
"""
30+
Return a valid token for the user with given email.
31+
32+
If the user doesn't exist it is created first.
33+
"""
34+
password = random_lower_string()
35+
user = crud.user.get_by_email(db_session, email=email)
36+
if not user:
37+
user_in = UserCreate(username=email, email=email, password=password)
38+
user = crud.user.create(db_session=db_session, user_in=user_in)
39+
else:
40+
user_in = UserUpdate(password=password)
41+
user = crud.user.update(db_session, user=user, user_in=user_in)
42+
43+
return user_authentication_headers(get_server_api(), email, password)

0 commit comments

Comments
 (0)