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 @pytest.mark.django_db @mock.patch('django.core.mail.send_mail') def test_generate_password_by_manager(mocked_send_mail, staff_client, student_client, user_student): """ Test generate new password from admin area by manager """ assert staff_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': user_student.email, } assert staff_client.post( reverse('users:management-password'), data=data, status=status.HTTP_201_CREATED ) test_user = get_object_or_404(get_user_model(), email=user_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 staff_client.post( reverse('users:management-password'), data=wrong_data, status=status.HTTP_404_NOT_FOUND ) wrong_email = { 'email': 'no_user@example', } assert staff_client.post( reverse('users:management-password'), data=wrong_email, status=status.HTTP_400_BAD_REQUEST ) @pytest.mark.django_db def test_generate_password_by_manager_for_not_active_student(staff_client, user_not_active_student): """ Test generate new password from admin area by manager for not active student """ data = { 'email': user_not_active_student.email, } assert staff_client.post( reverse('users:management-password'), data=data, status=status.HTTP_400_BAD_REQUEST )