tests/change_phone: deprecate httmock (#85304)
gitea/authentic/pipeline/head This commit looks good Details

This commit is contained in:
Paul Marillonnet 2024-01-15 12:12:44 +01:00
parent 2e452992c4
commit 27cb40221d
1 changed files with 40 additions and 39 deletions

View File

@ -16,25 +16,14 @@
from unittest import mock
from httmock import HTTMock, remember_called, urlmatch
import responses
from authentic2.models import Attribute, SMSCode, Token
from .utils import login
@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_change_phone(app, nomail_user, user_ou1, phone_activated_authn, settings):
Attribute.objects.get_or_create(
name='another_phone',
@ -50,6 +39,7 @@ def test_change_phone(app, nomail_user, user_ou1, phone_activated_authn, setting
assert nomail_user.phone_verified_on is None
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -63,8 +53,7 @@ def test_change_phone(app, nomail_user, user_ou1, phone_activated_authn, setting
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
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()
@ -75,6 +64,7 @@ def test_change_phone(app, nomail_user, user_ou1, phone_activated_authn, setting
assert nomail_user.phone_verified_on is not None
@responses.activate
def test_change_phone_no_password(app, nomail_user, user_ou1, phone_activated_authn, settings):
Attribute.objects.get_or_create(
name='another_phone',
@ -88,6 +78,7 @@ def test_change_phone_no_password(app, nomail_user, user_ou1, phone_activated_au
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -108,8 +99,7 @@ def test_change_phone_no_password(app, nomail_user, user_ou1, phone_activated_au
assert 'Your current phone number is +33122446688.' in resp.text
resp.form.set('phone_1', '122446666')
assert 'password' not in resp.form.fields
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()
@ -120,6 +110,7 @@ def test_change_phone_no_password(app, nomail_user, user_ou1, phone_activated_au
assert nomail_user.phone_verified_on is not None
@responses.activate
def test_change_phone_no_password_no_recent_authn(
app, nomail_user, user_ou1, phone_activated_authn, settings
):
@ -135,6 +126,7 @@ def test_change_phone_no_password_no_recent_authn(
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -162,8 +154,7 @@ def test_change_phone_no_password_no_recent_authn(
resp.form.set('phone_1', '122446666')
assert 'Your current phone number is +33122446688.' in resp.text
assert 'password' not in resp.form.fields
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()
@ -174,6 +165,7 @@ def test_change_phone_no_password_no_recent_authn(
assert nomail_user.phone_verified_on is not None
@responses.activate
def test_change_phone_nondefault_attribute(app, nomail_user, user_ou1, phone_activated_authn, settings):
phone, dummy = Attribute.objects.get_or_create(
name='another_phone',
@ -193,6 +185,7 @@ def test_change_phone_nondefault_attribute(app, nomail_user, user_ou1, phone_act
phone_activated_authn.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -205,8 +198,7 @@ def test_change_phone_nondefault_attribute(app, nomail_user, user_ou1, phone_act
resp.form.set('phone_1', '122666666')
resp.form.set('password', nomail_user.username)
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()
@ -247,10 +239,12 @@ def test_change_phone_wrong_input(app, nomail_user, user_ou1, phone_activated_au
assert not Token.objects.count()
@responses.activate
def test_change_phone_expired_code(app, nomail_user, user_ou1, phone_activated_authn, settings, freezer):
nomail_user.attributes.phone = '+33122446688'
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -261,8 +255,7 @@ def test_change_phone_expired_code(app, nomail_user, user_ou1, phone_activated_a
)
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
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.tick(3600) # user did not immediately submit code
@ -271,10 +264,12 @@ def test_change_phone_expired_code(app, nomail_user, user_ou1, phone_activated_a
assert not Token.objects.count()
@responses.activate
def test_change_phone_code_modified(app, nomail_user, user_ou1, phone_activated_authn, settings):
nomail_user.attributes.phone = '+33122446688'
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -285,17 +280,18 @@ def test_change_phone_code_modified(app, nomail_user, user_ou1, phone_activated_
)
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
with HTTMock(sms_service_mock):
resp = resp.form.submit()
resp = resp.form.submit()
location = resp.location[:-5] + 'abcd/' # oops, something went wrong with the url token
app.get(location, status=400)
assert not Token.objects.count()
@responses.activate
def test_change_phone_token_modified(app, nomail_user, user_ou1, phone_activated_authn, settings):
nomail_user.attributes.phone = '+33122446688'
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -306,8 +302,7 @@ def test_change_phone_token_modified(app, nomail_user, user_ou1, phone_activated
)
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
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('')
@ -319,6 +314,7 @@ def test_change_phone_token_modified(app, nomail_user, user_ou1, phone_activated
assert nomail_user.attributes.phone == '+33122446688'
@responses.activate
def test_change_phone_identifier_attribute_changed(
app, nomail_user, user_ou1, phone_activated_authn, settings
):
@ -332,6 +328,7 @@ def test_change_phone_identifier_attribute_changed(
nomail_user.attributes.another_phone = '+33122444444'
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -344,8 +341,7 @@ def test_change_phone_identifier_attribute_changed(
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
with HTTMock(sms_service_mock):
resp = resp.form.submit().follow()
resp = resp.form.submit().follow()
phone_activated_authn.phone_identifier_field = phone
phone_activated_authn.save()
code = SMSCode.objects.get()
@ -359,10 +355,12 @@ def test_change_phone_identifier_attribute_changed(
assert nomail_user.attributes.another_phone == '+33122446666'
@responses.activate
def test_change_phone_authn_deactivated(app, nomail_user, user_ou1, phone_activated_authn, settings):
nomail_user.attributes.phone = '+33122446688'
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
login(
app,
@ -380,8 +378,7 @@ def test_change_phone_authn_deactivated(app, nomail_user, user_ou1, phone_activa
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
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()
@ -449,6 +446,7 @@ def test_change_phone_identifier_field_disabled(app, nomail_user, user_ou1, phon
app.get('/accounts/change-phone/', status=404)
@responses.activate
def test_phone_change_already_existing(
app, nomail_user, user_ou1, phone_activated_authn, settings, simple_user
):
@ -458,6 +456,7 @@ def test_phone_change_already_existing(
simple_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -468,14 +467,14 @@ def test_phone_change_already_existing(
)
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
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().maybe_follow()
assert resp.pyquery('li.error')[0].text == 'This phone number is already used by another account.'
@responses.activate
def test_phone_change_preempted_during_request(
app, nomail_user, user_ou1, phone_activated_authn, settings, simple_user
):
@ -483,6 +482,7 @@ def test_phone_change_preempted_during_request(
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
@ -493,8 +493,7 @@ def test_phone_change_preempted_during_request(
)
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
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)
# oops, some other user took this number during the change request
@ -504,6 +503,7 @@ def test_phone_change_preempted_during_request(
assert resp.pyquery('li.error')[0].text == 'This phone number is already used by another account.'
@responses.activate
def test_phone_change_lock_identifier_error_token_use(
app, nomail_user, user_ou1, phone_activated_authn, settings, monkeypatch
):
@ -513,6 +513,7 @@ def test_phone_change_lock_identifier_error_token_use(
nomail_user.save()
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
def erroneous_lock_identifier(identifier, nowait=False):
raise Lock.Error
@ -526,8 +527,7 @@ def test_phone_change_lock_identifier_error_token_use(
)
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
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)
@ -538,8 +538,10 @@ def test_phone_change_lock_identifier_error_token_use(
assert nomail_user.attributes.phone == '+33122446688'
@responses.activate
def test_phone_change_no_existing_number(app, nomail_user, user_ou1, phone_activated_authn, settings):
settings.SMS_URL = 'https://foo.whatever.none/'
responses.post('https://foo.whatever.none/', status=200)
resp = login(
app,
nomail_user,
@ -551,8 +553,7 @@ def test_phone_change_no_existing_number(app, nomail_user, user_ou1, phone_activ
assert 'Your phone number is' not in resp.text
resp.form.set('phone_1', '122446666')
resp.form.set('password', nomail_user.username)
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)