Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bulk credits sweep account #707

Merged
merged 39 commits into from
Dec 20, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
c8530e8
Add Account spec
remear Oct 6, 2014
29279bd
Add sweep_account link to BankAccount resource
remear Oct 6, 2014
8471295
Add bulk credit to sweep account feature
remear Oct 6, 2014
f42089a
Remove transfers link
remear Oct 6, 2014
172a527
Spec Account and Settlement resources. Update bulk credit feature.
remear Oct 16, 2014
306bee1
Create Settlements on POST to account settlements
remear Oct 20, 2014
6fe13fd
Add credits and reversals links to Settlements
remear Oct 20, 2014
a9dd0a9
Add reversals and refunds links to Accounts
remear Oct 20, 2014
18d6292
Add type to Account. Remove deposit_account link from Customer.
remear Oct 20, 2014
8045aba
Remove type from Account
remear Oct 21, 2014
0aeab75
Add can_debit and can_credit fields to Account
remear Oct 21, 2014
1e49b4d
POST settlements with no destination should 400
remear Oct 21, 2014
642370e
Use source instead
remear Oct 21, 2014
d3e31f8
More settlement scenarios. Cleanup.
remear Nov 13, 2014
e4d8cbf
Fix settlement reversals scenarios
remear Nov 13, 2014
745d043
Add settlement scenario account insufficient funds
remear Nov 13, 2014
2e3b457
More descriptive Accounts description
remear Nov 13, 2014
f2c7675
Fix bulk credit feature
rserna2010 Dec 5, 2014
8ef8470
Fix some errors
remear Dec 6, 2014
d1e4036
Edit create customer step
rserna2010 Dec 6, 2014
36352e7
Merge branch 'bulk-credits-sweep-account' of github.com:balanced/bala…
rserna2010 Dec 6, 2014
1365a5b
Fix syntax error in reversals, clean up settlements steps
rserna2010 Dec 6, 2014
9a36b43
Change categroy code for missing funding instrument to request
rserna2010 Dec 8, 2014
676ffec
Fix variable for credit_id_2
rserna2010 Dec 8, 2014
8e6280e
change back category code for credits, edit settlements instead
rserna2010 Dec 8, 2014
b617c04
Fix account step, missing with body:
rserna2010 Dec 8, 2014
2b66e22
remove extra bank account call on settlement feature
rserna2010 Dec 10, 2014
9b0f434
Fix gsub issue causing malformed order ids
rserna2010 Dec 11, 2014
e988cc9
Correct typo in accounts feature
rserna2010 Dec 11, 2014
ff15533
Edit settlemtent fixture to accept transaction_number, fix broken rev…
rserna2010 Dec 11, 2014
f59e0dc
Add new tests for accoutns
rserna2010 Dec 13, 2014
aa0cc6f
Add tests and fixtures for testing links for accounts and settlements
rserna2010 Dec 13, 2014
2ff55e8
fix id for reversals feature:
rserna2010 Dec 13, 2014
8b81e3e
Edit checker in http_steps to evaluate nested entitites, such as events
rserna2010 Dec 16, 2014
959a691
add tests for negtive balances in account, change settlement schema t…
rserna2010 Dec 19, 2014
f75e3a0
Chnage bank account used to always transition to succeed
rserna2010 Dec 19, 2014
b5538ed
fix status of bank account trasnactions
rserna2010 Dec 19, 2014
ec3af70
Fixes
remear Dec 20, 2014
08ad48e
Fix parse error
remear Dec 20, 2014
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
126 changes: 126 additions & 0 deletions features/accounts.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
Feature: Accounts
Accounts are funding instruments which are able to store a balance internally with the Balanced system.

Scenario: List accounts
Given I have created a customer
When I GET to /accounts
Then I should get a 200 OK status code
And the response is valid according to the "accounts" schema

Scenario: Retrieving accounts for a customer
Given I have created a customer
When I GET to /customers/:customer_id/accounts
Then I should get a 200 OK status code
And the response is valid according to the "accounts" schema
And the fields on these accounts match:
"""
{
"links": {
"customer": ":customer_id"
}
}
"""

Scenario: Credit a customer payable account
Given I have an order with a debit
When I POST to /accounts/:customer_payable_account_id/credits with the body:
"""
{
"credits": [{
"amount": 234,
"order": "/orders/:order_id"
Copy link
Contributor

Choose a reason for hiding this comment

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

does it return the order href? i think we return the order ID and a link href.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

The response should. Most of the steps in these API specs are just written to get the ID so I followed that convention for now, but I'd like to revisit it later.

}]
}
"""
Then I should get a 201 Created status code
And the response is valid according to the "credits" schema

Scenario: Retrieving credits for an account
Given I have an Account with sufficient funds
When I GET to /accounts/:customer_payable_account_id/credits
Then I should get a 200 OK status code
And the response is valid according to the "credits" schema
And the fields on these credits match:
"""
{
"links": {
"destination": ":customer_payable_account_id"
}
}
"""

# Currently there are no debitable accounts
Scenario: Retrieving debits for an account
Given I have an Account with sufficient funds
When I GET to /accounts/:customer_payable_account_id/debits
Then I should get a 200 OK status code
And the fields on these debits match:
"""
{
"meta": {
"total": 0
}
}
"""

# Currently there are no debitable accounts, thus no refunds
Scenario: Retrieving refunds for an account
Given I have an Account with a credit
Then I POST to /credits/:credit_id/reversals
When I POST to /debits/:debit_id/refunds
Then I should get a 201 Created status code
And the response is valid according to the "refunds" schema

When I GET to /accounts/:customer_payable_account_id/refunds
Then I should get a 200 OK status code
And the fields on these refunds match:
"""
{
"meta": {
"total": 0
}
}
"""

Scenario: Retrieving reversals for an account
Given I have an Account with a credit
Then I POST to /credits/:credit_id/reversals
Then I should get a 201 Created status code
And the response is valid according to the "reversals" schema
When I GET to /accounts/:customer_payable_account_id/reversals
Then I should get a 200 OK status code
And the response is valid according to the "reversals" schema
And the fields on these reversals match:
"""
{
"links": {
"credit": ":credit_id"
}
}
"""

Scenario: Retrieving settlements for an account
Given I have an Account with sufficient funds
When I POST to /accounts/:customer_payable_account_id/settlements with the body:
"""
{
"settlements": [{
"funding_instrument": "/bank_accounts/:bank_account_id",
"appears_on_statement_as": "Settlement Oct",
"description": "Settlement for payouts from October"
}]
}
"""
Then I should get a 201 Created status code
And the response is valid according to the "settlements" schema
When I GET to /accounts/:customer_payable_account_id/settlements
Then I should get a 200 OK status code
And the response is valid according to the "settlements" schema
And the fields on these settlements match:
"""
{
"links": {
"source": ":customer_payable_account_id"
}
}
"""
47 changes: 47 additions & 0 deletions features/credits.feature
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,50 @@ Feature: Credits
"category_code": "no-funding-destination"
}
"""


Scenario: Bulk credit to a customer payable account
Given I have a merchant with 2 orders with debits
When I POST to /accounts/:customer_payable_account_id/credits with the body:
"""
{
"credits": [{
"amount": 1000,
"order": "/orders/:order_id_1",
Copy link
Contributor

Choose a reason for hiding this comment

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

Would the credit say its destination is the sweep_account?

Copy link
Contributor

Choose a reason for hiding this comment

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

If I reverse a credit before it's at the sweep_account, will it immediately go back into the order?

Copy link
Contributor

Choose a reason for hiding this comment

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

Would the credit say its destination is the sweep_account?

that's implied by the endpoint that you're POSTing to in this scenario.

If I reverse a credit before it's at the sweep_account, will it immediately go back into the order?

it immediately goes to the sweep, i think you mean bank account. if you reverse a credit it should leave the sweep with a negative balance (if the credit has cleared to the bank account). in that case it would eventually debit the bank account to zero out the balance.

Copy link

Choose a reason for hiding this comment

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

@mjallday What do you mean by "eventually"? When would it actually debit the bank account? What would happen if the bank account doesn't have any balance?

Copy link
Contributor

Choose a reason for hiding this comment

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

if the sum of the transactions to the sweep account since it was last settled are less than zero then it would result in a debit to the bank account.

we haven't defined how that would react in the case of the underlying bank account failing but i suspect it would cause the other transactions to go into a failed state.

"appears_on_statement_as": "Payout group A"
}]
}
"""
Then I should get a 201 Created status code
And the response is valid according to the "credits" schema

When I make a GET request to /accounts/:customer_payable_account_id
Then I should get a 200 OK status code
And the fields on this account match:
"""
{
"balance": 1000
}
"""

When I POST to /accounts/:customer_payable_account_id/credits with the body:
"""
{
"credits": [{
"amount": 1000,
"order": "/orders/:order_id_2",
"appears_on_statement_as": "Payout group B"
}]
}
"""
Then I should get a 201 Created status code
And the response is valid according to the "credits" schema

When I make a GET request to /accounts/:customer_payable_account_id
Then I should get a 200 OK status code
And the fields on this account match:
"""
{
"balance": 2000
}
"""
14 changes: 14 additions & 0 deletions features/customers.feature
Original file line number Diff line number Diff line change
Expand Up @@ -232,3 +232,17 @@ Feature: Customers
"merchant_status": "underwritten"
}
"""

Scenario: Retrieving accounts for a customer
Given I have a bank account with a settlement
When I GET to /customers/:customer_id/accounts
Then I should get a 200 OK status code
And the response is valid according to the "accounts" schema
And the fields on these accounts match:
"""
{
"links": {
"customer": ":customer_id"
}
}
"""
2 changes: 1 addition & 1 deletion features/debits.feature
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ Feature: Debit a card or bank account
And the response is valid according to the "debits" schema
And the fields on these debits match:
"""
{ "status": "pending" }
{ "status": "succeeded" }
"""

Scenario: Debits to unverified bank accounts fail
Expand Down
6 changes: 3 additions & 3 deletions features/orders.feature
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ Feature: Orders

Scenario: Checking escrow of order after creating a credit
Given I have an order with a debit
And I have tokenized a bank account and associated with the merchant
And I have tokenized a bank account associated with the merchant
And I POST to /bank_accounts/:bank_account_id/credits with the body:
"""
{
Expand All @@ -146,7 +146,7 @@ Feature: Orders

Scenario: Orders cannot be credited more than escrow balance
Given I have created an order
And I have tokenized a bank account and associated with the merchant
And I have tokenized a bank account associated with the merchant
And I have tokenized a customer card
And I make a POST request to the link "cards.debits" with the body:
"""
Expand Down Expand Up @@ -252,7 +252,7 @@ Feature: Orders
}]
}
"""
And I have tokenized a bank account and associated with the merchant
And I have tokenized a bank account associated with the merchant
Then I make a POST request to the link "bank_accounts.credits" with the body:
"""
{
Expand Down
66 changes: 66 additions & 0 deletions features/reversals.feature
Original file line number Diff line number Diff line change
Expand Up @@ -159,3 +159,69 @@ Feature: Reversal
"""
{ "status": "failed" }
"""

Scenario: Reverse an Account credit before settlement
Given I have an Account with sufficient funds
When I POST to /credits/:credit_id_2/reversals with the body:
"""
{
"reversals": [{
"amount": 1000
}]
}
"""
Then I should get a 201 Created status code
And the response is valid according to the "reversals" schema
And the fields on this reversal match:
"""
{ "status": "succeeded" }
"""

Scenario: Reverse an Account credit after settlement
Copy link
Member

Choose a reason for hiding this comment

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

I don't see a reversals happening in this scenario despite it saying "reverse an account credit".

Given I have an Account with sufficient funds
When I POST to /accounts/:customer_payable_account_id/settlements with the body:
"""
{
"settlements": [{
"funding_instrument": "/bank_accounts/:bank_account_id"
}]
}
"""
Then I should get a 201 Created status code
And the response is valid according to the "settlements" schema
And the fields on this settlement match:
"""
{
"amount": 30000,
"status": "succeeded"
}
"""

When I POST to /credits/:credit_id_2/reversals
Then I should get a 201 Created status code
And the response is valid according to the "reversals" schema
And the fields on this reversal match:
"""
{
"amount": 10000,
"status": "succeeded"
}
"""

When I POST to /accounts/:customer_payable_account_id/settlements with the body:
"""
{
"settlements": [{
"funding_instrument": "/bank_accounts/:bank_account_id"
}]
}
"""
Then I should get a 201 Created status code
And the response is valid according to the "settlements" schema

When I make a GET request to the link "reversals.order"
Then I should get a 200 OK status code
And the fields on this order match:
"""
{ "amount_escrowed": 10000 }
"""
Loading