From d2498e0bc93e0ab2501f660a7c713bf4df878464 Mon Sep 17 00:00:00 2001 From: Everett Sochowski Date: Thu, 10 Apr 2014 18:24:42 +0200 Subject: [PATCH] Implement test to check that payments between accounts with different currencies fail --- src/test/scala/code/api/API121Test.scala | 137 +++++++++++++++++----- src/test/scala/code/api/ServerSetup.scala | 2 +- 2 files changed, 108 insertions(+), 31 deletions(-) diff --git a/src/test/scala/code/api/API121Test.scala b/src/test/scala/code/api/API121Test.scala index 0c16f8902..18d06ca9d 100644 --- a/src/test/scala/code/api/API121Test.scala +++ b/src/test/scala/code/api/API121Test.scala @@ -51,12 +51,13 @@ import java.util.Date import code.model.TokenType._ import scala.util.Random._ import code.model.{Consumer => OBPConsumer, Token => OBPToken, ViewUpdateData, View, ViewCreationJSON, BankAccount} -import code.model.dataAccess.{APIUser, HostedAccount, ViewImpl, ViewPrivileges, Account, LocalStorage, OBPEnvelope} +import code.model.dataAccess.{APIUser, HostedAccount, ViewImpl, ViewPrivileges, Account, LocalStorage, OBPEnvelope, HostedBank} import code.api.test.{ServerSetup, APIResponse} import code.util.APIUtil.OAuth._ import code.model.ViewCreationJSON import net.liftweb.json.JsonAST.JString import code.api.v1_2_1.OBPAPI1_2_1.MakeTransactionJson +import org.bson.types.ObjectId class API1_2_1Test extends ServerSetup{ @@ -734,19 +735,60 @@ class API1_2_1Test extends ServerSetup{ } feature("we can make payments") { + + def paymentTestBank = HostedBank.createRecord. + name(randomString(5)). + alias(randomString(5)). + permalink("payments-test-bank"). + national_identifier(randomString(5)). + save + + def createAccount(bankMongoId : String, accountPermalink : String, currency : String) = { + + val created = Account.createRecord. + balance(1000). + holder(randomString(4)). + number(randomString(4)). + kind(randomString(4)). + name(randomString(4)). + permalink(accountPermalink). + bankID(new ObjectId(bankMongoId)). + label(randomString(4)). + currency(currency). + save + + val hostedAccount = HostedAccount. + create. + accountID(created.id.get.toString). + saveMe + + val owner = ownerView(hostedAccount) + + //give to user1 owner view + ViewPrivileges.create. + view(owner). + user(obpuser1). + save + + created + } + + val view = "owner" + scenario("we make a payment", Payments) { - val bankId = randomBank - val acc1 = randomPrivateAccount(bankId) - val acc2 = privateAccountThatsNot(bankId, acc1.id) - - val view = "owner" + val testBank = paymentTestBank + val bankMongoId = testBank.id.get.toString + val bankId = testBank.permalink.get + val acc1 = createAccount(bankMongoId, "__acc1", "EUR") + val acc2 = createAccount(bankMongoId, "__acc2", "EUR") + def getFromAccount : BankAccount = { - BankAccount(bankId, acc1.id).getOrElse(fail("couldn't get from account")) + BankAccount(bankId, acc1.permalink.get).getOrElse(fail("couldn't get from account")) } def getToAccount : BankAccount = { - BankAccount(bankId, acc2.id).getOrElse(fail("couldn't get to account")) + BankAccount(bankId, acc2.permalink.get).getOrElse(fail("couldn't get to account")) } val fromAccount = getFromAccount @@ -807,17 +849,19 @@ class API1_2_1Test extends ServerSetup{ scenario("we can't make a payment of zero units of currency", Payments) { When("we try to make a payment with amount = 0") - val bankId = randomBank - val acc1 = randomPrivateAccount(bankId) - val acc2 = privateAccountThatsNot(bankId, acc1.id) - val view = "owner" + val testBank = paymentTestBank + val bankMongoId = testBank.id.get.toString + val bankId = testBank.permalink.get + val acc1 = createAccount(bankMongoId, "__acc1", "EUR") + val acc2 = createAccount(bankMongoId, "__acc2", "EUR") + def getFromAccount : BankAccount = { - BankAccount(bankId, acc1.id).getOrElse(fail("couldn't get from account")) + BankAccount(bankId, acc1.permalink.get).getOrElse(fail("couldn't get from account")) } def getToAccount : BankAccount = { - BankAccount(bankId, acc2.id).getOrElse(fail("couldn't get to account")) + BankAccount(bankId, acc2.permalink.get).getOrElse(fail("couldn't get to account")) } val fromAccount = getFromAccount @@ -845,19 +889,21 @@ class API1_2_1Test extends ServerSetup{ } scenario("we can't make a payment with a negative amount of money", Payments) { + + val testBank = paymentTestBank + val bankMongoId = testBank.id.get.toString + val bankId = testBank.permalink.get + val acc1 = createAccount(bankMongoId, "__acc1", "EUR") + val acc2 = createAccount(bankMongoId, "__acc2", "EUR") + When("we try to make a payment with amount < 0") - val bankId = randomBank - val acc1 = randomPrivateAccount(bankId) - val acc2 = privateAccountThatsNot(bankId, acc1.id) - - val view = "owner" def getFromAccount : BankAccount = { - BankAccount(bankId, acc1.id).getOrElse(fail("couldn't get from account")) + BankAccount(bankId, acc1.permalink.get).getOrElse(fail("couldn't get from account")) } def getToAccount : BankAccount = { - BankAccount(bankId, acc2.id).getOrElse(fail("couldn't get to account")) + BankAccount(bankId, acc2.permalink.get).getOrElse(fail("couldn't get to account")) } val fromAccount = getFromAccount @@ -885,14 +931,16 @@ class API1_2_1Test extends ServerSetup{ } scenario("we can't make a payment to an account that doesn't exist", Payments) { - When("we try to make a payment to an account that doesn't exist") - val bankId = randomBank - val acc1 = randomPrivateAccount(bankId) - val acc2 = "SOMETHINGTHATDOESNOTEXIST123245453545" - val view = "owner" + val testBank = paymentTestBank + val bankMongoId = testBank.id.get.toString + val bankId = testBank.permalink.get + val acc1 = createAccount(bankMongoId, "__acc1", "EUR") + + When("we try to make a payment to an account that doesn't exist") + def getFromAccount : BankAccount = { - BankAccount(bankId, acc1.id).getOrElse(fail("couldn't get from account")) + BankAccount(bankId, acc1.permalink.get).getOrElse(fail("couldn't get from account")) } val fromAccount = getFromAccount @@ -903,7 +951,7 @@ class API1_2_1Test extends ServerSetup{ val amt = BigDecimal("17.30") - val payJson = MakeTransactionJson(bankId, acc2, amt.toString) + val payJson = MakeTransactionJson(bankId, "ACCOUNTTHATDOESNOTEXIST232321321", amt.toString) val postResult = postTransaction(fromAccount.bankPermalink, fromAccount.permalink, view, payJson, user1) Then("we should get a 400") @@ -917,14 +965,43 @@ class API1_2_1Test extends ServerSetup{ } scenario("we can't make a payment between accounts with different currencies", Payments) { - fail("Test not implemented") When("we try to make a payment to an account that has a different currency") - + val testBank = paymentTestBank + val bankMongoId = testBank.id.get.toString + val bankId = testBank.permalink.get + val acc1 = createAccount(bankMongoId, "__acc1", "EUR") + val acc2 = createAccount(bankMongoId, "__acc2", "GBP") + + def getFromAccount : BankAccount = { + BankAccount(bankId, acc1.permalink.get).getOrElse(fail("couldn't get from account")) + } + + def getToAccount : BankAccount = { + BankAccount(bankId, acc2.permalink.get).getOrElse(fail("couldn't get to account")) + } + + val fromAccount = getFromAccount + val toAccount = getToAccount + + val totalTransactionsBefore = OBPEnvelope.count + + val beforeFromBalance = fromAccount.balance + val beforeToBalance = toAccount.balance + + val amt = BigDecimal("4.95") + + val payJson = MakeTransactionJson(toAccount.bankPermalink, toAccount.permalink, amt.toString) + val postResult = postTransaction(fromAccount.bankPermalink, fromAccount.permalink, view, payJson, user1) + Then("we should get a 400") + postResult.code should equal(400) And("the number of transactions for each account should remain unchanged") + totalTransactionsBefore should equal(OBPEnvelope.count) And("the balances of each account should remain unchanged") + beforeFromBalance should equal(fromAccount.balance) + beforeToBalance should equal(toAccount.balance) } } diff --git a/src/test/scala/code/api/ServerSetup.scala b/src/test/scala/code/api/ServerSetup.scala index 3923b194e..bf64e3616 100644 --- a/src/test/scala/code/api/ServerSetup.scala +++ b/src/test/scala/code/api/ServerSetup.scala @@ -302,7 +302,7 @@ trait ServerSetup extends FeatureSpec canAddWhereTag_(true). canSeeWhereTag_(true). canDeleteWhereTag_(true). - save + saveMe def publicView(account: HostedAccount) = ViewImpl.create.