"""Test /users/auth0/single-signon POST.""" import json import os import boto3 from moto import mock_sqs import pytest from tests.unit import db_utils from tests.unit.factories.alw_user_vend_contact import ALWUserVendContactFactory from tests.unit.factories.vendor import VendorFactory from users import ( # noqa config, ) from users.app import app def _create_mock_data(auth0_id, user_id): """Create mock data in database.""" # Existing user with this auth0_id vendor = VendorFactory.build(vendor_id=7123, name='Label1') vend_contact = ALWUserVendContactFactory.build(vendor_id=7123, auth0_user_id=auth0_id) db_utils.seed_models(vendor) db_utils.seed_models(vend_contact) # new user that wants to merge to that auth0_id vendor = VendorFactory.build(vendor_id=8869, name='Label2') vend_contact = ALWUserVendContactFactory.build(user_id=user_id, vendor_id=8869) db_utils.seed_models(vendor) db_utils.seed_models(vend_contact) @pytest.mark.parametrize( ('email', 'email_to_logic'), [ ['test@theorchard.com', 'test@theorchard.com'], ['Test@theorchard.com', 'test@theorchard.com'], ['fooBar@theorchard.com', 'foobar@theorchard.com'], ['FOO@theorchard.com', 'foo@theorchard.com'], ], ) @db_utils.test_schema @mock_sqs def test_send_auth0_single_signon_success(context, email, email_to_logic): """Test send_auth0_single_signon.""" os.environ['AWS_DEFAULT_REGION'] = 'us-east-1' auth0_id = 'auth0|5b7719d8ccde104ca215f8d3' user_id = 55281 _create_mock_data(auth0_id, user_id) # create a test queue queue_name = 'test-ows-notification' client = boto3.client('sqs') client.create_queue(QueueName=queue_name) queue_url = client.get_queue_url(QueueName=queue_name)['QueueUrl'] config.DAEMON_NOTIFICATIONS_SQS_URL = queue_url path = '/users/auth0/single-signon' post_data = {'user_id': 'alw:{}'.format(user_id), 'auth0_id': auth0_id, 'email': email} expected_post_data = { 'user_id': 'alw:{}'.format(user_id), 'auth0_id': auth0_id, 'email': email_to_logic, } navigator = app.test_client() request = navigator.post(path, data=json.dumps(post_data), content_type='application/json') response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 200 assert 'request' in response_data assert 'response' in response_data assert response_data['request']['users_info'] == [expected_post_data]