"""Tests for Handlers.""" import json from unittest.mock import MagicMock from unittest.mock import patch from oto import response from oto import status from oto.adaptors.flask import flaskify import pytest from notifications import api, handlers @patch( 'notifications.logic.notifications.unsubscribe', return_value=flaskify(response.Response())) def test_unsubscribe(mock_unsubscribe, fixture_client): """Test unsubscribe response.""" user_id = 'oa:123' feed_name = 'label_analytics_digest' feed_id = 'vendor_123' token = 'e3f848d9c499429de544fc6b57af3d2ec61021ac' url = '/unsubscribe' url += '?user_id={0}'.format(user_id) url += '&feed_name={0}'.format(feed_name) url += '&feed_id={0}'.format(feed_id) url += '&key={0}'.format(token) result = fixture_client.get(url) mock_unsubscribe.assert_called_with( user_id, feed_name, feed_id, token) assert result.status_code == status.OK @pytest.mark.parametrize('user_id, feed_name, feed_id, token', [ ( '', 'label_analytics_digest', 'vendor_123', 'TOKEN' ), ( 'oa:123', '', 'vendor_123', 'TOKEN' ), ( 'oa:123', 'label_analytics_digest', '', 'TOKEN' ), ( 'oa:123', 'label_analytics_digest', 'vendor_123', '' ) ]) def test_unsubscribe_bad_parameters( fixture_client, user_id, feed_name, feed_id, token): """Test unsubscribe response when called with bad parameters.""" url = '/unsubscribe' url += '?user_id={0}'.format(user_id) url += '&feed_name={0}'.format(feed_name) url += '&feed_id={0}'.format(feed_id) url += '&key={0}'.format(token) result = fixture_client.get(url) assert result.status_code == status.BAD_REQUEST def test_exception_handler(): """Verify exception_Handler returns 500 status code and json payload.""" with api.app.app_context(): with patch('notifications.handlers.g') as mock_g: message = ( 'The server encountered an internal error ' 'and was unable to complete your request.') mock_error = MagicMock() server_response = handlers.exception_handler(mock_error) mock_g.log.exception.assert_called_with(mock_error) # assert status code is 500 assert server_response.status_code == 500 # assert json payload response_message = json.loads(server_response.data.decode()) assert response_message['message'] == message assert response_message['code'] == \ response.error.ERROR_CODE_INTERNAL_ERROR