"""Functional test for generating a token.""" import json from unittest.mock import MagicMock from owsresponse import response from users import ( constants, handlers, # noqa ) from users.app import app from users.logic import vendor_agreement def test_create_vendor_agreement(monkeypatch): """Test create vendor agreement handler.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor/1' data = { 'vendor_agreement_id': 1, 'vendor_id': 123, 'opt_in_preference_id': 1, 'user_id': 123, 'date_accepted': '2010-04-11', } monkeypatch.setattr( vendor_agreement, 'create_vendor_agreement', MagicMock(return_value=response.Response(data)) ) request = navigator.post( path, headers={ constants.GRASS_ACCOUNT_TYPE: 'vendor', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 200 assert response_data == data def test_create_vendor_agreement_with_impersonator_id(monkeypatch): """Test create vendor agreement handler.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor/1' data = { 'vendor_agreement_id': 1, 'vendor_id': 123, 'opt_in_preference_id': 1, 'user_id': 123, 'date_accepted': '2010-04-11', 'impersonator_user_id': '155', } monkeypatch.setattr( vendor_agreement, 'create_vendor_agreement', MagicMock(return_value=response.Response(data)) ) request = navigator.post( path, data=dict(impersonator_user_id='155'), headers={ constants.GRASS_ACCOUNT_TYPE: 'vendor', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 200 assert response_data == data def test_create_vendor_agreement_bad_params(monkeypatch): """Test create vendor agreement handler bad params.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor/1' data = { 'vendor_agreement_id': 1, 'vendor_id': 123, 'opt_in_preference_id': 1, 'date_accepted': '2010-04-11', } monkeypatch.setattr( vendor_agreement, 'create_vendor_agreement', MagicMock(return_value=response.Response(data)) ) request = navigator.post(path, headers={}) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 400 assert response_data == {'code': 'bad_params', 'message': 'bad params'} def test_create_vendor_agreement_grass_headers_not_verified(monkeypatch): """Test create vendor agreement handler bad params.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor/1' data = { 'vendor_agreement_id': 1, 'vendor_id': 123, 'opt_in_preference_id': 1, 'date_accepted': '2010-04-11', } monkeypatch.setattr( vendor_agreement, 'create_vendor_agreement', MagicMock(return_value=response.Response(data)) ) request = navigator.post( path, headers={ 'vendor': 'vendor', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 400 assert response_data == {'code': 'authorization_error', 'message': 'incomplete account headers'} def test_get_vendor_agreement(monkeypatch): """Test get vendor agreement handler.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor/1' data = { 'vendor_agreement_id': 1, 'vendor_id': 123, 'user_id': 123, 'opt_in_preference_id': 1, 'date_accepted': '2010-04-11', 'impersonator_id': None, } mock_get_vendor_agreement = MagicMock(return_value=response.Response(data)) monkeypatch.setattr(vendor_agreement, 'get_vendor_agreement', mock_get_vendor_agreement) request = navigator.get( path, headers={ constants.GRASS_ACCOUNT_TYPE: 'vendor', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 200 assert response_data == data mock_get_vendor_agreement.assert_called_with(123, 1, exclude_impersonator=False) def test_get_vendor_agreement_exclude_impersonators(monkeypatch): """Test get vendor agreement handler.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor/1?exclude_impersonator=true' data = { 'vendor_agreement_id': 1, 'vendor_id': 123, 'user_id': 123, 'opt_in_preference_id': 1, 'date_accepted': '2010-04-11', 'impersonator_id': None, } mock_get_vendor_agreement = MagicMock(return_value=response.Response(data)) monkeypatch.setattr(vendor_agreement, 'get_vendor_agreement', mock_get_vendor_agreement) request = navigator.get( path, headers={ constants.GRASS_ACCOUNT_TYPE: 'vendor', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 200 assert response_data == data mock_get_vendor_agreement.assert_called_with(123, 1, exclude_impersonator=True) def test_get_vendor_agreement_bad_params(monkeypatch): """Test get vendor agreement handler bad params.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor/1' data = { 'vendor_agreement_id': 1, 'vendor_id': 123, 'opt_in_preference_id': 1, 'date_accepted': '2010-04-11', } monkeypatch.setattr( vendor_agreement, 'get_vendor_agreement', MagicMock(return_value=response.Response(data)) ) request = navigator.get(path, headers={}) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 400 assert response_data == {'code': 'bad_params', 'message': 'bad params'} def test_get_vendor_agreement_grass_headers_not_verified(monkeypatch): """Test get vendor agreement handler bad params.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor/1' data = { 'vendor_agreement_id': 1, 'vendor_id': 123, 'opt_in_preference_id': 1, 'date_accepted': '2010-04-11', } monkeypatch.setattr( vendor_agreement, 'get_vendor_agreement', MagicMock(return_value=response.Response(data)) ) request = navigator.get( path, headers={ 'vendor': 'vendor', constants.GRASS_ACCOUNT_ID: '123', constants.ORCHARD_USER_ID: 'alw:123', }, ) response_data = json.loads(request.data.decode('utf-8')) assert request.status_code == 400 assert response_data == {'code': 'authorization_error', 'message': 'incomplete account headers'} def test_delete_vendor_agreement(monkeypatch): """Test delete vendor agreement.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor?id=123' monkeypatch.setattr( vendor_agreement, 'delete_vendor_agreement', MagicMock(return_value=response.Response(status=204)), ) handler_response = navigator.delete(path) assert handler_response.status_code == 204 def test_delete_vendor_agreement_not_found(monkeypatch): """Test delete vendor agreement when not found.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor?id=123' monkeypatch.setattr( vendor_agreement, 'delete_vendor_agreement', MagicMock( return_value=response.create_error_response( code=constants.ERROR_CODE_VENDOR_AGREEMENT_NOT_FOUND, message=constants.ERROR_MESSAGE_VENDOR_AGREEMENT_NOT_FOUND, status=404, ) ), ) handler_response = navigator.delete(path) assert handler_response.status_code == 404 def test_delete_vendor_agreement_bad_params(monkeypatch): """Test delete vendor agreement with bad params.""" app.testing = True navigator = app.test_client() path = '/ws/agreements/vendor?id=abcdef' handler_response = navigator.delete(path) assert handler_response.status_code == 400