Skip to content

Commit

Permalink
Move login tests to pytest format
Browse files Browse the repository at this point in the history
  • Loading branch information
apragacz committed May 31, 2023
1 parent cca35bc commit a7b94f8
Show file tree
Hide file tree
Showing 3 changed files with 196 additions and 151 deletions.
7 changes: 7 additions & 0 deletions tests/helpers/api_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,13 @@ def assert_response_is_bad_request(response):
)


def assert_response_is_forbidden(response):
assert_invalid_response(
response,
expected_status_code=status.HTTP_403_FORBIDDEN,
)


def assert_response_is_not_found(response):
assert_invalid_response(
response,
Expand Down
125 changes: 64 additions & 61 deletions tests/unit_tests/api/views/login/test_login.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import pytest
from django.test.utils import override_settings
from rest_framework import status
from rest_framework.authtoken.models import Token

from tests.helpers.api_views import (
Expand All @@ -10,66 +8,63 @@
from tests.helpers.settings import override_rest_registration_settings
from tests.helpers.views import ViewProvider

from ..base import APIViewTestCase


class LoginViewTestCase(APIViewTestCase):
VIEW_NAME = 'login'

def setUp(self):
super().setUp()
self.password = 'testpassword'
self.user = self.create_test_user(password=self.password)

def test_success(self):
request = self.create_post_request({
'login': self.user.username,
'password': self.password,
})
self.add_session_to_request(request)
response = self.view_func(request)
self.assert_valid_response(response, status.HTTP_200_OK)

@override_settings(
REST_REGISTRATION={
'LOGIN_RETRIEVE_TOKEN': True,
},
)
def test_success_with_token(self):
request = self.create_post_request({
'login': self.user.username,
'password': self.password,
})
self.add_session_to_request(request)
response = self.view_func(request)
self.assert_valid_response(response, status.HTTP_200_OK)
self.assertIn('token', response.data)
token_key = response.data['token']
token = Token.objects.get(key=token_key)
self.assertEqual(token.user, self.user)

def test_invalid(self):
request = self.create_post_request({
'login': self.user.username,
'password': 'blah',
})
self.add_session_to_request(request)
response = self.view_func(request)
self.assert_invalid_response(response, status.HTTP_400_BAD_REQUEST)

def test_ok(
settings_minimal,
user, password_change, api_view_provider, api_factory
):
password = password_change.old_value
request = api_factory.create_post_request({
'login': user.username,
'password': password,
})
api_factory.add_session_to_request(request)
response = api_view_provider.view_func(request)
assert_response_is_ok(response)

@pytest.fixture()
def api_view_provider():
return ViewProvider('login')

@override_rest_registration_settings({
'LOGIN_RETRIEVE_TOKEN': True,
})
def test_ok_with_token(
settings_minimal,
user, password_change, api_view_provider, api_factory
):
password = password_change.old_value
request = api_factory.create_post_request({
'login': user.username,
'password': password,
})
api_factory.add_session_to_request(request)
response = api_view_provider.view_func(request)
assert_response_is_ok(response)
assert 'token' in response.data
token_key = response.data['token']
token = Token.objects.get(key=token_key)
assert token.user == user


def test_fail(
settings_minimal,
user, api_view_provider, api_factory
):
request = api_factory.create_post_request({
'login': user.username,
'password': 'blah',
})
api_factory.add_session_to_request(request)
response = api_view_provider.view_func(request)
assert_response_is_bad_request(response)


@override_rest_registration_settings({
'AUTH_TOKEN_MANAGER_CLASS': 'tests.testapps.custom_authtokens.auth.FaultyAuthTokenManager', # noqa: E501
'LOGIN_RETRIEVE_TOKEN': True,
})
def test_when_faulty_auth_token_manager_then_login_fails(
settings_minimal,
user, password_change, api_view_provider, api_factory):
def test_fail_when_faulty_auth_token_manager(
settings_minimal,
user, password_change, api_view_provider, api_factory,
):
password = password_change.old_value
request = api_factory.create_post_request({
'login': user.username,
Expand All @@ -83,9 +78,10 @@ def test_when_faulty_auth_token_manager_then_login_fails(
@override_rest_registration_settings({
'USE_NON_FIELD_ERRORS_KEY_FROM_DRF_SETTINGS': True,
})
def test_invalid_non_field_errors(
settings_minimal,
user, password_change, api_view_provider, api_factory):
def test_fail_with_invalid_non_field_errors(
settings_minimal,
user, password_change, api_view_provider, api_factory,
):
request = api_factory.create_post_request({
'login': user.username,
'password': "blah",
Expand All @@ -100,8 +96,9 @@ def test_invalid_non_field_errors(
'USER_LOGIN_FIELDS': ['username', 'email'],
})
def test_ok_when_user_with_unique_email_logs_with_username(
settings_minimal, settings_with_user_with_unique_email,
user, password_change, api_view_provider, api_factory):
settings_minimal, settings_with_user_with_unique_email,
user, password_change, api_view_provider, api_factory,
):
password = password_change.old_value
request = api_factory.create_post_request({
'login': user.username,
Expand All @@ -116,8 +113,9 @@ def test_ok_when_user_with_unique_email_logs_with_username(
'USER_LOGIN_FIELDS': ['username', 'email'],
})
def test_ok_when_user_with_unique_email_logs_with_email(
settings_minimal, settings_with_user_with_unique_email,
user, password_change, api_view_provider, api_factory):
settings_minimal, settings_with_user_with_unique_email,
user, password_change, api_view_provider, api_factory,
):
password = password_change.old_value
request = api_factory.create_post_request({
'login': user.email,
Expand All @@ -126,3 +124,8 @@ def test_ok_when_user_with_unique_email_logs_with_email(
api_factory.add_session_to_request(request)
response = api_view_provider.view_func(request)
assert_response_is_ok(response)


@pytest.fixture()
def api_view_provider():
return ViewProvider('login')

0 comments on commit a7b94f8

Please sign in to comment.