"""Test User Interaction logic.""" from unittest.mock import MagicMock from oto import response from oto import status import pytest from social_analytics.constants import error from social_analytics.logic import user_interaction from social_analytics.models import ( user_interaction as user_interaction_model) @pytest.fixture def fixture_user_interactions(): """Fixture with User Interactions.""" return response.Response({'items': [ { 'artist_id': '57450', 'user_id': '2', 'created_date': '2017-10-27T12:04:10.590820' }, { 'artist_id': '57451', 'user_id': '2', 'created_date': '2017-10-30T12:04:10.590820'}]}) @pytest.fixture def fixture_user_interaction(): """Fixture with a user interaction.""" return response.Response( { 'artist_id': '57451', 'user_id': '2', 'created_date': '2017-10-30T12:04:10.590820'}) @pytest.fixture def fixture_user_interactions_not_found(): """Fixture with user interactions not found.""" return response.create_not_found_response() @pytest.fixture def fixture_error_response(): """Fixture with error.""" return response.create_error_response( 400, error.ERROR_MESSAGE_EMPTY_BODY) @pytest.fixture def fixture_error_bad_params(): """Fixture for error bad params.""" return response.create_error_response( 400, error.ERROR_MESSAGE_BAD_PARAMS) def test_create_user_interaction(monkeypatch, fixture_user_interaction): """Test create a user interaction.""" monkeypatch.setattr( user_interaction_model, 'create_user_interaction', MagicMock( return_value=fixture_user_interaction)) data = { 'artist_id': '57451', 'user_id': '2', 'created_date': '2017-10-30T12:04:10.590820'} result = user_interaction.create_user_interaction(data) user_interaction_model.create_user_interaction.assert_called_once_with( data) assert result def test_create_user_interaction_bad_params(): """Test create user interaction with bad params.""" data = {} result = user_interaction.create_user_interaction(data) assert not result assert result.status == status.BAD_REQUEST def test_get_user_interactions_by_user_id( monkeypatch, fixture_user_interactions): """Test get latest user interactions with user id.""" monkeypatch.setattr( user_interaction_model, 'get_user_interactions_by_user_id', MagicMock( return_value=fixture_user_interactions)) user_id = '2' result = user_interaction.get_user_interactions_by_user_id( user_id) user_interaction_model.get_user_interactions_by_user_id\ .assert_called_once_with(user_id) assert result def test_get_latest_user_interactions_with_user_id_bad_params(): """Test get latest user interactions with user id.""" user_id = '' result = user_interaction.get_user_interactions_by_user_id( user_id) assert not result assert result.status == status.BAD_REQUEST def test_get_latest_user_interactions_with_user_id_not_found( monkeypatch, fixture_user_interactions_not_found): """Test get latest user interactions with user id.""" user_id = '124' monkeypatch.setattr( user_interaction_model, 'get_user_interactions_by_user_id', MagicMock( return_value=fixture_user_interactions_not_found)) result = user_interaction.get_user_interactions_by_user_id( user_id) assert not result assert result.status == status.NOT_FOUND