diff --git a/src/main/scala/code/model/dataAccess/Connectors.scala b/src/main/scala/code/model/dataAccess/Connectors.scala index cd10478e2..76f2d0a21 100644 --- a/src/main/scala/code/model/dataAccess/Connectors.scala +++ b/src/main/scala/code/model/dataAccess/Connectors.scala @@ -638,12 +638,17 @@ class MongoDBLocalStorage extends LocalStorage { } def createView(bankAccount: BankAccount, view: ViewCreationJSON): Box[View] = { - def generatePermalink(name: String): String = { - name.replaceAllLiterally(" ","").toLowerCase + val newViewPermalink = { + view.name.replaceAllLiterally(" ","").toLowerCase } - if(view.name=="Owner") - Failure("There is already an Owner view on this bank account") + val hostedAccount = HostedAccount.find(By(HostedAccount.accountID,bankAccount.id)) + val existing = ViewImpl.find( + By(ViewImpl.permalink_, newViewPermalink), + By(ViewImpl.account, hostedAccount)) + + if(existing.isDefined) + Failure(s"There is already a view with permalink $newViewPermalink on this bank account") else for{ account <- HostedAccount.find(By(HostedAccount.accountID,bankAccount.id)) @@ -651,7 +656,7 @@ class MongoDBLocalStorage extends LocalStorage { val createdView = ViewImpl.create. name_(view.name). description_(view.description). - permalink_(generatePermalink(view.name)). + permalink_(newViewPermalink). isPublic_(view.is_public). account(account) diff --git a/src/test/scala/code/api/API121Test.scala b/src/test/scala/code/api/API121Test.scala index d90d68331..ffded5182 100644 --- a/src/test/scala/code/api/API121Test.scala +++ b/src/test/scala/code/api/API121Test.scala @@ -971,6 +971,20 @@ class API1_2_1Test extends ServerSetup{ And("we should get an error message") reply.body.extract[ErrorMessage].error.nonEmpty should equal (true) } + + scenario("We will not create a view because the view already exists", API1_2, PostView) { + Given("We will use an access token") + val bankId = randomBank + val bankAccount : AccountJSON = randomPrivateAccount(bankId) + val view = randomView(true, "") + postView(bankId, bankAccount.id, view, user1) + When("the request is sent") + val reply = postView(bankId, bankAccount.id, view, user1) + Then("we should get a 400 code") + reply.code should equal (400) + And("we should get an error message") + reply.body.extract[ErrorMessage].error.nonEmpty should equal (true) + } } feature("Delete a view on a bank account"){ diff --git a/src/test/scala/code/api/API12Test.scala b/src/test/scala/code/api/API12Test.scala index df0b8bf32..2e902ee0b 100644 --- a/src/test/scala/code/api/API12Test.scala +++ b/src/test/scala/code/api/API12Test.scala @@ -967,6 +967,20 @@ class API1_2Test extends ServerSetup{ And("we should get an error message") reply.body.extract[ErrorMessage].error.nonEmpty should equal (true) } + + scenario("We will not create a view because the view already exists", API1_2, PostView) { + Given("We will use an access token") + val bankId = randomBank + val bankAccount : AccountJSON = randomPrivateAccount(bankId) + val view = randomView(true, "") + postView(bankId, bankAccount.id, view, user1) + When("the request is sent") + val reply = postView(bankId, bankAccount.id, view, user1) + Then("we should get a 400 code") + reply.code should equal (400) + And("we should get an error message") + reply.body.extract[ErrorMessage].error.nonEmpty should equal (true) + } } feature("Delete a view on a bank account"){