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 from tests.testutils.snowflake.snowflake_query_helper import \ SnowflakeQueryHelper @pytest.mark.parametrize('gross_net_logic', ['enabled', 'control']) def test_monthly_label(current_accounting_period, gross_net_logic): """/revenue gives recent accounting revenue for monthly label.""" params = {'recent': '4'} 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() expected_periods = list( range((current_accounting_period - 3), ( current_accounting_period + 1))) expected_periods.reverse() periods_from_response = list( map(lambda i: i['min_accounting_period'], json_results)) assert set(expected_periods) == set(periods_from_response) for item in json_results: expected_sum_net = MySQLQueryHelper.net_revenue_sum( test_user['id'], item['min_accounting_period'], item['max_accounting_period']) assert round(item['revenue'], 6) == float(expected_sum_net) expected_sum_gross = MySQLQueryHelper.gross_revenue_sum( test_user['id'], item['min_accounting_period'], item['max_accounting_period']) if gross_net_logic == "control": assert item['gross_revenue'] == 0 else: assert round(item['gross_revenue'], 6) == float( expected_sum_gross) @pytest.mark.parametrize('gross_net_logic', ['enabled', 'control']) def test_quarterly_label(gross_net_logic, current_accounting_period): """/revenue gives recent accounting revenue for quarterly label.""" params = {'recent': '4'} 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 json_results[0]['max_accounting_period'] \ == current_accounting_period periods_amount = json_results[0]['max_accounting_period'] - \ json_results[-1]['min_accounting_period'] assert 9 <= periods_amount <= 11 for item in json_results: expected_sum_net = MySQLQueryHelper.net_revenue_sum( test_user['id'], item['min_accounting_period'], item['max_accounting_period']) assert round(item['revenue'], 6) == float(expected_sum_net) expected_sum_gross = MySQLQueryHelper.gross_revenue_sum( test_user['id'], item['min_accounting_period'], item['max_accounting_period']) if gross_net_logic == "control": assert item['gross_revenue'] == 0 else: assert round(item['gross_revenue'], 6) == float( expected_sum_gross) def test_subaccount(current_accounting_period): """/revenue gives recent accounting revenue for subaccount.""" params = {'recent': '4'} 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() expected_periods = list( range((current_accounting_period - 3), ( current_accounting_period + 1))) expected_periods.reverse() periods_from_response = list( map(lambda i: i['min_accounting_period'], json_results)) assert set(expected_periods) == set(periods_from_response) for item in json_results: expected_sum = SnowflakeQueryHelper.get_subaccout_revenue( test_user['id'], item['min_accounting_period']) assert item['revenue'] == float(expected_sum)