"""Tests for user handler.""" import json from unittest.mock import MagicMock from unittest.mock import patch from oto import response from oto import status from podcast.logic import user from podcast.models import ows_users def test_create_user_handler(fixture_client, user_fixture, monkeypatch): """Test create user handler.""" monkeypatch.setattr(ows_users, 'get_auth0_user_by_email', MagicMock(return_value='auth0|power')) monkeypatch.setattr(ows_users, 'check_for_existing_profile', MagicMock(return_value=False)) monkeypatch.setattr(ows_users, 'create_auth0_profile', MagicMock(return_value={'profile_id': 12})) monkeypatch.setattr(ows_users, 'get_identity_user_by_email', MagicMock(return_value={})) monkeypatch.setattr(ows_users, 'create_user_identity', MagicMock(return_value={'id': 'mock-uuid'})) result = fixture_client.post('/users', json=user_fixture) assert result.status_code == status.OK created_user = json.loads(result.data.decode()) assert created_user['email'] == 'email@theorchard.com' @patch('podcast.logic.user.check_ownership') def test_ownership_check_handler(owning_mock, fixture_client): """Test check ownership handler.""" owning_mock.return_value = { 'authorized': True } result = fixture_client.get('/check-ownership', query_string={ 'object_type': 'episode', 'object_id': '1' }) assert result.status_code == status.OK response_body = json.loads(result.data.decode()) assert response_body == { 'authorized': True } owning_mock.assert_called_once_with('episode', 1) @patch('podcast.logic.user.current_user_owns_object') def test_ownership_check_handler_fails(owning_mock, fixture_client): """Test check ownership handler.""" owning_mock.return_value = { 'authorized': False } result = fixture_client.get('/check-ownership', query_string={ 'object_type': 'episode', 'object_id': '1' }) assert result.status_code == status.OK response_body = json.loads(result.data.decode()) assert response_body == { 'authorized': False } def test_users_for_network_handler(fixture_client): """Test users for network handler.""" result = fixture_client.get('/users-for-networks', query_string={'ids': [1]}) response_body = json.loads(result.data.decode())['items'] assert len(response_body) == 3 assert response_body[0]['name'] == 'username' # handles strings result = fixture_client.get('/users-for-networks', query_string={'ids': ['1']}) response_body = json.loads(result.data.decode())['items'] assert len(response_body) == 3 result = fixture_client.get('/users-for-networks', query_string={'ids': [100]}) response_body = json.loads(result.data.decode())['items'] assert len(response_body) == 0 def test_users_by_ids_handler(fixture_client): """Test users for network handler.""" result = fixture_client.get('/users-by-id', query_string={ 'ids': '1,2,1000' }) response_body = json.loads(result.data.decode())['items'] assert len(response_body) == 2 assert response_body[0]['name'] == 'username' def test_user_favorite(fixture_client): """Test users favorite.""" result = fixture_client.get('/users/favorites') response_body = json.loads(result.data.decode()) assert len(response_body['charts']) == 0 assert len(response_body['podcasts']) == 0 result = fixture_client.put('/users/favorites/podcast', json={'podcast_id': 1}) response_body = json.loads(result.data.decode()) assert len(response_body['charts']) == 0 assert len(response_body['podcasts']) == 1 result = fixture_client.put( '/users/favorites/chart', json={'store': 'store', 'country': 'country', 'category': 'category', 'chart_type': 'podcast'}) response_body = json.loads(result.data.decode()) assert len(response_body['charts']) == 1 assert len(response_body['podcasts']) == 1 result = fixture_client.get('/users/favorites') response_body = json.loads(result.data.decode()) assert len(response_body['charts']) == 1 assert len(response_body['podcasts']) == 1 result = fixture_client.put( '/users/favorites/chart', json={'store': 'store', 'country': 'country', 'category': 'category', 'chart_type': 'podcast'}) response_body = json.loads(result.data.decode()) assert len(response_body['charts']) == 0 assert len(response_body['podcasts']) == 1 def test_users_for_order_handler(fixture_client): """Test users for order handler.""" result = fixture_client.get('/users-for-order/mp1') response_body = json.loads(result.data.decode())['items'] assert len(response_body) == 5 assert response_body[0]['name'] == 'username' def test_users_last_login_handler(fixture_client, monkeypatch): """Test users last login handler.""" data = 'response' monkeypatch.setattr( user, 'update_user_last_login', MagicMock( return_value=data)) result = fixture_client.put('/users-last-login/2', json={ 'last_login': '2022-11-03T13:23:00.000Z' }) assert result.status_code == response.status.OK assert result.data.decode() == 'response'