"""Integration tests for ows-accounting: statements - revenue""" import operator import time import pytest from tests.integration import conftest from tests.integration.conftest import label_18805, label_7482, \ subaccount_13823, update_gross_accounting_logic, 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_revenue(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('gross_net_logic', ['enabled', 'control']) def test_monthly_label(gross_net_logic, current_accounting_period): """/revenue gives accounting revenues for all statements - monthly label""" params = {'recent': '25'} test_user = label_18805() headers = user_headers( test_user['user_type'], test_user['id'], test_user['vend_contact_id']) update_gross_accounting_logic( gross_net_logic, test_user['vend_contact_id']) ows_accounting_client = conftest.ows_accounting_api_client(headers) if gross_net_logic == 'control': action = operator.ne else: action = operator.eq counter = 20 for i in range(0, counter): check = ows_accounting_client.get_revenue(params).json() if action(check[0]['gross_revenue'], 0): time.sleep(2) else: break results = ows_accounting_client.get_revenue(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'] latest_revenue_item = json_results[0] expected_revenue_net = MySQLQueryHelper.net_revenue_sum( test_user['id'], current_accounting_period, current_accounting_period) expected_revenue_gross = MySQLQueryHelper.gross_revenue_sum( test_user['id'], current_accounting_period, current_accounting_period) assert latest_revenue_item['revenue'] == float(expected_revenue_net) if gross_net_logic == "control": assert latest_revenue_item['gross_revenue'] == 0 else: assert latest_revenue_item['gross_revenue'] == float( expected_revenue_gross) assert latest_revenue_item['currency_id'] == 1 assert latest_revenue_item['currency_symbol'] == '$' assert latest_revenue_item['min_accounting_period'] == \ current_accounting_period assert latest_revenue_item['max_accounting_period'] == \ current_accounting_period assert latest_revenue_item['interval']['type'] == 'month' @pytest.mark.parametrize('gross_net_logic', ['enabled', 'control']) def test_quarterly_label(gross_net_logic, current_accounting_period): """/revenue gives accounting revenues for all statements - quarterly label""" params = {'recent': '25'} test_user = label_7482() headers = user_headers( test_user['user_type'], test_user['id'], test_user['vend_contact_id']) update_gross_accounting_logic( gross_net_logic, test_user['vend_contact_id']) ows_accounting_client = conftest.ows_accounting_api_client(headers) if gross_net_logic == 'control': action = operator.ne else: action = operator.eq counter = 20 for i in range(0, counter): check = ows_accounting_client.get_revenue(params).json() if action(check[0]['gross_revenue'], 0): time.sleep(2) else: break results = ows_accounting_client.get_revenue(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'] latest_revenue_item = json_results[0] expected_revenue_net = MySQLQueryHelper.net_revenue_sum( test_user['id'], latest_revenue_item['min_accounting_period'], latest_revenue_item['max_accounting_period']) expected_revenue_gross = MySQLQueryHelper.gross_revenue_sum( test_user['id'], latest_revenue_item['min_accounting_period'], latest_revenue_item['max_accounting_period']) assert round(latest_revenue_item['revenue'], 6) \ == float(expected_revenue_net) if gross_net_logic == "control": assert latest_revenue_item['gross_revenue'] == 0 else: assert round(latest_revenue_item['gross_revenue'], 6) == float( expected_revenue_gross) assert latest_revenue_item['currency_id'] == 1 assert latest_revenue_item['currency_symbol'] == '$' assert (current_accounting_period - 2) <= \ latest_revenue_item['min_accounting_period'] <= \ current_accounting_period assert latest_revenue_item['max_accounting_period'] == \ current_accounting_period assert latest_revenue_item['interval']['type'] == 'quarter' def test_subaccount(current_accounting_period): """/revenue gives accounting revenues for all statements - subaccount""" params = {'recent': '25'} 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_revenue(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'] latest_revenue_item = json_results[0] assert latest_revenue_item['currency_id'] == 1 assert latest_revenue_item['currency_symbol'] == '$' assert latest_revenue_item['interval']['type'] == 'month' assert latest_revenue_item['min_accounting_period'] == \ current_accounting_period assert latest_revenue_item['max_accounting_period'] == \ current_accounting_period