"""Functional tests for sales file API.""" from abacus_common_logic.test_utils.helpers import get_message from royalties.constants import error from royalties.constants.constants import ACCOUNTING_PERIOD_STATUSES as PERIOD_STATUSES from royalties.tests.utils.factories import AccountingPeriodFactory, SalesFileFactory def test_create_a_new_sales_file(fixture_client): """Create a new sales file.""" accounting_period = AccountingPeriodFactory.create(closed_date=None) path = '/sales-file' post_body = { 'accounting_period_id': accounting_period.accounting_period_id, 'file_name': 'Replicant Manifest 2019', } res = fixture_client.post(path, json=post_body) assert res.status_code == 201 assert len(accounting_period.sales_files) == 1 sales_file = accounting_period.sales_files[0] assert sales_file.file_name == post_body['file_name'] assert accounting_period.accounting_period_status == PERIOD_STATUSES.OPEN def test_create_sales_file_fails_when_accounting_period_is_closed(fixture_client): """Sales file creation fails when given periods is closed.""" mock_period = AccountingPeriodFactory.create( closed_date='2020-01-01', accounting_period_status=PERIOD_STATUSES.CLOSED ) post_body = { 'accounting_period_id': mock_period.accounting_period_id, 'file_name': 'Blade Runner Reference', } res = fixture_client.post('/sales-file', json=post_body) assert res.status_code == 400 assert res.json['message'] == error.ERROR_NO_OPEN_PERIOD def test_update_metadata_success(fixture_client): """Update metadata.""" sales_file = SalesFileFactory(main_url=None, amount_usd=None, row_count=None) res = fixture_client.put( f'/sales-file/{sales_file.sales_file_id}', json={ 'main_url': '', 'amount_usd': 54000203.45, 'row_count': 457788996, }, ) assert res.status_code == 200 assert sales_file.main_url == '' assert float(sales_file.amount_usd) == 54000203.45 assert sales_file.row_count == 457788996 def test_update_metadata_fails_with_missing_fields(fixture_client): """Update metadata.""" sales_file = SalesFileFactory(main_url=None, amount_usd=None) res = fixture_client.put( f'/sales-file/{sales_file.sales_file_id}', json={'row_count': 3000} ) assert res.status_code == 400 errors = get_message(res) assert errors == error.ERROR_INVALID_METADATA