"""Integration tests for /earnings-transfers endpoints and logic.""" import pytest from royalties.tests.integration.conftest import ( ows_royalties_api_client, ) @pytest.mark.jira('ACC-10096') def test_post_get_put_earnings_transfers(basic_headers, account_contract_fixtures): """Test POST/GET /earnings-transfers endpoints.""" ows_royalties_client = ows_royalties_api_client(basic_headers) post_body_1 = [ { 'from_contract_id': 1, 'to_contract_id': 2, 'transfer_type': 'transfer', 'rate_type': 'flat_rate', 'transfer_amount': '123.0', 'input': 'closing_balance', 'negative': False, 'active': False, } ] res_post = ows_royalties_client.post_earnings_transfer(post_body_1) assert res_post.status_code == 201 transfer_id_1 = res_post.json()[0]['earnings_transfer_id'] post_body_2 = [ { 'from_contract_id': 3, 'to_contract_id': 1, 'transfer_type': 'override', 'rate_type': 'percent', 'transfer_amount': '10', 'input': 'net_revenue', 'negative': False, 'active': False, } ] res_post = ows_royalties_client.post_earnings_transfer(post_body_2) assert res_post.status_code == 201 transfer_id_2 = res_post.json()[0]['earnings_transfer_id'] params = { 'payment_schedules': '30_days_after_month_end', } res_get = ows_royalties_client.get_earnings_transfers() assert res_get.status_code == 200 assert len(res_get.json()['items']) == 2 assert res_get.json()['total_count'] == 2 res_get = ows_royalties_client.get_earnings_transfers(params) assert res_get.status_code == 200 assert len(res_get.json()['items']) == 1 assert res_get.json()['total_count'] == 1 res_get = ows_royalties_client.get_earnings_transfer_by_contract_id(1) assert res_get.status_code == 200 assert len(res_get.json()['items']) == 1 assert float(res_get.json()['items'][0]['transfer_amount']) == pytest.approx(123.0) res_get = ows_royalties_client.get_earnings_transfer_by_contract_id(2) assert res_get.status_code == 200 assert len(res_get.json()['items']) == 1 assert float(res_get.json()['items'][0]['transfer_amount']) == pytest.approx(123.0) res_get_by_id = ows_royalties_client.get_earnings_transfer_by_id(transfer_id_1) assert res_get_by_id.status_code == 200 assert res_get_by_id.json()['earnings_transfer_id'] == transfer_id_1 assert float(res_get_by_id.json()['transfer_amount']) == pytest.approx(123.0) put_body = [ { 'earnings_transfer_id': transfer_id_1, 'transfer_amount': '200.0', 'active': True, }, { 'earnings_transfer_id': transfer_id_2, 'transfer_amount': '50', 'active': True, }, ] res_put = ows_royalties_client.put_earnings_transfer(put_body) assert res_put.status_code == 200 assert len(res_put.json()) == 2 updated = {item['earnings_transfer_id']: item for item in res_put.json()} assert float(updated[transfer_id_1]['transfer_amount']) == pytest.approx(200.0) assert updated[transfer_id_1]['active'] is True assert float(updated[transfer_id_2]['transfer_amount']) == pytest.approx(50.0) assert updated[transfer_id_2]['active'] is True # Verify persistence via GET res_get_all = ows_royalties_client.get_earnings_transfers() assert res_get_all.status_code == 200 persisted = { item['earnings_transfer_id']: item for item in res_get_all.json()['items'] } assert float(persisted[transfer_id_1]['transfer_amount']) == pytest.approx(200.0) assert persisted[transfer_id_1]['active'] is True assert float(persisted[transfer_id_2]['transfer_amount']) == pytest.approx(50.0) assert persisted[transfer_id_2]['active'] is True @pytest.mark.jira('ACC-10096') def test_put_earnings_transfer_invalid_id(basic_headers, account_contract_fixtures): """Test PUT /earnings-transfer/bulk returns 400 for a non-existent ID.""" ows_royalties_client = ows_royalties_api_client(basic_headers) res_put = ows_royalties_client.put_earnings_transfer( [{'earnings_transfer_id': 999999, 'active': False}] ) assert res_put.status_code == 400 @pytest.mark.jira('ACC-10096') def test_get_earnings_transfer_by_id_not_found( basic_headers, account_contract_fixtures ): """Test GET /earnings-transfer/ returns 404 for a non-existent ID.""" ows_royalties_client = ows_royalties_api_client(basic_headers) res_get = ows_royalties_client.get_earnings_transfer_by_id(999999) assert res_get.status_code == 404 @pytest.mark.jira('PORT-67') def test_post_get_ET_transfer_job_terms(basic_headers, account_contract_fixtures): """Test POST/GET /transfer-job/{job_id}/terms endpoints.""" ows_royalties_client = ows_royalties_api_client(basic_headers) post_body = [ { 'contract_id': 1, 'term_type': 'product', 'conditions': [ {'priority': 1, 'term_rate': 80.00, 'conditions': {}}, { 'priority': 2, 'term_rate': 20.00, 'conditions': {'countries': ['US']}, }, ], } ] res_post = ows_royalties_client.post_transfer_job_terms(1, post_body) assert res_post.status_code == 201 assert len(res_post.json()) == 1 assert len(res_post.json()[0]['conditions']) == 2 res_get = ows_royalties_client.get_transfer_job_terms(1) assert res_get.status_code == 200 assert len(res_get.json()) == 1 assert res_get.json()[0]['term_type'] == 'product' assert res_get.json()[0]['conditions'][1]['conditions'] == {'countries': ['US']} res_get_empty = ows_royalties_client.get_transfer_job_terms(2) assert res_get_empty.status_code == 200 assert res_get_empty.json() == [] res_post_bad = ows_royalties_client.post_transfer_job_terms(1, {'not': 'a list'}) assert res_post_bad.status_code == 400