"""Tests for Handlers.""" import decimal import json from oto import response from reporting.constants import error from reporting.constants.report_map import PRODUCT_US from reporting.logic import account, physical_reporting def test_get_data_success(client, valid_post_headers, mocker): """Test getting data.""" mocker.patch( 'reporting.handlers.features.FeatureEngine.load', return_value=True ) mocker.patch.object( physical_reporting, 'get_report_by_name', return_value=response.Response( status=200, message={'value': decimal.Decimal('1.0')} ), ) mocker.patch.object( account, 'update_params_with_vendor_info', return_value={ 'parm_vendor_id': 7123, 'param_subaccount': 2, 'param_street_date': 3, 'param_subaccount_id': 4, 'param_product_name': 'whatever', }, ) handler_response = client.post( '/report/{}'.format(PRODUCT_US), headers=valid_post_headers, data=json.dumps( dict( param_product_name=['Name'], param_subaccount='Account', param_street_date='', ) ), ) assert handler_response.status_code == 200 assert json.loads(handler_response.data.decode('utf-8')) == {'value': 1.0} assert account.update_params_with_vendor_info.called def test_get_data_failure_no_access(client, mocker): """Test it fails when you don't pass valid headers.""" mocker.patch( 'reporting.handlers.features.FeatureEngine.load', return_value=True ) handler_response = client.post('/report/{}'.format(PRODUCT_US), headers={}) assert handler_response.status_code == 400 def test_get_data_failure_bad_report_type(client, valid_get_headers, mocker): """Test it fails pass a bad report type.""" mocker.patch( 'reporting.handlers.features.FeatureEngine.load', return_value=True ) bad_report_type = 'chowda' handler_response = client.post( '/report/{}'.format(bad_report_type), headers=valid_get_headers ) assert handler_response.status_code == 400 assert ( json.loads(handler_response.data.decode('utf-8')).get('message') == error.ERROR_MESSAGE_BAD_REPORT )