Skip to content

Commit 274aea3

Browse files
committed
Tests
1 parent b589664 commit 274aea3

File tree

1 file changed

+155
-0
lines changed

1 file changed

+155
-0
lines changed

tests/test_verification.py

+155
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
1+
from rest_framework import status
2+
from rest_framework.authtoken.models import Token
3+
from rest_framework.test import APITestCase
4+
5+
from django.contrib.auth import get_user_model
6+
from drfpasswordless.settings import api_settings, DEFAULTS
7+
from drfpasswordless.utils import CallbackToken
8+
9+
User = get_user_model()
10+
11+
12+
class AliasEmailVerificationTests(APITestCase):
13+
14+
def setUp(self):
15+
api_settings.PASSWORDLESS_AUTH_TYPES = ['EMAIL']
16+
api_settings.PASSWORDLESS_EMAIL_NOREPLY_ADDRESS = 'noreply@example.com'
17+
api_settings.PASSWORDLESS_USER_MARK_EMAIL_VERIFIED = True
18+
19+
self.url = '/auth/email/'
20+
self.callback_url = '/callback/auth/'
21+
self.verify_url = '/verify/email/'
22+
self.callback_verify = '/callback/verify/'
23+
self.email_field_name = api_settings.PASSWORDLESS_USER_EMAIL_FIELD_NAME
24+
self.email_verified_field_name = api_settings.PASSWORDLESS_USER_EMAIL_VERIFIED_FIELD_NAME
25+
26+
def test_email_unverified_to_verified_and_back(self):
27+
email = 'aaron@example.com'
28+
data = {'email': email}
29+
30+
# create a new user
31+
response = self.client.post(self.url, data)
32+
self.assertEqual(response.status_code, status.HTTP_200_OK)
33+
user = User.objects.get(**{self.email_field_name: email})
34+
self.assertNotEqual(user, None)
35+
self.assertEqual(getattr(user, self.email_verified_field_name), False)
36+
37+
# Verify a token exists for the user, sign in and check verified again
38+
callback = CallbackToken.objects.filter(user=user, is_active=True).first()
39+
callback_data = {'token': callback}
40+
callback_response = self.client.post(self.callback_url, callback_data)
41+
self.assertEqual(callback_response.status_code, status.HTTP_200_OK)
42+
43+
# Verify we got the token, then check and see that email_verified is now verified
44+
token = callback_response.data['token']
45+
self.assertEqual(token, Token.objects.get(user=user).key)
46+
47+
# Refresh and see that the endpoint is now verified as True
48+
user.refresh_from_db()
49+
self.assertEqual(getattr(user, self.email_verified_field_name), True)
50+
51+
# Change email, should result in flag changing to false
52+
setattr(user, self.email_field_name, 'aaron2@example.com')
53+
user.save()
54+
user.refresh_from_db()
55+
self.assertEqual(getattr(user, self.email_verified_field_name), False)
56+
57+
# Verify
58+
callback_response = self.client.post(self.callback_url)
59+
self.assertEqual(callback_response.status_code, status.HTTP_200_OK)
60+
61+
# Refresh User
62+
user = User.objects.get(**{self.email_field_name: email})
63+
self.assertNotEqual(user, None)
64+
self.assertNotEqual(getattr(user, self.email_field_name), None)
65+
self.assertEqual(getattr(user, self.email_verified_field_name), False)
66+
67+
# Post callback token back.
68+
verify_token = CallbackToken.objects.filter(user=user, is_active=True).first()
69+
verify_callback_response = self.client.post(self.callback_verify, {'token': verify_token.key})
70+
self.assertEqual(verify_callback_response.status_code, status.HTTP_200_OK)
71+
72+
# Refresh User
73+
user = User.objects.get(**{self.email_field_name: email})
74+
self.assertNotEqual(user, None)
75+
self.assertNotEqual(getattr(user, self.email_field_name), None)
76+
self.assertEqual(getattr(user, self.email_verified_field_name), True)
77+
78+
def tearDown(self):
79+
api_settings.PASSWORDLESS_AUTH_TYPES = DEFAULTS['PASSWORDLESS_AUTH_TYPES']
80+
api_settings.PASSWORDLESS_EMAIL_NOREPLY_ADDRESS = DEFAULTS['PASSWORDLESS_EMAIL_NOREPLY_ADDRESS']
81+
api_settings.PASSWORDLESS_USER_MARK_EMAIL_VERIFIED = DEFAULTS['PASSWORDLESS_USER_MARK_MOBILE_VERIFIED']
82+
83+
84+
class AliasMobileVerificationTests(APITestCase):
85+
86+
def setUp(self):
87+
api_settings.PASSWORDLESS_TEST_SUPPRESSION = True
88+
api_settings.PASSWORDLESS_AUTH_TYPES = ['MOBILE']
89+
api_settings.PASSWORDLESS_MOBILE_NOREPLY_NUMBER = '+15550000000'
90+
api_settings.PASSWORDLESS_USER_MARK_MOBILE_VERIFIED = True
91+
92+
self.url = '/auth/mobile/'
93+
self.callback_url = '/callback/auth/'
94+
self.verify_url = '/verify/email/'
95+
self.callback_verify = '/callback/verify/'
96+
self.mobile_field_name = api_settings.PASSWORDLESS_USER_MOBILE_FIELD_NAME
97+
self.mobile_verified_field_name = api_settings.PASSWORDLESS_USER_MOBILE_VERIFIED_FIELD_NAME
98+
99+
def test_mobile_unverified_to_verified_and_back(self):
100+
mobile = '+15551234567'
101+
data = {'mobile': mobile}
102+
103+
# create a new user
104+
response = self.client.post(self.url, data)
105+
self.assertEqual(response.status_code, status.HTTP_200_OK)
106+
user = User.objects.get(**{self.mobile_field_name: mobile})
107+
self.assertNotEqual(user, None)
108+
self.assertEqual(getattr(user, self.mobile_verified_field_name), False)
109+
110+
# Verify a token exists for the user, sign in and check verified again
111+
callback = CallbackToken.objects.filter(user=user, is_active=True).first()
112+
callback_data = {'token': callback}
113+
callback_response = self.client.post(self.callback_url, callback_data)
114+
self.assertEqual(callback_response.status_code, status.HTTP_200_OK)
115+
116+
# Verify we got the token, then check and see that email_verified is now verified
117+
token = callback_response.data['token']
118+
self.assertEqual(token, Token.objects.get(user=user).key)
119+
120+
# Refresh and see that the endpoint is now verified as True
121+
user.refresh_from_db()
122+
self.assertEqual(getattr(user, self.mobile_verified_field_name), True)
123+
124+
# Change mobile, should result in flag changing to false
125+
setattr(user, self.mobile_field_name, '+15557654321')
126+
user.save()
127+
user.refresh_from_db()
128+
self.assertEqual(getattr(user, self.mobile_verified_field_name), False)
129+
130+
# Verify
131+
callback_response = self.client.post(self.callback_url)
132+
self.assertEqual(callback_response.status_code, status.HTTP_200_OK)
133+
134+
# Refresh User
135+
user = User.objects.get(**{self.mobile_field_name: mobile})
136+
self.assertNotEqual(user, None)
137+
self.assertNotEqual(getattr(user, self.mobile_field_name), None)
138+
self.assertEqual(getattr(user, self.mobile_verified_field_name), False)
139+
140+
# Post callback token back.
141+
verify_token = CallbackToken.objects.filter(user=user, is_active=True).first()
142+
verify_callback_response = self.client.post(self.callback_verify, {'token': verify_token.key})
143+
self.assertEqual(verify_callback_response.status_code, status.HTTP_200_OK)
144+
145+
# Refresh User
146+
user = User.objects.get(**{self.mobile_field_name: mobile})
147+
self.assertNotEqual(user, None)
148+
self.assertNotEqual(getattr(user, self.mobile_field_name), None)
149+
self.assertEqual(getattr(user, self.mobile_verified_field_name), True)
150+
151+
def tearDown(self):
152+
api_settings.PASSWORDLESS_TEST_SUPPRESSION = DEFAULTS['PASSWORDLESS_TEST_SUPPRESSION']
153+
api_settings.PASSWORDLESS_AUTH_TYPES = DEFAULTS['PASSWORDLESS_AUTH_TYPES']
154+
api_settings.PASSWORDLESS_MOBILE_NOREPLY_ADDRESS = DEFAULTS['PASSWORDLESS_MOBILE_NOREPLY_ADDRESS']
155+
api_settings.PASSWORDLESS_USER_MARK_MOBILE_VERIFIED = DEFAULTS['PASSWORDLESS_USER_MARK_MOBILE_VERIFIED']

0 commit comments

Comments
 (0)