-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathregister_verify_test.py
96 lines (67 loc) · 2.41 KB
/
register_verify_test.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import re
from datetime import datetime, timedelta
import pytest
from freezegun import freeze_time
from pytest_mock import mocker
# Imports for pytest
from test.helpers import clear_all
from test.fixtures import app, client
from test.mock.mock_mail import mailbox
## HELPER FUNCTIONS
def find_token(contents):
verify_link = "http://localhost:5001/verify/"
results = re.findall(rf"<a href=\"{verify_link}(.*?)\">", contents)
return results[0]
## TESTS
def test_invalid_token(client):
clear_all()
invalid_token = "invalid"
response = client.post("/auth/register/verify", json={
"token": invalid_token
})
assert response.status_code == 401
# TODO: try working on this, if not feasible delete this test and test manually
def test_token_expired(client, mocker):
clear_all()
mocker.patch("routes.auth.mail", mailbox)
register_response = client.post("/auth/register", json={
"email": "[email protected]",
"username": "asdf",
"password": "foobar"
})
assert register_response.status_code == 200
# Check inbox
parsed_email = mailbox.get_message(-1)
# Assuming there's a HTML part
for part in parsed_email.walk():
if part.get_content_type() == "text/html":
content = part.get_payload()
# Extract the token from the HTML
token = find_token(content)
expired_time = datetime.now() + timedelta(hours=2)
with freeze_time(expired_time):
response = client.post("/auth/register/verify", json={
"token": token
})
assert response.status_code == 401
def test_verify_success(client, mocker):
mocker.patch("routes.auth.mail", mailbox)
clear_all()
register_response = client.post("/auth/register", json={
"email": "[email protected]",
"username": "asdf",
"password": "foobar"
})
assert register_response.status_code == 200
# Check inbox
parsed_email = mailbox.get_message(-1)
# Assuming there's a HTML part
for part in parsed_email.walk():
if part.get_content_type() == "text/html":
content = part.get_payload()
# Extract the token from the HTML
token = find_token(content)
response = client.post("/auth/register/verify", json={
"token": token
})
assert response.status_code == 200