balanced / balanced-api

Balanced API specification.
220 stars 72 forks source link

Add a way to test failure cases for ACH debits #708

Open ged opened 9 years ago

ged commented 9 years ago

Currently, if you use the testing bank accounts listed at https://docs.balancedpayments.com/1.1/overview/resources/#test-bank-account-numbers, you can't set up an integration test for the case where an ACH debit fails, as the account verification fails before you can create one.

It'd be great to be able to use an account number that allowed verification, but failed any debit created against it. An alternative is to try to approximate what debit failures are going to look like, mock the failure using fixtured data, deploy with that code, and then wait until a failure happens in production and use that to update the fixtures. This makes integration tests much less useful, as well, as updates that cause changes to failed debits in Balanced's systems won't be encountered until we hit them in production.

Thanks for your time, and for an (almost entirely) excellent test environment!

mjallday commented 9 years ago

This is something we've already discussed over on issue #275 but I see it accidentally got closed.

I'm going to close this issue and re-open that issue since I think a lot of people agree with you.

ged commented 9 years ago

I remember seeing #275 before, but I don't even need the status change to be asynchronous (i.e., I'd be happy if it just returned from the POST with its status set to failed).

As it stands, I can't create a Debit with a failed state at all, synchronously or asynchronously, as you need a verified bank account to create one, and there's no way (that I can see) to create a verified bank account with one of the failed numbers:

[7] pry(main)> bank_account.verify
[2014-10-06 16:36:59.438154 6057/main]  info {} -- get https://api.balancedpayments.com/bank_accounts/BA4FozKy9I7B9s5mEqqUMDCR
[2014-10-06 16:36:59.690408 6057/main]  info {Status} -- 200
[2014-10-06 16:36:59.692276 6057/main]  info {} -- post https://api.balancedpayments.com/bank_accounts/BA4FozKy9I7B9s5mEqqUMDCR/verifications
[2014-10-06 16:37:08.549996 6057/main]  info {Status} -- 201
[2014-10-06 16:37:08.550947 6057/main]  info {} -- Setting up JPMORGAN CHASE BANK checking account xxxxx0004 with new verification /verifications/BZ5kVjKnxh6EKnVBbpkRpUj3.
=> #<Balanced::BankAccountVerification:0x007fa994971298
 @attributes=
  {"verification_status"=>"failed",
   "links"=>{"bank_account"=>"BA4FozKy9I7B9s5mEqqUMDCR"},
   "href"=>"/verifications/BZ5kVjKnxh6EKnVBbpkRpUj3",
   "created_at"=>"2014-10-06T23:37:07.486665Z",
   "attempts_remaining"=>3,
   "updated_at"=>"2014-10-06T23:37:07.905068Z",
   "deposit_status"=>"failed",
   "attempts"=>0,
   "meta"=>{},
   "id"=>"BZ5kVjKnxh6EKnVBbpkRpUj3"},
   [...]
>

I'm happy to roll my issue up into #275 as long as it results in any way to create a Debit in the testing system whose status is either failed at creation or becomes failed at some (deterministic) point.

mjallday commented 9 years ago

Ah, thanks for the clarification. I'll reopen, I understand now what you're trying to do.

pedelman commented 9 years ago

Might be worth creating a new set of test keys that have a successful verification status but insufficient funds (that is the case I am trying to look out for). Any updates on this?

sophistry commented 9 years ago

:+1:

Another (related) test number would create a bank account that can be correctly verified, set up to accept credits as successful but then fail on the reversals (to model insufficient funds, closed/frozen account, etc...). We've seen that happen quite a bit and it would be nice to have a way to trigger.

ged commented 9 years ago

I would like to be able to use both of the above-mentioned test cases as well.