"""Integration tests suite.""" import time import pytest import requests from tests.integration.conftest import ows_abacus_state_api_client from tests.integration.consts import api @pytest.mark.jira('ACC-3124') def test_get_hello(): """Get Hello Endpoint.""" response = requests.get(api.HEALTH_CHECK) assert response.status_code == 200, 'Reason: {}\nURL: {}'.format( response.reason, response.url ) response_body = response.json() assert 'status' in response_body assert 'ok' in response_body['status'] @pytest.mark.jira('ACC-3423') def test_post_get_state(basic_headers): """POST and GET states.""" abacus_state_client = ows_abacus_state_api_client(basic_headers) post_data = [ { 'parent_table_id': 1, 'action_name': 'deliver_sales_files', 'parent_table_name': 'accounting_period', } ] res_post = abacus_state_client.post_states(post_data) assert res_post.status_code == 201 abacus_state_id = res_post.json()[0]['abacus_state_id'] res_get = abacus_state_client.get_states_dataloader([abacus_state_id]) assert res_get.status_code == 200 item = res_get.json()['items'][0]['data'] assert item['action_name'] == post_data[0]['action_name'] assert item['action_status'] == 'init' assert 'abacus_state_id' in item res_get = abacus_state_client.get_state( post_data[0]['parent_table_name'], post_data[0]['parent_table_id'] ) assert res_get.status_code == 200 res_get_json = res_get.json()[0] assert res_get_json['action_name'] == post_data[0]['action_name'] assert res_get_json['action_status'] == 'init' assert 'abacus_state_id' in res_get_json @pytest.mark.jira('ACC-3426') def test_put_state(basic_headers, create_accounting_period_fixture): """PUT /abacus-state/{abacus_state_id} .""" abacus_state_client = ows_abacus_state_api_client(basic_headers) post_data = [ { 'parent_table_id': 1, 'action_name': 'take_reserves', 'parent_table_name': 'accounting_period', } ] res_post = abacus_state_client.post_states(post_data) assert res_post.status_code == 201 state_id = res_post.json()[0]['abacus_state_id'] res_get = abacus_state_client.get_state( post_data[0]['parent_table_name'], post_data[0]['parent_table_id'] ) assert res_get.status_code == 200 assert res_get.json()[0]['action_status'] == 'init' put_data = {'action_status': 'complete', 'message': 'testing'} res_put = abacus_state_client.put_state(state_id, put_data) assert res_put.status_code == 200 res_get = abacus_state_client.get_state( post_data[0]['parent_table_name'], post_data[0]['parent_table_id'] ) assert res_get.status_code == 200 assert res_put.json()['action_status'] == put_data['action_status'] assert res_put.json()['action_name'] == post_data[0]['action_name'] @pytest.mark.jira('ACC-4250') def test_put_abacus_states(basic_headers, create_payment_group_payment_account_fixture): """PUT /abacus-states/{parent_table_name} .""" abacus_state_client = ows_abacus_state_api_client(basic_headers) post_data = [ { 'parent_table_id': 1, 'action_name': 'init', 'parent_table_name': 'payment_group_payment_account', } ] res_post = abacus_state_client.post_states(post_data) assert res_post.status_code == 201 body = [ {'action_status': 'complete', 'message': 'auto-completed', 'parent_table_id': 1} ] res_put = abacus_state_client.put_states('payment_group_payment_account', body) assert res_put.status_code == 200 assert res_put.json()[0]['action_status'] == body[0]['action_status'] assert res_put.json()[0]['message'] == body[0]['message'] @pytest.mark.jira('ACC-4275') def test_post_abacus_states_by_parent_table_payment_group_payment_batch(basic_headers): """POST /abacus_states_by_parent_table_payment_group_payment_batch .""" abacus_state_client = ows_abacus_state_api_client(basic_headers) parent_table_name = 'payment-group-payment-batch' parent_table_id = 1 response_post = ( abacus_state_client.post_states_by_parent_table_payment_group_payment_batch( parent_table_name, parent_table_id ) ) assert response_post.status_code == 201 expected_response = [ { 'message': None, 'action_status': 'init', 'abacus_state_id': 1, 'action_name': 'send_payment', 'parent_table_name': 'payment_group_payment_batch', 'parent_table_id': 1, 'created_by': 'default_user_id', 'last_modified_by': 'default_user_id', } ] response_post_json = response_post.json()[0] post_created_at = response_post_json.pop('created_at') post_last_modified = response_post_json.pop('last_modified') assert response_post_json == expected_response[0] assert post_created_at == post_last_modified time.sleep(3) put_body = {'action_status': 'complete'} response_put = abacus_state_client.put_state(1, put_body) expected_response = { 'message': None, 'action_status': 'complete', 'abacus_state_id': 1, 'action_name': 'send_payment', 'parent_table_name': 'payment_group_payment_batch', 'parent_table_id': 1, 'created_by': 'default_user_id', 'last_modified_by': 'default_user_id', } response_put_json = response_put.json() put_created_at = response_put_json.pop('created_at') put_last_modified = response_put_json.pop('last_modified') assert response_put.status_code == 200 assert response_put_json == expected_response assert put_created_at != put_last_modified assert post_last_modified != put_last_modified @pytest.mark.jira('ACC-XXXX') def test_bulk_query_states(basic_headers): """POST /abacus-states/query endpoint.""" abacus_state_client = ows_abacus_state_api_client(basic_headers) post_data = [ { 'parent_table_id': 1, 'action_name': 'deliver_sales_files', 'parent_table_name': 'accounting_period', }, { 'parent_table_id': 2, 'action_name': 'approve_sales_files', 'parent_table_name': 'accounting_period', }, { 'parent_table_id': 1, 'action_name': 'generate_payments', 'parent_table_name': 'payment_group_payment', }, ] for data in post_data: res = abacus_state_client.post_states([data]) assert res.status_code == 201 res = abacus_state_client.bulk_query_states({}) assert res.status_code == 200 assert 'items' in res.json() assert 'total' in res.json() assert 'limit' in res.json() assert 'offset' in res.json() assert res.json()['total'] >= 3 assert len(res.json()['items']) >= 3 body = {'parent_table_name': 'accounting_period'} res = abacus_state_client.bulk_query_states(body) assert res.status_code == 200 assert res.json()['total'] >= 2 for item in res.json()['items']: assert item['parent_table_name'] == 'accounting_period' body = {'parent_table_name': 'accounting_period', 'parent_table_ids': [1]} res = abacus_state_client.bulk_query_states(body) assert res.status_code == 200 assert res.json()['total'] >= 1 for item in res.json()['items']: assert item['parent_table_name'] == 'accounting_period' assert item['parent_table_id'] == 1 body = {'action_name': 'deliver_sales_files'} res = abacus_state_client.bulk_query_states(body) assert res.status_code == 200 assert res.json()['total'] >= 1 for item in res.json()['items']: assert item['action_name'] == 'deliver_sales_files' params = {'limit': 2, 'offset': 0} res = abacus_state_client.bulk_query_states(body={}, params=params) assert res.status_code == 200 assert res.json()['limit'] == 2 assert res.json()['offset'] == 0 assert len(res.json()['items']) <= 2