"""Tests for social_auth_item model.""" from unittest.mock import patch import pytest from users.models import social_auth_item @pytest.fixture def mock_connected_item(): """mock_connected_item. Mock a social auth item which is connected """ participant_id = 'participant-1234' identity_id = 'identity-5678' platform_id = 'platform-9876' platform = 'INSTAGRAM' linked = True return ( { 'PK': platform_id, 'SK': '{}#{}'.format(identity_id, platform), 'PK1': participant_id, 'SK1': platform, 'identity_id': identity_id, 'linked': linked, }, platform_id, participant_id, identity_id, ) @pytest.fixture def mock_dynamodb_connector_get_item_returns_participant(mock_connected_item): """mock_dynamodb_connector_get_item_returns_participant. Mock the dynamodb connector query which returns participant on successful retrieval """ with patch('users.connectors.dynamodb.get_social_auth_item') as dynamodb_participant_query: item, _, _, _ = mock_connected_item dynamodb_participant_query.return_value = item yield dynamodb_participant_query @pytest.fixture def mock_dynamodb_connector_get_item_returns_none(): """mock_dynamodb_connector_get_item_returns_none. Mock the dynamodb connector query which returns None on retreival """ with patch('users.connectors.dynamodb.get_social_auth_item') as dynamodb_participant_query: dynamodb_participant_query.return_value = None yield dynamodb_participant_query def test_fetch_returns_participant( mock_dynamodb_connector_get_item_returns_participant, mock_connected_item ): """test_fetch_returns_participant. Test which will fetch the participant from dynamodb connector and return the result """ item, _, participant_id, identity_id = mock_connected_item result = social_auth_item.fetch(participant_id, identity_id, 'INSTAGRAM') assert result == item def test_fetch_returns_none(mock_dynamodb_connector_get_item_returns_none, mock_connected_item): """test_fetch_returns_none. Test which will fetch the participant from dynamodb connector and expect that its not found and returns None """ _, _, participant_id, identity_id = mock_connected_item result = social_auth_item.fetch(participant_id, identity_id, 'INSTAGRAM') assert result is None @pytest.fixture def mock_dynamodb_connector_update_item_returns_attributes(mock_connected_item): """mock_dynamodb_connector_update_item_returns_attributes. Mock the dynamodb connector query which returns attributes on successful update. """ with patch( 'users.connectors.dynamodb.update_social_auth_item_linked_status' ) as dynamodb_participant_query: item, _, _, _ = mock_connected_item item['linked'] = False dynamodb_participant_query.return_value = item yield dynamodb_participant_query @pytest.fixture def mock_dynamodb_connector_update_item_returns_none(): """mock_dynamodb_connector_update_item_returns_none. Mock the dynamodb connector query which returns none on failure in update. """ with patch( 'users.connectors.dynamodb.update_social_auth_item_linked_status' ) as dynamodb_participant_query: dynamodb_participant_query.return_value = None yield dynamodb_participant_query def test_set_linked_to_false_returns_none( mock_dynamodb_connector_update_item_returns_none, mock_connected_item ): """test_set_linked_to_false_returns_none. Test when the update on social auth item is failed. """ _, _, participant_id, identity_id = mock_connected_item result = social_auth_item.set_linked_to_false(participant_id, identity_id, 'INSTAGRAM') assert result is None def test_set_linked_to_false_returns_participant( mock_dynamodb_connector_update_item_returns_attributes, mock_connected_item ): """test_set_linked_to_false_returns_participant. Test when the update on social auth item is successful. """ item, _, participant_id, identity_id = mock_connected_item result = social_auth_item.set_linked_to_false(participant_id, identity_id, 'INSTAGRAM') item['linked'] = False assert result == item