diff --git a/celerybeat-schedule b/celerybeat-schedule index be892ed..7638e52 100644 Binary files a/celerybeat-schedule and b/celerybeat-schedule differ diff --git a/web_admin/tests/test_auth.py b/web_admin/tests/test_auth.py new file mode 100644 index 0000000..6033af1 --- /dev/null +++ b/web_admin/tests/test_auth.py @@ -0,0 +1,99 @@ +""" +web admin test auth file +""" +from datetime import datetime +from django.utils import timezone +from django.urls import reverse +from django.contrib.auth import get_user_model + +from rest_framework.test import APITestCase, APIClient +from rest_framework import status + +from account.models import UserEmailOtp +from base.constants import USER_TYPE +from guardian.tasks import generate_otp +from web_admin.tests.test_set_up import BaseSetUp + +User = get_user_model() + + +class AdminOTPTestCase(BaseSetUp): + """ + + """ + + def setUp(self): + """ + inherit data here + :return: + """ + super(AdminOTPTestCase, self).setUp() + + def test_admin_otp_for_valid_email(self): + """ + + :return: + """ + url = reverse('web_admin:admin-otp') + data = { + 'email': 'admin@example.com' + } + response = self.client.post(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(UserEmailOtp.objects.count(), 1) + + def test_admin_otp_for_invalid_email(self): + """ + + :return: + """ + url = reverse('web_admin:admin-otp') + data = { + 'email': 'notadmin@example.com' + } + response = self.client.post(url, data, format='json') + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + + +class AdminVerifyOTPTestCase(BaseSetUp): + """ + + """ + + def setUp(self): + """ + inherit data here + :return: + """ + super(AdminVerifyOTPTestCase, self).setUp() + self.verification_code = generate_otp() + expiry = timezone.now() + timezone.timedelta(days=1) + self.user_email_otp = UserEmailOtp.objects.create(email='admin@example.com', + otp=self.verification_code, + expired_at=expiry, + user_type=dict(USER_TYPE).get('3'), + ) + + def test_admin_verify_otp_with_valid_otp(self): + url = reverse('web_admin:admin-verify-otp') + data = { + 'email': 'admin@example.com', + "otp": self.verification_code + } + + response = self.client.post(url, data) + self.user_email_otp.refresh_from_db() + self.assertEqual(response.status_code, status.HTTP_200_OK) + self.assertEqual(self.user_email_otp.is_verified, True) + + def test_admin_verify_otp_with_invalid_otp(self): + url = reverse('web_admin:admin-verify-otp') + data = { + 'email': 'admin@example.com', + "otp": generate_otp() + } + + response = self.client.post(url, data) + self.user_email_otp.refresh_from_db() + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + self.assertEqual(self.user_email_otp.is_verified, False) diff --git a/web_admin/tests/test_set_up.py b/web_admin/tests/test_set_up.py index aa6a664..f5cf1f6 100644 --- a/web_admin/tests/test_set_up.py +++ b/web_admin/tests/test_set_up.py @@ -103,7 +103,22 @@ base64_image = ("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAoHCBIS "GYdEC/arYms/HtkfAS7huhuDXXJmPEkn5whN4xrZ0NkYdPRpIPdLS0kG5QPdCEskKlYcIWHCEJUO3KFuUIQD3QhCB//Z") -class ArticleTestSetUp(APITestCase): +class BaseSetUp(APITestCase): + """ + + """ + def setUp(self) -> None: + """ + + :return: + """ + self.client = APIClient() + self.user = User.objects.create_user(username='user@example.com', password='user@1234') + self.admin_user = User.objects.create_user(username='admin@example.com', email='admin@example.com', + password='admin@1234', is_staff=True, is_superuser=True) + + +class ArticleTestSetUp(BaseSetUp): """ test cases data set up for article create, update """ @@ -112,10 +127,7 @@ class ArticleTestSetUp(APITestCase): set up data for test :return: """ - self.client = APIClient() - self.user = User.objects.create_user(username='user@example.com', password='user@1234') - self.admin_user = User.objects.create_user(username='admin@example.com', email='admin@example.com', - password='admin@1234', is_staff=True, is_superuser=True) + super(ArticleTestSetUp, self).setUp() self.article = Article.objects.create(title="Existing Article", description="Existing Description", is_published=True)