tests/password_reset: deprecate httmock (#85304)
This commit is contained in:
parent
37c5ffb013
commit
047e6f5d3c
|
@ -17,10 +17,10 @@
|
|||
import json
|
||||
|
||||
import pytest
|
||||
import responses
|
||||
from django.contrib.auth import authenticate
|
||||
from django.test.utils import override_settings
|
||||
from django.urls import reverse
|
||||
from httmock import HTTMock, remember_called, urlmatch
|
||||
|
||||
from authentic2.apps.authenticators.models import LoginPasswordAuthenticator
|
||||
from authentic2.models import Attribute, SMSCode, Token
|
||||
|
@ -29,18 +29,6 @@ from authentic2.utils.misc import send_password_reset_mail
|
|||
from . import utils
|
||||
|
||||
|
||||
@urlmatch(netloc='foo.whatever.none')
|
||||
@remember_called
|
||||
def sms_service_mock(url, request):
|
||||
return {
|
||||
'content': {},
|
||||
'headers': {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
'status_code': 200,
|
||||
}
|
||||
|
||||
|
||||
def test_send_password_reset_email(app, simple_user, mailoutbox):
|
||||
assert len(mailoutbox) == 0
|
||||
with utils.run_on_commit_hooks():
|
||||
|
@ -94,10 +82,12 @@ def test_send_password_reset_erroneous_input(app, nomail_user, settings, phone_a
|
|||
)
|
||||
|
||||
|
||||
@responses.activate
|
||||
def test_send_password_reset_by_sms_code(app, nomail_user, settings, phone_activated_authn):
|
||||
nomail_user.attributes.phone = '+33123456789'
|
||||
nomail_user.save()
|
||||
settings.SMS_URL = 'https://foo.whatever.none/'
|
||||
rsps = responses.post('https://foo.whatever.none/', status=200)
|
||||
|
||||
code_length = settings.SMS_CODE_LENGTH
|
||||
assert not SMSCode.objects.count()
|
||||
|
@ -106,11 +96,11 @@ def test_send_password_reset_by_sms_code(app, nomail_user, settings, phone_activ
|
|||
url = reverse('password_reset')
|
||||
resp = app.get(url, status=200)
|
||||
resp.form.set('phone_1', '0123456789')
|
||||
with HTTMock(sms_service_mock):
|
||||
resp = resp.form.submit().follow().maybe_follow()
|
||||
body = json.loads(sms_service_mock.call['requests'][0].body)
|
||||
resp = resp.form.submit().follow().maybe_follow()
|
||||
body = json.loads(rsps.calls[-1].request.body)
|
||||
assert body['message'].startswith('Your code is')
|
||||
code = SMSCode.objects.get()
|
||||
assert rsps.call_count == 1
|
||||
assert body['message'][-code_length:] == code.value
|
||||
assert ('Your code is valid for the next %s minute' % (SMSCode.CODE_DURATION // 60)) in resp.text
|
||||
assert 'The code you received by SMS.' in resp.text
|
||||
|
@ -121,9 +111,8 @@ def test_send_password_reset_by_sms_code(app, nomail_user, settings, phone_activ
|
|||
assert authenticate(username='user', password='1234==aA') is None
|
||||
resp.form.set('new_password1', '1234==aA')
|
||||
resp.form.set('new_password2', '1234==aA')
|
||||
with HTTMock(sms_service_mock):
|
||||
resp.form.submit()
|
||||
assert sms_service_mock.call['count'] == 1
|
||||
resp.form.submit()
|
||||
assert rsps.call_count == 2
|
||||
assert SMSCode.objects.count() == 1 # no new code generated
|
||||
# verify user is logged
|
||||
assert str(app.session['_auth_user_id']) == str(nomail_user.pk)
|
||||
|
@ -135,6 +124,7 @@ def test_send_password_reset_by_sms_code(app, nomail_user, settings, phone_activ
|
|||
app.get(url, status=404)
|
||||
|
||||
|
||||
@responses.activate
|
||||
def test_send_password_reset_by_sms_code_nondefault_attribute(
|
||||
app, nomail_user, simple_user, settings, phone_activated_authn
|
||||
):
|
||||
|
@ -151,22 +141,22 @@ def test_send_password_reset_by_sms_code_nondefault_attribute(
|
|||
nomail_user.phone = ''
|
||||
nomail_user.save()
|
||||
settings.SMS_URL = 'https://foo.whatever.none/'
|
||||
rsps = responses.post('https://foo.whatever.none/', status=200)
|
||||
|
||||
url = reverse('password_reset')
|
||||
resp = app.get(url, status=200)
|
||||
resp.form.set('phone_1', '0122446688')
|
||||
with HTTMock(sms_service_mock):
|
||||
resp = resp.form.submit().follow().maybe_follow()
|
||||
json.loads(sms_service_mock.call['requests'][0].body)
|
||||
resp = resp.form.submit().follow().maybe_follow()
|
||||
json.loads(rsps.calls[-1].request.body)
|
||||
assert rsps.call_count == 1
|
||||
code = SMSCode.objects.get()
|
||||
resp.form.set('sms_code', code.value)
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
resp.form.set('new_password1', '1234==aA')
|
||||
resp.form.set('new_password2', '1234==aA')
|
||||
with HTTMock(sms_service_mock):
|
||||
resp.form.submit()
|
||||
assert sms_service_mock.call['count'] == 1
|
||||
resp.form.submit()
|
||||
assert rsps.call_count == 2
|
||||
assert SMSCode.objects.count() == 1 # no new code generated
|
||||
# verify user is logged
|
||||
assert str(app.session['_auth_user_id']) == str(nomail_user.pk)
|
||||
|
@ -183,18 +173,17 @@ def test_send_password_reset_by_sms_code_nondefault_attribute(
|
|||
url = reverse('password_reset')
|
||||
resp = app.get(url, status=200)
|
||||
resp.form.set('phone_1', '0122446677')
|
||||
with HTTMock(sms_service_mock):
|
||||
resp = resp.form.submit().follow().maybe_follow()
|
||||
json.loads(sms_service_mock.call['requests'][0].body)
|
||||
resp = resp.form.submit().follow().maybe_follow()
|
||||
json.loads(rsps.calls[-1].request.body)
|
||||
code = SMSCode.objects.get()
|
||||
assert rsps.call_count == 3
|
||||
resp.form.set('sms_code', code.value)
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
resp.form.set('new_password1', '1234==aA')
|
||||
resp.form.set('new_password2', '1234==aA')
|
||||
with HTTMock(sms_service_mock):
|
||||
resp.form.submit()
|
||||
assert sms_service_mock.call['count'] == 1
|
||||
resp.form.submit()
|
||||
assert rsps.call_count == 4
|
||||
assert SMSCode.objects.count() == 1 # no new code generated
|
||||
# verify user is logged
|
||||
assert str(app.session['_auth_user_id']) == str(simple_user.pk)
|
||||
|
@ -206,25 +195,26 @@ def test_send_password_reset_by_sms_code_nondefault_attribute(
|
|||
app.get(url, status=404)
|
||||
|
||||
|
||||
@responses.activate
|
||||
def test_send_password_reset_by_sms_code_next_url(app, nomail_user, settings, phone_activated_authn):
|
||||
nomail_user.attributes.phone = '+33123456789'
|
||||
nomail_user.save()
|
||||
settings.SMS_URL = 'https://foo.whatever.none/'
|
||||
rsps = responses.post('https://foo.whatever.none/', status=200)
|
||||
|
||||
resp = app.get('/accounts/consents/').follow()
|
||||
resp = resp.click('Reset it!')
|
||||
resp.form.set('phone_1', '0123456789')
|
||||
with HTTMock(sms_service_mock):
|
||||
resp = resp.form.submit().follow().maybe_follow()
|
||||
resp = resp.form.submit().follow().maybe_follow()
|
||||
assert rsps.call_count == 1
|
||||
code = SMSCode.objects.get()
|
||||
resp.form.set('sms_code', code.value)
|
||||
resp = resp.form.submit().follow()
|
||||
|
||||
resp.form.set('new_password1', '1234==aA')
|
||||
resp.form.set('new_password2', '1234==aA')
|
||||
with HTTMock(sms_service_mock):
|
||||
resp = resp.form.submit()
|
||||
assert sms_service_mock.call['count'] == 1
|
||||
resp = resp.form.submit()
|
||||
assert rsps.call_count == 2
|
||||
assert SMSCode.objects.count() == 1 # no new code generated
|
||||
user = authenticate(username='user', password='1234==aA')
|
||||
assert user == nomail_user
|
||||
|
|
Loading…
Reference in New Issue