"""Integration tests.""" from datetime import datetime from time import sleep import pytest import requests from tests.integration.conftest import ows_abacus_event_api_client from tests.integration.consts import api @pytest.mark.jira('ACC-2798') 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.skip(reason='No access to Managed Airflow in AWS') def test_airflow_exists(airflow_api_client): """Test if airflow is available.""" response = airflow_api_client.get_status() assert response.status_code == 200, 'Reason: {}\nURL: {}'.format( response.reason, response.url ) @pytest.mark.skip(reason='No access to Managed Airflow in AWS') def test_airflow_commit_dag_was_triggered( ows_abacus_event_api_client, airflow_api_client, mock_commit_event ): """Check if commit DAG has been triggered.""" test_start_time = datetime.utcnow() sleep(1) response = ows_abacus_event_api_client.post_abacus_event(mock_commit_event) assert response.status_code == 201 event = response.json() assert 'abacus_event_id' in event assert event.get('target_type') == mock_commit_event.get('target_type') response = airflow_api_client.get_dag_runs('commit') assert response.status_code == 200 status_response = response.json().pop() dag_start_timestamp = status_response.get('start_date') dag_start_time = datetime.strptime( dag_start_timestamp, '%Y-%m-%dT%H:%M:%S.%f+00:00' ) assert dag_start_time > test_start_time @pytest.mark.jira('ACC-2798') def test_post_abacus_event(basic_headers, drop_fks): """POST /abacus-event .""" ows_abacus_event = ows_abacus_event_api_client(basic_headers) event = { 'event_date': datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f%z'), 'event_name': 'payment_approval', 'statement_period_id': 1, 'target_id': 1, 'target_type': 'payment_group_payments', } response_post = ows_abacus_event.post_abacus_event(event) assert response_post.status_code == 201 assert response_post.json()['event_name'] == event['event_name'] assert response_post.json()['event_date'] == event['event_date'] assert response_post.json()['statement_period_id'] == event['statement_period_id'] assert response_post.json()['target_id'] == event['target_id'] assert response_post.json()['target_type'] == event['target_type'] @pytest.mark.jira('ACC-4322') def test_get_abacus_events_by_target_type(basic_headers, drop_fks, clean_db): """GET /abacus-event/{target_type}/{target_id}/ .""" ows_abacus_event = ows_abacus_event_api_client(basic_headers) event = { 'event_date': datetime.now().strftime('%Y-%m-%dT%H:%M:%S.%f%z'), 'event_name': 'payment_approval', 'statement_period_id': 1, 'target_id': 1, 'target_type': 'payment_group_payments', } response_post = ows_abacus_event.post_abacus_event(event) assert response_post.status_code == 201 target_type = 'payment-group-payments' response_get = ows_abacus_event.get_abacus_event_by_target_type_and_id( target_type, event['target_id'] ) assert response_get.status_code == 200 assert response_get.json()[0]['statement_period_id'] == event['statement_period_id'] assert response_get.json()[0]['event_name'] == event['event_name'] assert 'abacus_event_id' in response_get.json()[0] @pytest.mark.jira('ACC-2832') def test_get_approval_count(basic_headers, clean_db): """GET number of approval events.""" ows_abacus_event = ows_abacus_event_api_client(basic_headers) payment_group_payment_id = 3 rolled_back_payment_group_payment_id = 4 event = { 'event_name': 'payment_approval', 'target_id': rolled_back_payment_group_payment_id, 'target_type': 'payment_group_payment', } response_post = ows_abacus_event.post_abacus_event(event) assert response_post.status_code == 201 event = { 'event_name': 'payment_approval', 'target_id': rolled_back_payment_group_payment_id, 'target_type': 'payment_group_payment', } response_post = ows_abacus_event.post_abacus_event(event) assert response_post.status_code == 201 event = { 'event_name': 'payment_approval', 'target_id': payment_group_payment_id, 'target_type': 'payment_group_payment', } response_post = ows_abacus_event.post_abacus_event(event) assert response_post.status_code == 201 res_get = ows_abacus_event.get_approval_count(payment_group_payment_id) assert res_get.status_code == 200 assert res_get.json()['approval_count'] == 1 assert res_get.json()['payment_group_payment_id'] == payment_group_payment_id @pytest.mark.jira('ACC-2836') def test_put_abacus_event_rollback(basic_headers, clean_db): """PUT /abacus-event/rollback .""" ows_abacus_event = ows_abacus_event_api_client(basic_headers) event_name = 'payment_approval' target_id = 1 target_type = 'payment_group_payment' event = { 'event_name': event_name, 'target_id': target_id, 'target_type': target_type, } response_post = ows_abacus_event.post_abacus_event(event) assert response_post.status_code == 201 body = { 'event_name': 'payment_approval', 'target_id': 1, 'target_type': 'payment_group_payment', } res_put = ows_abacus_event.put_abacus_event_rollback(body) assert res_put.status_code == 200 response_body = res_put.json()[0] assert response_body['abacus_event_id'] assert response_body['event_date'] is not None assert response_body['rolled_back_at'] is not None assert response_body['event_name'] == event_name assert response_body['target_id'] == target_id assert response_body['target_type'] == target_type