import mock import pytest from django.contrib.auth import get_user_model from django.urls import reverse from rest_framework import status from rest_framework.generics import get_object_or_404 from access.factories import USER_PASSWORD @pytest.mark.django_db @mock.patch('django.core.mail.EmailMessage.send') def test_generate_password_by_manager(mocked_send_mail, manager_client, student_client, student): """ Test generate new password from admin area by manager """ assert manager_client.get( reverse('users:management-password'), status=status.HTTP_405_METHOD_NOT_ALLOWED ) assert student_client.get( reverse('users:management-password'), status=status.HTTP_403_FORBIDDEN ) data = { 'email': student.email, } assert manager_client.post( reverse('users:management-password'), data=data, status=status.HTTP_201_CREATED ) test_user = get_object_or_404(get_user_model(), email=student.email) assert not test_user.check_password('test') assert mocked_send_mail.call_count == 1 assert student_client.post( reverse('users:management-password'), data=data, status=status.HTTP_403_FORBIDDEN ) wrong_data = { 'email': 'no_user@example.com', } assert manager_client.post( reverse('users:management-password'), data=wrong_data, status=status.HTTP_404_NOT_FOUND ) wrong_email = { 'email': 'no_user@example', } assert manager_client.post( reverse('users:management-password'), data=wrong_email, status=status.HTTP_404_NOT_FOUND ) @pytest.mark.django_db def test_generate_password_by_manager_for_not_active_student(manager_client, student_not_active): """ Test generate new password from admin area by manager for not active student """ data = { 'email': student_not_active.email, } assert manager_client.post( reverse('users:management-password'), data=data, status=status.HTTP_201_CREATED ) @pytest.mark.django_db class TestLogin: def test_login_user(self, api_client, student): """ Test login user """ data = { 'email': student.email, 'password': USER_PASSWORD } assert api_client.post( reverse('users:login'), data=data, status=status.HTTP_200_OK ) def test_login_user_wrong_password(self, api_client, student): """ Test login user with wrong password """ data = { 'email': student.email, 'password': USER_PASSWORD + '1' } assert api_client.post( reverse('users:login'), data=data, status=status.HTTP_403_FORBIDDEN ) def test_login_user_wrong_user(self, api_client, student): """ Test login user with wrong password """ data = { 'email': student.email + '1', 'password': USER_PASSWORD } assert api_client.post( reverse('users:login'), data=data, status=status.HTTP_404_NOT_FOUND )