tests/registration: deprecate httmock (#85304)

This commit is contained in:
Paul Marillonnet 2024-01-11 20:08:32 +01:00
parent 047e6f5d3c
commit 20c1bc913b
1 changed files with 39 additions and 39 deletions

View File

@ -20,9 +20,9 @@ from unittest import mock
from urllib.parse import quote, urlparse
import requests
import responses
from django.contrib.auth import REDIRECT_FIELD_NAME, get_user_model
from django.urls import reverse
from httmock import HTTMock, remember_called, urlmatch
from authentic2 import models
from authentic2.a2_rbac.utils import get_default_ou
@ -1012,38 +1012,28 @@ def test_registration_erroneous_phone_identifier(app, db, settings, phone_activa
)
@urlmatch(netloc='foo.whatever.none')
@remember_called
def sms_service_mock(url, request):
return {
'content': {},
'headers': {
'content-type': 'application/json',
},
'status_code': 200,
}
@responses.activate
def test_phone_registration_wrong_code(app, db, settings, phone_activated_authn):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
resp.form.set('sms_code', 'abc')
resp = resp.form.submit()
assert not Token.objects.count()
assert resp.pyquery('li')[0].text_content() == 'Wrong SMS code.'
@responses.activate
def test_phone_registration_expired_code(app, db, settings, freezer, phone_activated_authn):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
freezer.move_to(timedelta(hours=1))
@ -1052,13 +1042,14 @@ def test_phone_registration_expired_code(app, db, settings, freezer, phone_activ
assert resp.pyquery('li')[0].text_content() == 'The code has expired.'
@responses.activate
def test_phone_registration_cancel(app, db, settings, freezer, phone_activated_authn):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
resp.form.submit('cancel').follow()
@ -1066,13 +1057,14 @@ def test_phone_registration_cancel(app, db, settings, freezer, phone_activated_a
assert not SMSCode.objects.count()
@responses.activate
def test_phone_registration_improperly_configured(app, db, settings, freezer, caplog, phone_activated_authn):
settings.SMS_URL = ''
responses.post('https://foo.whatever.none/', status=200)
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow().maybe_follow()
resp = resp.form.submit().follow().maybe_follow()
assert not Token.objects.count()
assert not SMSCode.objects.count()
assert (
@ -1105,8 +1097,10 @@ def test_phone_registration_connection_error(app, db, settings, freezer, caplog,
)
@responses.activate
def test_phone_registration_number_already_existing_create(app, db, settings, phone_activated_authn):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
# create duplicates
for i in range(3):
@ -1122,8 +1116,7 @@ def test_phone_registration_number_already_existing_create(app, db, settings, ph
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
resp = resp.form.submit()
@ -1148,8 +1141,10 @@ def test_phone_registration_number_already_existing_create(app, db, settings, ph
assert User.objects.filter(first_name='John', last_name='Doe').count() == 4
@responses.activate
def test_phone_registration_number_already_existing_select(app, db, settings, phone_activated_authn):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
user_ids = []
@ -1168,8 +1163,7 @@ def test_phone_registration_number_already_existing_select(app, db, settings, ph
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
resp = resp.form.submit().follow()
@ -1185,8 +1179,10 @@ def test_phone_registration_number_already_existing_select(app, db, settings, ph
assert app.session['_auth_user_id'] == str(user_ids[1])
@responses.activate
def test_phone_registration_number_already_existing_phone_is_unique(app, db, settings, phone_activated_authn):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
settings.A2_PHONE_IS_UNIQUE = True
settings.A2_REGISTRATION_PHONE_IS_UNIQUE = True
@ -1203,8 +1199,7 @@ def test_phone_registration_number_already_existing_phone_is_unique(app, db, set
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
resp = resp.form.submit().follow()
@ -1214,10 +1209,12 @@ def test_phone_registration_number_already_existing_phone_is_unique(app, db, set
assert resp.location == '/'
@responses.activate
def test_phone_registration_number_already_existing_registration_phone_is_unique(
app, db, settings, phone_activated_authn
):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
settings.A2_PHONE_IS_UNIQUE = False
settings.A2_REGISTRATION_PHONE_IS_UNIQUE = True
@ -1237,8 +1234,7 @@ def test_phone_registration_number_already_existing_registration_phone_is_unique
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
resp = resp.form.submit().follow()
@ -1249,10 +1245,12 @@ def test_phone_registration_number_already_existing_registration_phone_is_unique
assert resp.location == '/'
@responses.activate
def test_phone_registration_number_already_existing_ou_phone_is_unique(
app, db, settings, phone_activated_authn
):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
settings.A2_PHONE_IS_UNIQUE = False
settings.A2_REGISTRATION_PHONE_IS_UNIQUE = False
ou = get_default_ou()
@ -1275,8 +1273,7 @@ def test_phone_registration_number_already_existing_ou_phone_is_unique(
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
resp = resp.form.submit().follow()
@ -1287,17 +1284,18 @@ def test_phone_registration_number_already_existing_ou_phone_is_unique(
assert resp.location == '/'
@responses.activate
def test_phone_registration(app, db, settings, phone_activated_authn):
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()
assert not Token.objects.count()
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
body = json.loads(sms_service_mock.call['requests'][0].body)
resp = resp.form.submit().follow()
body = json.loads(rsps.calls[-1].request.body)
assert body['message'].startswith('Your code is')
code = SMSCode.objects.get()
assert body['message'][-code_length:] == code.value
@ -1320,6 +1318,7 @@ def test_phone_registration(app, db, settings, phone_activated_authn):
assert not user.email_verified
@responses.activate
def test_phone_registration_nondefault_attribute(app, db, settings):
phone, dummy = models.Attribute.objects.get_or_create(
name='another_phone',
@ -1331,12 +1330,12 @@ def test_phone_registration_nondefault_attribute(app, db, settings):
phone_identifier_field=phone,
)
settings.SMS_URL = 'https://foo.whatever.none/'
rsps = responses.post('https://foo.whatever.none/', status=200)
resp = app.get(reverse('registration_register'))
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
json.loads(sms_service_mock.call['requests'][0].body)
resp = resp.form.submit().follow()
json.loads(rsps.calls[-1].request.body)
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
resp = resp.form.submit().follow()
@ -1355,14 +1354,15 @@ def test_phone_registration_nondefault_attribute(app, db, settings):
assert not user.phone
@responses.activate
def test_phone_registration_redirect_url(app, db, settings, phone_activated_authn):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = app.get('/accounts/consents/').follow()
resp = resp.click('Register!')
resp.form.set('phone_1', '612345678')
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
code = SMSCode.objects.get()
resp.form.set('sms_code', code.value)
resp = resp.form.submit().follow()