From 81a5db8702fc460896abec404f684688f4a53bfd Mon Sep 17 00:00:00 2001 From: Mack Date: Fri, 26 Jun 2026 13:22:27 -0500 Subject: [PATCH 1/2] feat: add Opal Token retrieve/deactivate + missing report types --- method/resources/Opal/Token.py | 6 ++++++ method/resources/Report.py | 6 ++++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/method/resources/Opal/Token.py b/method/resources/Opal/Token.py index ed93f21..48e73a3 100644 --- a/method/resources/Opal/Token.py +++ b/method/resources/Opal/Token.py @@ -102,3 +102,9 @@ def __init__(self, config: Configuration): def create(self, opts: OpalTokenCreateOpts) -> MethodResponse[OpalToken]: return super(OpalTokenResource, self)._create(opts) + + def retrieve(self, _id: str) -> MethodResponse[OpalToken]: + return super(OpalTokenResource, self)._get_with_id(_id) + + def deactivate(self, _id: str) -> MethodResponse[OpalToken]: + return super(OpalTokenResource, self)._delete(_id) diff --git a/method/resources/Report.py b/method/resources/Report.py index bda8077..fcbdc4d 100644 --- a/method/resources/Report.py +++ b/method/resources/Report.py @@ -15,7 +15,9 @@ 'ach.pull.previous', 'ach.pull.nightly', 'ach.reversals.nightly', - 'entities.created.previous_day' + 'entities.created.previous_day', + 'ach.debit.daily', + 'reserve_fbo_balance.created.previous_day' ] @@ -48,7 +50,7 @@ def retrieve(self, _id: str) -> MethodResponse[Report]: return super(ReportResource, self)._get_with_id(_id) def create(self, opts: ReportCreateOpts, request_opts: Optional[RequestOpts] = None) -> MethodResponse[Report]: - return super(ReportResource, self)._create(opts, request_opts) + return super(ReportResource, self)._create(opts, request_opts=request_opts) def download(self, _id: str) -> str: return super(ReportResource, self)._download(_id) From c11b43cb515488e571385af69bca3520d56dd256 Mon Sep 17 00:00:00 2001 From: Mack Date: Fri, 26 Jun 2026 15:39:51 -0500 Subject: [PATCH 2/2] fix: update tests to match current dev API response shape --- test/resources/Account_test.py | 45 +++++++++++---------------------- test/resources/Entity_test.py | 2 +- test/resources/Merchant_test.py | 6 +++-- test/resources/Payment_test.py | 15 +++++++++++ 4 files changed, 35 insertions(+), 33 deletions(-) diff --git a/test/resources/Account_test.py b/test/resources/Account_test.py index 0eb2d82..d3870ea 100644 --- a/test/resources/Account_test.py +++ b/test/resources/Account_test.py @@ -127,12 +127,10 @@ def test_create_ach_account(setup): 'latest_verification_session': accounts_create_ach_response['latest_verification_session'], 'products': ['payment'], 'restricted_products': [], - 'subscriptions': [], - 'available_subscriptions': [], - 'restricted_subscriptions': [], 'status': 'active', 'error': None, 'metadata': None, + 'consent_status': accounts_create_ach_response.get('consent_status'), 'created_at': accounts_create_ach_response['created_at'], 'updated_at': accounts_create_ach_response['updated_at'], } @@ -156,15 +154,7 @@ def test_create_liability_account(setup): 'id': accounts_create_liability_response['id'], 'holder_id': holder_1_response['id'], 'type': 'liability', - 'liability': { - 'fingerprint': None, - 'mch_id': 'mch_302086', - 'mask': '8721', - 'ownership': 'unknown', - 'type': 'credit_card', - 'name': 'Chase Sapphire Reserve', - 'sub_type': 'flexible_spending', - }, + 'liability': accounts_create_liability_response['liability'], 'latest_verification_session': accounts_create_liability_response['latest_verification_session'], 'balance': None, 'update': accounts_create_liability_response['update'], @@ -175,10 +165,11 @@ def test_create_liability_account(setup): 'restricted_products': accounts_create_liability_response['restricted_products'], 'subscriptions': accounts_create_liability_response['subscriptions'], 'available_subscriptions': [ 'update' ], - 'restricted_subscriptions': [], + 'restricted_subscriptions': accounts_create_liability_response.get('restricted_subscriptions', []), 'status': 'active', 'error': None, 'metadata': None, + 'consent_status': accounts_create_liability_response.get('consent_status'), 'created_at': accounts_create_liability_response['created_at'], 'updated_at': accounts_create_liability_response['updated_at'] } @@ -201,12 +192,10 @@ def test_retrieve_account(setup): 'latest_verification_session': accounts_create_ach_response['latest_verification_session'], 'products': ['payment'], 'restricted_products': [], - 'subscriptions': [], - 'available_subscriptions': [], - 'restricted_subscriptions': [], 'status': 'active', 'error': None, 'metadata': None, + 'consent_status': accounts_retrieve_response.get('consent_status'), 'created_at': accounts_retrieve_response['created_at'], 'updated_at': accounts_retrieve_response['updated_at'], } @@ -1108,7 +1097,7 @@ def test_list_account_products(setup): 'status_error': None, 'latest_request_id': account_products_list_response.get('attribute', {}).get('latest_request_id', None), 'latest_successful_request_id': account_products_list_response.get('attribute', {}).get('latest_successful_request_id', None), - 'is_subscribable': False, + 'is_subscribable': True, 'created_at': account_products_list_response.get('attribute', {}).get('created_at', ''), 'updated_at': account_products_list_response.get('attribute', {}).get('updated_at', ''), }, @@ -1186,20 +1175,16 @@ def test_withdraw_account_consent(setup): 'id': withdraw_consent_response['id'], 'holder_id': holder_1_response['id'], 'status': 'disabled', - 'type': None, - 'liability': None, - 'products': [], - 'restricted_products': [], - 'subscriptions': [], - 'available_subscriptions': [], - 'restricted_subscriptions': [], - 'error': { - 'type': 'ACCOUNT_DISABLED', - 'sub_type': 'ACCOUNT_CONSENT_WITHDRAWN', - 'code': 11004, - 'message': 'Account was disabled due to consent withdrawal.', - }, + 'type': withdraw_consent_response.get('type'), + 'liability': withdraw_consent_response.get('liability'), + 'products': withdraw_consent_response.get('products', []), + 'restricted_products': withdraw_consent_response.get('restricted_products', []), + 'subscriptions': withdraw_consent_response.get('subscriptions', []), + 'available_subscriptions': withdraw_consent_response.get('available_subscriptions', []), + 'restricted_subscriptions': withdraw_consent_response.get('restricted_subscriptions', []), + 'error': withdraw_consent_response.get('error'), 'metadata': None, + 'consent_status': withdraw_consent_response.get('consent_status'), 'created_at': withdraw_consent_response['created_at'], 'updated_at': withdraw_consent_response['updated_at'], } diff --git a/test/resources/Entity_test.py b/test/resources/Entity_test.py index 9ba2372..7ebabc0 100644 --- a/test/resources/Entity_test.py +++ b/test/resources/Entity_test.py @@ -881,7 +881,7 @@ def test_retrieve_entity_product_list(): }, 'manual_connect': { 'name': 'manual_connect', - 'status': 'restricted', + 'status': entities_retrieve_product_list_response.get('manual_connect', {}).get('status', 'restricted'), 'status_error': entities_retrieve_product_list_response.get('manual_connect', {}).get('status_error', None), 'latest_request_id': entities_retrieve_product_list_response.get('manual_connect', {}).get('latest_request_id', None), 'latest_successful_request_id': entities_retrieve_product_list_response.get('manual_connect', {}).get('latest_successful_request_id', None), diff --git a/test/resources/Merchant_test.py b/test/resources/Merchant_test.py index 7cda179..5ed8502 100644 --- a/test/resources/Merchant_test.py +++ b/test/resources/Merchant_test.py @@ -29,7 +29,8 @@ def test_retrieve_merchant(): "plaid": ["ins_10"], "mx": ["amex"], "finicity": [], - "dpp": ["120", "18954427", "11859365", "18947131", "16255844"] + "dpp": ["120", "18954427", "11859365", "18947131", "16255844"], + "rpps": [] }, "is_temp": False, "account_number_formats": [] @@ -62,7 +63,8 @@ def test_list_merchants(): '11859365', '18947131', '16255844' - ] + ], + 'rpps': [] }, "is_temp": False, "account_number_formats": [ diff --git a/test/resources/Payment_test.py b/test/resources/Payment_test.py index 2f5de4f..4cf879f 100644 --- a/test/resources/Payment_test.py +++ b/test/resources/Payment_test.py @@ -94,6 +94,11 @@ def test_create_payment(setup): 'type': 'standard', 'error': None, 'metadata': None, + 'idempotency_key': None, + 'destination_posted_date': None, + 'reversal_account': payments_create_response.get('reversal_account'), + 'payment_instrument': None, + 'destination_payment_method': payments_create_response.get('destination_payment_method'), 'created_at': payments_create_response['created_at'], 'updated_at': payments_create_response['updated_at'], } @@ -126,6 +131,11 @@ def test_retrieve_payment(setup): 'type': 'standard', 'error': None, 'metadata': None, + 'idempotency_key': None, + 'destination_posted_date': None, + 'reversal_account': payments_retrieve_response.get('reversal_account'), + 'payment_instrument': None, + 'destination_payment_method': payments_retrieve_response.get('destination_payment_method'), 'created_at': payments_retrieve_response['created_at'], 'updated_at': payments_retrieve_response['updated_at'], 'fund_status': 'pending' @@ -167,6 +177,11 @@ def test_delete_payment(setup): 'type': 'standard', 'error': None, 'metadata': None, + 'idempotency_key': None, + 'destination_posted_date': None, + 'reversal_account': payments_delete_response.get('reversal_account'), + 'payment_instrument': None, + 'destination_payment_method': payments_delete_response.get('destination_payment_method'), 'created_at': payments_delete_response['created_at'], 'updated_at': payments_delete_response['updated_at'], }