"""Functional tests for report_payment.""" from moto import mock_aws from payment.constants.constants import REPORT_TYPE from tests.utils.factories import ReportPaymentFactory @mock_aws def test_create_or_update_report_create_success(fixture_client, faker) -> None: """PUT /reports/// create success.""" payload = { 'report_type': REPORT_TYPE.APPROVAL, 'report_export_url': faker.uri(), } expected = { 'target_type': f'{faker.word()}_{faker.word()}', 'target_id': faker.pyint(), **payload, } url = ( f'/reports/{expected["target_type"].replace("_", "-")}/{expected["target_id"]}/' ) res = fixture_client.put(url, json=payload) assert res.status_code == 200 assert res.json.items() >= expected.items() @mock_aws def test_create_or_update_report_update_success(fixture_client, faker) -> None: """PUT /reports/// update success.""" existing_report = ReportPaymentFactory.create() payload = { 'report_type': existing_report.report_type, 'report_export_url': faker.uri(), } expected = { 'target_type': existing_report.target_type, 'target_id': existing_report.target_id, **payload, } url = ( f'/reports/{expected["target_type"].replace("_", "-")}/{expected["target_id"]}/' ) res = fixture_client.put(url, json=payload) assert res.status_code == 200 assert res.json.items() >= expected.items() def test_create_or_update_report_invalid_report_type(fixture_client, faker) -> None: """PUT /reports/// create success.""" payload = { 'report_type': 'invalid_type', 'report_export_url': faker.uri(), } expected = { 'target_type': f'{faker.word()}_{faker.word()}', 'target_id': faker.pyint(), **payload, } url = ( f'/reports/{expected["target_type"].replace("_", "-")}/{expected["target_id"]}/' ) res = fixture_client.put(url, json=payload) assert res.status_code == 400 @mock_aws def test_get_reports_by_target_success(fixture_client, faker) -> None: """GET /reports/// success.""" existing_report = ReportPaymentFactory.create() url = f'/reports/{existing_report.target_type.replace("_", "-")}/{existing_report.target_id}/' res = fixture_client.get(url) assert res.status_code == 200 assert res.json[0]['report_payment_id'] == existing_report.report_payment_id @mock_aws def test_get_download_success(fixture_client, faker) -> None: """GET /report-payment//download/ success.""" existing_report = ReportPaymentFactory.create() url = f'/report-payment/{existing_report.report_payment_id}/download/' res = fixture_client.get(url) assert res.status_code == 200 assert res.json['download_url'] == existing_report.create_presigned_url() def test_get_download_failure_not_found(fixture_client, faker) -> None: """GET /report-payment//download/ success.""" url = f'/report-payment/{faker.pyint()}/download/' res = fixture_client.get(url) assert res.status_code == 400 def test_get_report_payment_success(fixture_client, faker) -> None: """GET /report-payment// success.""" existing_report = ReportPaymentFactory.create() url = f'/report-payment/{existing_report.report_payment_id}/' res = fixture_client.get(url) assert res.status_code == 200 assert res.json['report_payment_id'] == existing_report.report_payment_id def test_get_report_payment_failure_not_found(fixture_client, faker) -> None: """GET /report-payment// success.""" url = f'/report-payment/{faker.pyint()}/' res = fixture_client.get(url) assert res.status_code == 400