From 248ea56c6eb356277f570e25ca1fa582404a1fad Mon Sep 17 00:00:00 2001 From: Manu Date: Sun, 19 Jan 2020 13:25:17 +0100 Subject: [PATCH] :white_check_mark: Add normal-user fixture for testing (#20) --- .../backend/app/app/core/config.py | 2 ++ .../app/app/tests/api/api_v1/test_users.py | 19 +++++++++++----- .../backend/app/app/tests/conftest.py | 7 ++++++ .../backend/app/app/tests/utils/user.py | 22 +++++++++++++++++-- 4 files changed, 43 insertions(+), 7 deletions(-) diff --git a/{{cookiecutter.project_slug}}/backend/app/app/core/config.py b/{{cookiecutter.project_slug}}/backend/app/app/core/config.py index 07e42b0..e413c5e 100644 --- a/{{cookiecutter.project_slug}}/backend/app/app/core/config.py +++ b/{{cookiecutter.project_slug}}/backend/app/app/core/config.py @@ -51,3 +51,5 @@ FIRST_SUPERUSER = os.getenv("FIRST_SUPERUSER") FIRST_SUPERUSER_PASSWORD = os.getenv("FIRST_SUPERUSER_PASSWORD") USERS_OPEN_REGISTRATION = getenv_boolean("USERS_OPEN_REGISTRATION") + +EMAIL_TEST_USER = "test@example.com" diff --git a/{{cookiecutter.project_slug}}/backend/app/app/tests/api/api_v1/test_users.py b/{{cookiecutter.project_slug}}/backend/app/app/tests/api/api_v1/test_users.py index 119ed21..9204f87 100644 --- a/{{cookiecutter.project_slug}}/backend/app/app/tests/api/api_v1/test_users.py +++ b/{{cookiecutter.project_slug}}/backend/app/app/tests/api/api_v1/test_users.py @@ -20,6 +20,18 @@ def test_get_users_superuser_me(superuser_token_headers): assert current_user["email"] == config.FIRST_SUPERUSER +def test_get_users_normal_user_me(normal_user_token_headers): + server_api = get_server_api() + r = requests.get( + f"{server_api}{config.API_V1_STR}/users/me", headers=normal_user_token_headers + ) + current_user = r.json() + assert current_user + assert current_user["is_active"] is True + assert current_user["is_superuser"] is False + assert current_user["email"] == config.EMAIL_TEST_USER + + def test_create_user_new_email(superuser_token_headers): server_api = get_server_api() username = random_lower_string() @@ -71,16 +83,13 @@ def test_create_user_existing_username(superuser_token_headers): assert "_id" not in created_user -def test_create_user_by_normal_user(): +def test_create_user_by_normal_user(normal_user_token_headers): server_api = get_server_api() username = random_lower_string() password = random_lower_string() - user_in = UserCreate(email=username, password=password) - user = crud.user.create(db_session, user_in=user_in) - user_token_headers = user_authentication_headers(server_api, username, password) data = {"email": username, "password": password} r = requests.post( - f"{server_api}{config.API_V1_STR}/users/", headers=user_token_headers, json=data + f"{server_api}{config.API_V1_STR}/users/", headers=normal_user_token_headers, json=data ) assert r.status_code == 400 diff --git a/{{cookiecutter.project_slug}}/backend/app/app/tests/conftest.py b/{{cookiecutter.project_slug}}/backend/app/app/tests/conftest.py index 0e3c044..e383ed1 100644 --- a/{{cookiecutter.project_slug}}/backend/app/app/tests/conftest.py +++ b/{{cookiecutter.project_slug}}/backend/app/app/tests/conftest.py @@ -1,6 +1,8 @@ import pytest +from app.core import config from app.tests.utils.utils import get_server_api, get_superuser_token_headers +from app.tests.utils.user import authentication_token_from_email @pytest.fixture(scope="module") @@ -11,3 +13,8 @@ def server_api(): @pytest.fixture(scope="module") def superuser_token_headers(): return get_superuser_token_headers() + + +@pytest.fixture(scope="module") +def normal_user_token_headers(): + return authentication_token_from_email(config.EMAIL_TEST_USER) diff --git a/{{cookiecutter.project_slug}}/backend/app/app/tests/utils/user.py b/{{cookiecutter.project_slug}}/backend/app/app/tests/utils/user.py index 6a5b947..82931d6 100644 --- a/{{cookiecutter.project_slug}}/backend/app/app/tests/utils/user.py +++ b/{{cookiecutter.project_slug}}/backend/app/app/tests/utils/user.py @@ -3,8 +3,8 @@ import requests from app import crud from app.core import config from app.db.session import db_session -from app.models.user import UserCreate -from app.tests.utils.utils import random_lower_string +from app.models.user import UserCreate, UserUpdate +from app.tests.utils.utils import get_server_api, random_lower_string def user_authentication_headers(server_api, email, password): @@ -23,3 +23,21 @@ def create_random_user(): user_in = UserCreate(username=email, email=email, password=password) user = crud.user.create(db_session=db_session, user_in=user_in) return user + + +def authentication_token_from_email(email): + """ + Return a valid token for the user with given email. + + If the user doesn't exist it is created first. + """ + password = random_lower_string() + user = crud.user.get_by_email(db_session, email=email) + if not user: + user_in = UserCreate(username=email, email=email, password=password) + user = crud.user.create(db_session=db_session, user_in=user_in) + else: + user_in = UserUpdate(password=password) + user = crud.user.update(db_session, user=user, user_in=user_in) + + return user_authentication_headers(get_server_api(), email, password)