diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a148a9..afa62d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,8 @@ Given a version number MAJOR.MINOR.PATCH, increment: ## [Unreleased] +### Added +- brcode attribute to InvoicePullSubscription ## [2.31.0] - 2025-09-30 ### Changed diff --git a/starkbank/invoicepullsubscription/__invoicepullsubscription.py b/starkbank/invoicepullsubscription/__invoicepullsubscription.py index 509013c..82760d1 100644 --- a/starkbank/invoicepullsubscription/__invoicepullsubscription.py +++ b/starkbank/invoicepullsubscription/__invoicepullsubscription.py @@ -38,7 +38,7 @@ class InvoicePullSubscription(Resource): def __init__(self, start, interval, pull_mode, pull_retry_limit, type, amount=None, amount_min_limit=None, display_description=None, due=None, external_id=None, reference_code=None, end=None, data=None, - name=None, tax_id=None, tags=None, id=None, status=None, bacen_id=None, created=None, updated=None): + name=None, tax_id=None, tags=None, id=None, status=None, bacen_id=None, brcode=None, created=None, updated=None): Resource.__init__(self, id=id) self.start = check_datetime_or_date(start) @@ -59,6 +59,7 @@ def __init__(self, start, interval, pull_mode, pull_retry_limit, type, amount=No self.tags = tags self.status = status self.bacen_id = bacen_id + self.brcode = brcode self.created = check_datetime(created) self.updated = check_datetime(updated) diff --git a/tests/sdk/test_invoice_pull_request.py b/tests/sdk/test_invoice_pull_request.py index 35d5ccd..2f1dd14 100644 --- a/tests/sdk/test_invoice_pull_request.py +++ b/tests/sdk/test_invoice_pull_request.py @@ -1,20 +1,37 @@ import starkbank -from datetime import datetime, timedelta from unittest import TestCase, main +from tests.utils.invoice import generateExampleInvoicesJson +from tests.utils.invoicePullRequest import generateExampleInvoicePullRequestJson +from tests.utils.invoicePullSubscription import generateExampleInvoicePullSubscriptionsJson from tests.utils.user import exampleProject starkbank.user = exampleProject +class TestInvoicePullRequestCreate(TestCase): + + def test_success(self): + invoices = starkbank.invoice.create(generateExampleInvoicesJson(n=1)) + invoice_id = invoices[0].id + subscriptions = starkbank.invoicepullsubscription.create(generateExampleInvoicePullSubscriptionsJson(n=1, type="qrcodeAndPayment")) + subscription_id = subscriptions[0].id + request = starkbank.invoicepullrequest.create([generateExampleInvoicePullRequestJson( + invoice_id=invoice_id, + subscription_id=subscription_id + )]) + self.assertIsNotNone(request.id) + + class TestInvoicePullRequestQuery(TestCase): def test_success(self): requests = list(starkbank.invoicepullrequest.query(limit=5)) - print(f"Number of InvoicePullRequests: {len(requests)}") + i = 0 for request in requests: + i += 1 self.assertIsNotNone(request.id) - print(request) + self.assertEqual(i, 5) class TestInvoicePullRequestPage(TestCase): @@ -25,12 +42,10 @@ def test_success(self): for _ in range(2): requests, cursor = starkbank.invoicepullrequest.page(limit=2, cursor=cursor) for request in requests: - print(request) self.assertFalse(request.id in ids) ids.append(request.id) if cursor is None: break - print(f"Total unique InvoicePullRequests: {len(ids)}") class TestInvoicePullRequestGet(TestCase): @@ -41,9 +56,8 @@ def test_success(self): request_id = request.id request = starkbank.invoicepullrequest.get(request_id) self.assertEqual(request.id, request_id) - print(request) break if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/tests/sdk/test_invoice_pull_request_log.py b/tests/sdk/test_invoice_pull_request_log.py index c1417ad..13cd01a 100644 --- a/tests/sdk/test_invoice_pull_request_log.py +++ b/tests/sdk/test_invoice_pull_request_log.py @@ -60,4 +60,4 @@ def test_success(self): if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/tests/sdk/test_invoice_pull_subscription.py b/tests/sdk/test_invoice_pull_subscription.py index 1f0ea05..18fb198 100644 --- a/tests/sdk/test_invoice_pull_subscription.py +++ b/tests/sdk/test_invoice_pull_subscription.py @@ -1,20 +1,51 @@ import starkbank -from datetime import datetime, timedelta from unittest import TestCase, main +from tests.utils.invoicePullSubscription import generateExampleInvoicePullSubscriptionsJson from tests.utils.user import exampleProject starkbank.user = exampleProject +class TestInvoicePullSubscriptionCreate(TestCase): + + def test_success_push(self): + subscriptions = generateExampleInvoicePullSubscriptionsJson(n=1, type="push") + subscriptions = starkbank.invoicepullsubscription.create(subscriptions) + + for subscription in subscriptions: + self.assertIsNotNone(subscription.id) + + def test_success_qrcode(self): + subscriptions = generateExampleInvoicePullSubscriptionsJson(n=1, type="qrcode") + subscriptions = starkbank.invoicepullsubscription.create(subscriptions) + + for subscription in subscriptions: + self.assertIsNotNone(subscription.id) + + def test_success_qrcode_and_payment(self): + subscriptions = generateExampleInvoicePullSubscriptionsJson(n=1, type="qrcodeAndPayment") + subscriptions = starkbank.invoicepullsubscription.create(subscriptions) + + for subscription in subscriptions: + self.assertIsNotNone(subscription.id) + + def test_success_payment_and_or_qrcode(self): + subscriptions = generateExampleInvoicePullSubscriptionsJson(n=1, type="paymentAndOrQrcode") + subscriptions = starkbank.invoicepullsubscription.create(subscriptions) + + for subscription in subscriptions: + self.assertIsNotNone(subscription.id) + class TestInvoicePullSubscriptionQuery(TestCase): def test_success(self): subscriptions = list(starkbank.invoicepullsubscription.query(limit=5)) - print(f"Number of InvoicePullSubscriptions: {len(subscriptions)}") + i = 0 for subscription in subscriptions: + i += 1 self.assertIsNotNone(subscription.id) - print(subscription) + self.assertEqual(i, 5) class TestInvoicePullSubscriptionPage(TestCase): @@ -25,12 +56,10 @@ def test_success(self): for _ in range(2): subscriptions, cursor = starkbank.invoicepullsubscription.page(limit=2, cursor=cursor) for subscription in subscriptions: - print(subscription) self.assertFalse(subscription.id in ids) ids.append(subscription.id) if cursor is None: break - print(f"Total unique InvoicePullSubscriptions: {len(ids)}") class TestInvoicePullSubscriptionGet(TestCase): @@ -41,9 +70,8 @@ def test_success(self): subscription_id = subscription.id subscription = starkbank.invoicepullsubscription.get(subscription_id) self.assertEqual(subscription.id, subscription_id) - print(subscription) break if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/tests/sdk/test_invoice_pull_subscription_log.py b/tests/sdk/test_invoice_pull_subscription_log.py index 8519ceb..db34f04 100644 --- a/tests/sdk/test_invoice_pull_subscription_log.py +++ b/tests/sdk/test_invoice_pull_subscription_log.py @@ -60,4 +60,4 @@ def test_success(self): if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/tests/utils/invoicePullRequest.py b/tests/utils/invoicePullRequest.py new file mode 100644 index 0000000..32c63d2 --- /dev/null +++ b/tests/utils/invoicePullRequest.py @@ -0,0 +1,13 @@ +# coding: utf-8 +from datetime import timedelta, datetime + + +def generateExampleInvoicePullRequestJson(invoice_id=None, subscription_id=None): + request = { + "attemptType": "default", + "due": datetime.today().date() + timedelta(days=5), + "invoiceId": invoice_id, + "subscriptionId": subscription_id, + "tags": [] + } + return request diff --git a/tests/utils/invoicePullSubscription.py b/tests/utils/invoicePullSubscription.py new file mode 100644 index 0000000..694862c --- /dev/null +++ b/tests/utils/invoicePullSubscription.py @@ -0,0 +1,58 @@ +# coding: utf-8 +from datetime import timedelta, datetime +from starkbank import InvoicePullSubscription +from .names.names import get_full_name +import uuid + + +example_invoice_pull_subscription = InvoicePullSubscription( + amount=0, + amount_min_limit=5000, + data=None, + display_description="Dragon Travel Fare", + external_id=str(uuid.uuid4()), + interval="month", + name="John Snow", + pull_mode="manual", + pull_retry_limit=3, + start=datetime.today().date() + timedelta(days=5), + end=datetime.today().date() + timedelta(days=35), + reference_code="contract-12345", + tags=[], + tax_id="012.345.678-90", + type=None +) + + +def generateExampleInvoicePullSubscriptionsJson(n=1, type=None): + subscriptions = [] + for _ in range(n): + example = example_invoice_pull_subscription + example.name = get_full_name() + example.external_id=str(uuid.uuid4()) + if type == "push": + example.type = type + example.data = { + "accountNumber": "9123900000", + "bankCode": "05097757", + "branchCode": "1126", + "taxId": "20.018.183/0001-80" + } + elif type == "qrcode": + example.type = type + example.data = None + elif type == "qrcodeAndPayment": + example.type = type + example.data = { + "amount": 400000 + } + elif type == "paymentAndOrQrcode": + example.type = type + example.data = { + "amount": 400000, + "due": datetime.today().date() + timedelta(days=35), + "fine": 2.5, + "interest": 1.3 + } + subscriptions.append(example) + return subscriptions