Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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)

Expand Down
28 changes: 21 additions & 7 deletions tests/sdk/test_invoice_pull_request.py
Original file line number Diff line number Diff line change
@@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Não seria melhor definir uma variável limit = 5 e depois fazer assertEqual(limit, len(requests)?
Não sei como que está o padrão nos outros testes do SDK

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Temos nesse formato nos testes de Invoice:

invoices, cursor = starkbank.invoice.page(limit=2, cursor=cursor)
invoices = starkbank.invoice.query(limit=10)

Também em boleto:

boletos, cursor = starkbank.boleto.page(limit=2, cursor=cursor)
boletos = starkbank.boleto.query(limit=1)

for request in requests:
i += 1
self.assertIsNotNone(request.id)
print(request)
self.assertEqual(i, 5)


class TestInvoicePullRequestPage(TestCase):
Expand All @@ -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):
Expand All @@ -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()
main()
2 changes: 1 addition & 1 deletion tests/sdk/test_invoice_pull_request_log.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,4 @@ def test_success(self):


if __name__ == '__main__':
main()
main()
42 changes: 35 additions & 7 deletions tests/sdk/test_invoice_pull_subscription.py
Original file line number Diff line number Diff line change
@@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mesma coisa

for subscription in subscriptions:
i += 1
self.assertIsNotNone(subscription.id)
print(subscription)
self.assertEqual(i, 5)


class TestInvoicePullSubscriptionPage(TestCase):
Expand All @@ -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):
Expand All @@ -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()
main()
2 changes: 1 addition & 1 deletion tests/sdk/test_invoice_pull_subscription_log.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,4 @@ def test_success(self):


if __name__ == '__main__':
main()
main()
13 changes: 13 additions & 0 deletions tests/utils/invoicePullRequest.py
Original file line number Diff line number Diff line change
@@ -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
58 changes: 58 additions & 0 deletions tests/utils/invoicePullSubscription.py
Original file line number Diff line number Diff line change
@@ -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
Loading