tests/commands: deprecate httmock (#85304)

This commit is contained in:
Paul Marillonnet 2024-01-15 11:40:26 +01:00
parent 20c1bc913b
commit 2e452992c4
1 changed files with 31 additions and 50 deletions

View File

@ -21,7 +21,6 @@ import random
import uuid
from io import BufferedReader, BufferedWriter, TextIOWrapper
import httmock
import py
import pytest
import responses
@ -854,6 +853,7 @@ def test_clean_user_exports(settings, app, superuser, freezer):
resp.click('Download CSV')
@responses.activate
@pytest.mark.parametrize('deletion_number,deletion_valid', [(2, True), (5, True), (10, False)])
def test_oidc_sync_provider(
db, app, admin, settings, caplog, deletion_number, deletion_valid, nologtoconsole
@ -909,17 +909,7 @@ def test_oidc_sync_provider(
sub = crypto.aes_base64url_deterministic_encrypt(*cipher_args).decode('utf-8')
OIDCAccount.objects.create(user=user, provider=oidc_provider, sub=sub)
def synchronization_post_deletion_response(url, request):
headers = {'content-type': 'application/json'}
content = {
'unknown_uuids': [
account.sub for account in random.sample(list(OIDCAccount.objects.all()), deletion_number)
]
}
return httmock.response(status_code=200, headers=headers, content=content, request=request)
def synchronization_get_modified_response(url, request):
headers = {'content-type': 'application/json'}
def synchronization_get_modified_response():
# randomized batch of modified users
modified_users = random.sample(list(User.objects.all()), 20)
results = []
@ -941,49 +931,40 @@ def test_oidc_sync_provider(
user_json['sub'] = account.sub
results.append(user_json)
content = {'results': results}
return httmock.response(status_code=200, headers=headers, content=content, request=request)
return {'results': results}
with httmock.HTTMock(
httmock.urlmatch(
netloc=r'some\.provider',
path=r'^/api/users/synchronization/$',
method='POST',
)(synchronization_post_deletion_response)
):
with httmock.HTTMock(
httmock.urlmatch(
netloc=r'some\.provider',
path=r'^/api/users/*',
method='GET',
)(synchronization_get_modified_response)
):
with check_log(caplog, 'no provider supporting synchronization'):
call_command('oidc-sync-provider', '-v1')
responses.post(
'https://some.provider/api/users/synchronization/',
json={
'unknown_uuids': [
account.sub for account in random.sample(list(OIDCAccount.objects.all()), deletion_number)
]
},
)
responses.get('https://some.provider/api/users/', json=synchronization_get_modified_response())
oidc_provider.a2_synchronization_supported = True
oidc_provider.save()
with check_log(caplog, 'no provider supporting synchronization'):
call_command('oidc-sync-provider', '-v1')
with check_log(caplog, 'no provider supporting synchronization'):
call_command('oidc-sync-provider', '--provider', 'whatever', '-v1')
oidc_provider.a2_synchronization_supported = True
oidc_provider.save()
with check_log(caplog, 'got 20 users'):
call_command('oidc-sync-provider', '-v1')
if deletion_valid:
# existing users check
assert OIDCAccount.objects.count() == 100 - deletion_number
else:
assert OIDCAccount.objects.count() == 100
assert caplog.records[3].levelname == 'ERROR'
assert 'deletion ratio is abnormally high' in caplog.records[3].message
with check_log(caplog, 'no provider supporting synchronization'):
call_command('oidc-sync-provider', '--provider', 'whatever', '-v1')
# users update
assert User.objects.filter(username__startswith='modified').count() in range(
20 - deletion_number, 21
)
assert User.objects.filter(first_name='Mod', last_name='Ified').count() in range(
20 - deletion_number, 21
)
with check_log(caplog, 'got 20 users'):
call_command('oidc-sync-provider', '-v1')
if deletion_valid:
# existing users check
assert OIDCAccount.objects.count() == 100 - deletion_number
else:
assert OIDCAccount.objects.count() == 100
assert caplog.records[3].levelname == 'ERROR'
assert 'deletion ratio is abnormally high' in caplog.records[3].message
# users update
assert User.objects.filter(username__startswith='modified').count() in range(20 - deletion_number, 21)
assert User.objects.filter(first_name='Mod', last_name='Ified').count() in range(20 - deletion_number, 21)
@responses.activate