"""Integration tests for ows-accounting: statements - payments""" from functools import reduce import pytest from tests.integration import conftest from tests.integration.conftest import label_18805, label_18810, label_7482, \ subaccount_13823, user_headers from tests.testutils.mysql.mysql_query_helper import MySQLQueryHelper def test_recent_required(): """Recent parameter is obligatory""" params = {} test_user = label_18805() headers = user_headers( test_user['user_type'], test_user['id'], test_user['vend_contact_id']) ows_accounting_client = conftest.ows_accounting_api_client(headers) results = ows_accounting_client.get_payments(params) assert results.status_code == 400, \ 'Result of call was {}, expected 400.'.format(results.status_code) json_results = results.json() assert json_results['message'] == '\'recent\' is a required property' @pytest.mark.parametrize('user', [label_18810(), label_7482()]) def test_monthly_quarterly_user(user): """/payments gives recent accounting payments for monthly and quarterly users.""" params = {'recent': '10'} test_user = user headers = user_headers( test_user['user_type'], test_user['id'], test_user['vend_contact_id']) ows_accounting_client = conftest.ows_accounting_api_client(headers) results = ows_accounting_client.get_payments(params) assert results.status_code == 200, \ 'Result of call was {}, expected 200.'.format(results.status_code) json_results = results.json() assert str(len(json_results)) == params['recent'] expected_payment_db = MySQLQueryHelper.payment_sum( test_user['id'], json_results[-1]['min_accounting_period'], json_results[0]['max_accounting_period']) payments_from_response = list(map(lambda i: i['payment'], json_results)) payments_from_response_sum = reduce( (lambda x, y: x + y), payments_from_response) assert round(float(expected_payment_db), 2) == round( float(payments_from_response_sum), 2) def test_subaccount(): """/payments should not give accounting payments for subaccount user.""" params = {'recent': '10'} test_user = subaccount_13823() headers = user_headers( test_user['user_type'], test_user['id'], test_user['vend_contact_id']) ows_accounting_client = conftest.ows_accounting_api_client(headers) results = ows_accounting_client.get_payments(params) assert results.status_code == 400, \ 'Result of call was {}, expected 200.'.format(results.status_code) json_results = results.json() assert json_results['message'] == 'Invalid Grass Account Type'