diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala index 74b39d19bb..b4a96a6d40 100644 --- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala +++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala @@ -5508,6 +5508,9 @@ object SwaggerDefinitionsJSON { val consumerLogoUrlJson = ConsumerLogoUrlJson( "http://localhost:8888" ) + val consumerNameJson = ConsumerNameJson( + "App name" + ) val consumersJsonV510 = ConsumersJsonV510( List(consumerJsonV510) diff --git a/obp-api/src/main/scala/code/api/berlin/group/v1_3/AccountInformationServiceAISApi.scala b/obp-api/src/main/scala/code/api/berlin/group/v1_3/AccountInformationServiceAISApi.scala index 4ab4828c27..5e9d72f76c 100644 --- a/obp-api/src/main/scala/code/api/berlin/group/v1_3/AccountInformationServiceAISApi.scala +++ b/obp-api/src/main/scala/code/api/berlin/group/v1_3/AccountInformationServiceAISApi.scala @@ -704,15 +704,6 @@ where the consent was directly managed between ASPSP and PSU e.g. in a re-direct } - - def tweakStatusNames(status: String) = { - val scaStatus = status - .replace(ConsentStatus.INITIATED.toString, "started") - .replace(ConsentStatus.ACCEPTED.toString, "finalised") - .replace(ConsentStatus.REJECTED.toString, "failed") - scaStatus - } - resourceDocs += ResourceDoc( getConsentScaStatus, apiVersion, diff --git a/obp-api/src/main/scala/code/api/util/APIUtil.scala b/obp-api/src/main/scala/code/api/util/APIUtil.scala index 682c2c4b52..405486d37a 100644 --- a/obp-api/src/main/scala/code/api/util/APIUtil.scala +++ b/obp-api/src/main/scala/code/api/util/APIUtil.scala @@ -3783,7 +3783,7 @@ object APIUtil extends MdcLoggable with CustomJsonFormats{ *A Version 1 UUID is a universally unique identifier that is generated using * a timestamp and the MAC address of the computer on which it was generated. */ - def checkIfStringIsUUIDVersion1(value: String): Boolean = { + def checkIfStringIsUUID(value: String): Boolean = { Pattern.compile("^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$") .matcher(value).matches() } diff --git a/obp-api/src/main/scala/code/api/util/ApiRole.scala b/obp-api/src/main/scala/code/api/util/ApiRole.scala index c2fe897264..1547f0bda8 100644 --- a/obp-api/src/main/scala/code/api/util/ApiRole.scala +++ b/obp-api/src/main/scala/code/api/util/ApiRole.scala @@ -243,6 +243,8 @@ object ApiRole extends MdcLoggable{ case class CanUpdateConsumerLogoUrl(requiresBankId: Boolean = false) extends ApiRole lazy val canUpdateConsumerLogoUrl = CanUpdateConsumerLogoUrl() + case class CanUpdateConsumerName(requiresBankId: Boolean = false) extends ApiRole + lazy val canUpdateConsumerName = CanUpdateConsumerName() case class CanCreateConsumer (requiresBankId: Boolean = false) extends ApiRole lazy val canCreateConsumer = CanCreateConsumer() diff --git a/obp-api/src/main/scala/code/api/util/BerlinGroupCheck.scala b/obp-api/src/main/scala/code/api/util/BerlinGroupCheck.scala index 0d01a58cc1..b4ba2998e7 100644 --- a/obp-api/src/main/scala/code/api/util/BerlinGroupCheck.scala +++ b/obp-api/src/main/scala/code/api/util/BerlinGroupCheck.scala @@ -1,8 +1,9 @@ package code.api.util -import code.api.RequestHeader +import code.api.APIFailureNewStyle +import code.api.util.APIUtil.fullBoxOrException import com.openbankproject.commons.model.User -import net.liftweb.common.{Box, Empty, Failure} +import net.liftweb.common.{Box, Empty} import net.liftweb.http.provider.HTTPParam object BerlinGroupCheck { @@ -27,7 +28,7 @@ object BerlinGroupCheck { if (missingHeaders.isEmpty) { forwardResult // All mandatory headers are present } else { - (Failure(s"Missing mandatory headers: ${missingHeaders.mkString(", ")}"), forwardResult._2) + (fullBoxOrException(Empty ~> APIFailureNewStyle(s"${ErrorMessages.MissingMandatoryBerlinGroupHeaders}(${missingHeaders.mkString(", ")})", 400, forwardResult._2.map(_.toLight))), forwardResult._2) } } diff --git a/obp-api/src/main/scala/code/api/util/ConsentUtil.scala b/obp-api/src/main/scala/code/api/util/ConsentUtil.scala index e94ba0c737..6a05bebe8c 100644 --- a/obp-api/src/main/scala/code/api/util/ConsentUtil.scala +++ b/obp-api/src/main/scala/code/api/util/ConsentUtil.scala @@ -440,7 +440,7 @@ object Consent extends MdcLoggable { } def getConsentJwtValueByConsentId(consentId: String): Option[MappedConsent] = { - APIUtil.checkIfStringIsUUIDVersion1(consentId) match { + APIUtil.checkIfStringIsUUID(consentId) match { case true => // String is a UUID Consents.consentProvider.vend.getConsentByConsentId(consentId) match { case Full(consent) => Some(consent) diff --git a/obp-api/src/main/scala/code/api/util/ErrorMessages.scala b/obp-api/src/main/scala/code/api/util/ErrorMessages.scala index e26922d345..a253d61850 100644 --- a/obp-api/src/main/scala/code/api/util/ErrorMessages.scala +++ b/obp-api/src/main/scala/code/api/util/ErrorMessages.scala @@ -266,6 +266,7 @@ object ErrorMessages { val Oauth2ValidateAccessTokenError = "OBP-20215: There was a problem validating the OAuth2 access token. " val AuthorizationHeaderAmbiguity = "OBP-20250: Request headers used for authorization are ambiguous. " + val MissingMandatoryBerlinGroupHeaders= "OBP-20251: Missing mandatory request headers. " // X.509 val X509GeneralError = "OBP-20300: PEM Encoded Certificate issue." diff --git a/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala b/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala index d4e0518d4f..b7bf2973a1 100644 --- a/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala +++ b/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala @@ -8188,12 +8188,12 @@ trait APIMethods400 extends MdcLoggable { } } staticResourceDocs += ResourceDoc( - getConsentInfos, + getConsentInfosByBank, implementedInApiVersion, - nameOf(getConsentInfos), + nameOf(getConsentInfosByBank), "GET", "/banks/BANK_ID/my/consent-infos", - "Get My Consents Info", + "Get My Consents Info By Bank", s""" | |This endpoint gets the Consents that the current User created. @@ -8210,7 +8210,7 @@ trait APIMethods400 extends MdcLoggable { ), List(apiTagConsent, apiTagPSD2AIS, apiTagPsd2)) - lazy val getConsentInfos: OBPEndpoint = { + lazy val getConsentInfosByBank: OBPEndpoint = { case "banks" :: BankId(bankId) :: "my" :: "consent-infos" :: Nil JsonGet _ => { cc => implicit val ec = EndpointContext(Some(cc)) for { @@ -8224,6 +8224,42 @@ trait APIMethods400 extends MdcLoggable { } } + staticResourceDocs += ResourceDoc( + getConsentInfos, + implementedInApiVersion, + nameOf(getConsentInfos), + "GET", + "/my/consent-infos", + "Get My Consents Info", + s""" + | + |This endpoint gets the Consents that the current User created. + | + |${userAuthenticationMessage(true)} + | + """.stripMargin, + EmptyBody, + consentInfosJsonV400, + List( + $UserNotLoggedIn, + $BankNotFound, + UnknownError + ), + List(apiTagConsent, apiTagPSD2AIS, apiTagPsd2)) + + lazy val getConsentInfos: OBPEndpoint = { + case "my" :: "consent-infos" :: Nil JsonGet _ => { + cc => implicit val ec = EndpointContext(Some(cc)) + for { + consents <- Future { Consents.consentProvider.vend.getConsentsByUser(cc.userId) + .sortBy(i => (i.creationDateTime, i.apiStandard)).reverse + } + } yield { + (JSONFactory400.createConsentInfosJsonV400(consents), HttpCode.`200`(cc)) + } + } + } + staticResourceDocs += ResourceDoc( getMyPersonalUserAttributes, implementedInApiVersion, diff --git a/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala b/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala index eb7805c7a0..4dc6f7d08f 100644 --- a/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala +++ b/obp-api/src/main/scala/code/api/v5_1_0/APIMethods510.scala @@ -1518,12 +1518,12 @@ trait APIMethods510 { staticResourceDocs += ResourceDoc( - getMyConsents, + getMyConsentsByBank, implementedInApiVersion, - nameOf(getMyConsents), + nameOf(getMyConsentsByBank), "GET", "/banks/BANK_ID/my/consents", - "Get My Consents", + "Get My Consents at Bank", s""" | |This endpoint gets the Consents created by a current User. @@ -1540,7 +1540,7 @@ trait APIMethods510 { ), List(apiTagConsent, apiTagPSD2AIS, apiTagPsd2)) - lazy val getMyConsents: OBPEndpoint = { + lazy val getMyConsentsByBank: OBPEndpoint = { case "banks" :: BankId(bankId) :: "my" :: "consents" :: Nil JsonGet _ => { cc => implicit val ec = EndpointContext(Some(cc)) @@ -1556,6 +1556,44 @@ trait APIMethods510 { } } + staticResourceDocs += ResourceDoc( + getMyConsents, + implementedInApiVersion, + nameOf(getMyConsents), + "GET", + "/my/consents", + "Get My Consents", + s""" + | + |This endpoint gets the Consents created by a current User. + | + |${userAuthenticationMessage(true)} + | + """.stripMargin, + EmptyBody, + consentsJsonV400, + List( + $UserNotLoggedIn, + $BankNotFound, + UnknownError + ), + List(apiTagConsent, apiTagPSD2AIS, apiTagPsd2)) + + lazy val getMyConsents: OBPEndpoint = { + case "my" :: "consents" :: Nil JsonGet _ => { + cc => + implicit val ec = EndpointContext(Some(cc)) + for { + consents <- Future { + Consents.consentProvider.vend.getConsentsByUser(cc.userId) + .sortBy(i => (i.creationDateTime, i.apiStandard)).reverse + } + } yield { + (createConsentsInfoJsonV510(consents), HttpCode.`200`(cc)) + } + } + } + staticResourceDocs += ResourceDoc( getConsentsAtBank, @@ -3160,6 +3198,53 @@ trait APIMethods510 { } } + staticResourceDocs += ResourceDoc( + updateConsumerName, + implementedInApiVersion, + nameOf(updateConsumerName), + "PUT", + "/management/consumers/CONSUMER_ID/consumer/name", + "Update Consumer Name", + s"""Update an existing name for a Consumer specified by CONSUMER_ID. + | + | ${consumerDisabledText()} + | + | CONSUMER_ID can be obtained after you register the application. + | + | Or use the endpoint 'Get Consumers' to get it + | + """.stripMargin, + consumerNameJson, + consumerJsonV510, + List( + $UserNotLoggedIn, + UserHasMissingRoles, + UnknownError + ), + List(apiTagConsumer), + Some(List(canUpdateConsumerName)) + ) + + lazy val updateConsumerName: OBPEndpoint = { + case "management" :: "consumers" :: consumerId :: "consumer" :: "name" :: Nil JsonPut json -> _ => { + cc => + implicit val ec = EndpointContext(Some(cc)) + for { + postJson <- NewStyle.function.tryons(InvalidJsonFormat, 400, cc.callContext) { + json.extract[ConsumerNameJson] + } + consumer <- NewStyle.function.getConsumerByConsumerId(consumerId, cc.callContext) + updatedConsumer <- NewStyle.function.updateConsumer( + id = consumer.id.get, + name = Some(postJson.app_name), + callContext = cc.callContext + ) + } yield { + (JSONFactory510.createConsumerJSON(updatedConsumer), HttpCode.`200`(cc.callContext)) + } + } + } + staticResourceDocs += ResourceDoc( getConsumer, diff --git a/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala b/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala index 975ef6e811..4c29a54c69 100644 --- a/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala +++ b/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala @@ -559,6 +559,7 @@ case class APITags( case class ConsumerLogoUrlJson( logo_url: String ) +case class ConsumerNameJson(app_name: String) case class TransactionRequestJsonV510( transaction_request_id: String, diff --git a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala index caffed20b4..b9e27ab9a9 100644 --- a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala +++ b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala @@ -897,10 +897,31 @@ object LocalMappedConnector extends Connector with MdcLoggable { } } - def getBankAccountCommon(bankId: BankId, accountId: AccountId, callContext: Option[CallContext]) = { - MappedBankAccount - .find(By(MappedBankAccount.bank, bankId.value), By(MappedBankAccount.theAccountId, accountId.value)) - .map(bankAccount => (bankAccount, callContext)) + def getBankAccountCommon(bankId: BankId, accountId: AccountId, callContext: Option[CallContext]): Box[(MappedBankAccount, Option[CallContext])] = { + + def getByBankAndAccount(): Box[(MappedBankAccount, Option[CallContext])] = { + MappedBankAccount + .find(By(MappedBankAccount.bank, bankId.value), By(MappedBankAccount.theAccountId, accountId.value)) + .map(bankAccount => (bankAccount, callContext)) + } + + if(APIUtil.checkIfStringIsUUID(accountId.value)) { + // Find bank accounts by accountId first + val bankAccounts = MappedBankAccount.findAll(By(MappedBankAccount.theAccountId, accountId.value)) + + // If exactly one account is found, return it, else filter by bankId + bankAccounts match { + case account :: Nil => + // If exactly one account is found, return it + Some(account, callContext) + case _ => + // If multiple or no accounts are found, filter by bankId + getByBankAndAccount() + } + } else { + getByBankAndAccount() + } + } override def getBankAccounts(bankIdAccountIds: List[BankIdAccountId], callContext: Option[CallContext]): OBPReturnType[Box[List[BankAccount]]] = { diff --git a/obp-api/src/test/resources/frozen_type_meta_data b/obp-api/src/test/resources/frozen_type_meta_data index 74b0167d2c..eb1e8a02f7 100644 Binary files a/obp-api/src/test/resources/frozen_type_meta_data and b/obp-api/src/test/resources/frozen_type_meta_data differ diff --git a/obp-api/src/test/scala/code/api/v5_1_0/ConsentsTest.scala b/obp-api/src/test/scala/code/api/v5_1_0/ConsentsTest.scala index c8f7750258..01bd74e7f3 100644 --- a/obp-api/src/test/scala/code/api/v5_1_0/ConsentsTest.scala +++ b/obp-api/src/test/scala/code/api/v5_1_0/ConsentsTest.scala @@ -65,7 +65,8 @@ class ConsentsTest extends V510ServerSetup with PropsReset{ object ApiEndpoint5 extends Tag(nameOf(Implementations4_0_0.getUsers)) object ApiEndpoint6 extends Tag(nameOf(Implementations5_1_0.revokeConsentAtBank)) object ApiEndpoint7 extends Tag(nameOf(Implementations5_1_0.getConsentByConsentId)) - object ApiEndpoint8 extends Tag(nameOf(Implementations5_1_0.getMyConsents)) + object ApiEndpoint8 extends Tag(nameOf(Implementations5_1_0.getMyConsentsByBank)) + object getMyConsents extends Tag(nameOf(Implementations5_1_0.getMyConsents)) object ApiEndpoint9 extends Tag(nameOf(Implementations5_1_0.getConsentsAtBank)) object GetConsents extends Tag(nameOf(Implementations5_1_0.getConsents)) object UpdateConsentStatusByConsent extends Tag(nameOf(Implementations5_1_0.updateConsentStatusByConsent)) @@ -92,7 +93,8 @@ class ConsentsTest extends V510ServerSetup with PropsReset{ def getConsentByRequestIdUrl(requestId:String) = (v5_1_0_Request / "consumer"/ "consent-requests"/requestId/"consents").GET<@(user1) def getConsentByIdUrl(requestId:String) = (v5_1_0_Request / "consumer" / "current" / "consents" / requestId ).GET<@(user1) def revokeConsentUrl(consentId: String) = (v5_1_0_Request / "banks" / bankId / "consents" / consentId).DELETE - def getMyConsents(consentId: String) = (v5_1_0_Request / "banks" / bankId / "my" / "consents").GET + def getMyConsentAtBank(consentId: String) = (v5_1_0_Request / "banks" / bankId / "my" / "consents").GET + def getMyConsent(consentId: String) = (v5_1_0_Request / "my" / "consents").GET def getConsentsAtBAnk(consentId: String) = (v5_1_0_Request / "management"/ "consents" / "banks" / bankId).GET def getConsents(consentId: String) = (v5_1_0_Request / "management"/ "consents").GET def updateConsentStatusByConsent(consentId: String) = (v5_1_0_Request / "management" / "banks" / bankId / "consents" / consentId).PUT @@ -120,7 +122,7 @@ class ConsentsTest extends V510ServerSetup with PropsReset{ feature(s"test $ApiEndpoint8 version $VersionOfApi - Unautenticated access") { scenario("We will call the endpoint without user credentials", ApiEndpoint8, VersionOfApi) { When(s"We make a request $ApiEndpoint8") - val response510 = makeGetRequest(getMyConsents("whatever")) + val response510 = makeGetRequest(getMyConsentAtBank("whatever")) Then("We should get a 401") response510.code should equal(401) response510.body.extract[ErrorMessage].message should equal(UserNotLoggedIn) @@ -129,7 +131,25 @@ class ConsentsTest extends V510ServerSetup with PropsReset{ feature(s"test $ApiEndpoint8 version $VersionOfApi - Autenticated access") { scenario("We will call the endpoint with user credentials", ApiEndpoint8, VersionOfApi) { When(s"We make a request $ApiEndpoint1") - val response510 = makeGetRequest(getMyConsents("whatever")<@(user1)) + val response510 = makeGetRequest(getMyConsentAtBank("whatever")<@(user1)) + Then("We should get a 200") + response510.code should equal(200) + } + } + + feature(s"test $getMyConsents version $VersionOfApi - Unautenticated access") { + scenario("We will call the endpoint without user credentials", getMyConsents, VersionOfApi) { + When(s"We make a request $getMyConsents") + val response510 = makeGetRequest(getMyConsent("whatever")) + Then("We should get a 401") + response510.code should equal(401) + response510.body.extract[ErrorMessage].message should equal(UserNotLoggedIn) + } + } + feature(s"test $getMyConsents version $VersionOfApi - Autenticated access") { + scenario("We will call the endpoint with user credentials", getMyConsents, VersionOfApi) { + When(s"We make a request $ApiEndpoint1") + val response510 = makeGetRequest(getMyConsent("whatever")<@(user1)) Then("We should get a 200") response510.code should equal(200) } diff --git a/obp-api/src/test/scala/code/api/v5_1_0/ConsumerTest.scala b/obp-api/src/test/scala/code/api/v5_1_0/ConsumerTest.scala index 1cd92b42b1..4fa77c7954 100644 --- a/obp-api/src/test/scala/code/api/v5_1_0/ConsumerTest.scala +++ b/obp-api/src/test/scala/code/api/v5_1_0/ConsumerTest.scala @@ -27,7 +27,7 @@ package code.api.v5_1_0 import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON import code.api.util.APIUtil.OAuth._ -import code.api.util.ApiRole.{canCreateConsumer, canGetConsumers, canUpdateConsumerLogoUrl, canUpdateConsumerRedirectUrl} +import code.api.util.ApiRole.{canCreateConsumer, canGetConsumers, canUpdateConsumerLogoUrl, canUpdateConsumerName, canUpdateConsumerRedirectUrl} import code.api.util.ErrorMessages.{InvalidJsonFormat, UserNotLoggedIn} import code.api.v3_1_0.ConsumerJsonV310 import code.api.v5_1_0.OBPAPI5_1_0.Implementations5_1_0 @@ -51,10 +51,11 @@ class ConsumerTest extends V510ServerSetup { object ApiEndpoint2 extends Tag(nameOf(Implementations5_1_0.getConsumers)) object ApiEndpoint3 extends Tag(nameOf(Implementations5_1_0.updateConsumerRedirectURL)) object ApiEndpoint4 extends Tag(nameOf(Implementations5_1_0.updateConsumerLogoURL)) + object UpdateConsumerName extends Tag(nameOf(Implementations5_1_0.updateConsumerName)) object GetConsumer extends Tag(nameOf(Implementations5_1_0.getConsumer)) feature("Test all error cases ") { - scenario("We test the authentication errors", GetConsumer, ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, ApiEndpoint4, VersionOfApi) { + scenario("We test the authentication errors", UpdateConsumerName, GetConsumer, ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, ApiEndpoint4, VersionOfApi) { When("We make a request v5.1.0") lazy val postApiCollectionJson = SwaggerDefinitionsJSON.postApiCollectionJson400 val requestApiEndpoint1 = (v5_1_0_Request / "management" / "consumers").POST @@ -69,6 +70,9 @@ class ConsumerTest extends V510ServerSetup { val requestApiEndpoint4 = (v5_1_0_Request /"management" / "consumers" / "CONSUMER_ID" / "consumer" / "logo_url").PUT val responseApiEndpoint4 = makePutRequest(requestApiEndpoint4, write(postApiCollectionJson)) + val requestApiUpdateConsumerName = (v5_1_0_Request /"management" / "consumers" / "CONSUMER_ID" / "consumer" / "name").PUT + val responseApiUpdateConsumerName = makePutRequest(requestApiUpdateConsumerName, write(postApiCollectionJson)) + Then(s"we should get the error messages") responseApiEndpoint1.code should equal(401) responseApiEndpoint2.code should equal(401) @@ -79,6 +83,9 @@ class ConsumerTest extends V510ServerSetup { responseApiEndpoint3.body.toString contains(s"$UserNotLoggedIn") should be (true) responseApiEndpoint4.body.toString contains(s"$UserNotLoggedIn") should be (true) + responseApiUpdateConsumerName.code should equal(401) + responseApiUpdateConsumerName.body.toString contains(s"$UserNotLoggedIn") should be (true) + // Endpoint GetConsumer val requestApiEndpoint5 = (v5_1_0_Request / "management" / "consumers" / "whatever").GET val responseApiEndpoint5 = makeGetRequest(requestApiEndpoint5) @@ -86,7 +93,7 @@ class ConsumerTest extends V510ServerSetup { responseApiEndpoint5.body.toString contains(s"$UserNotLoggedIn") should be (true) } - scenario("We test the missing roles errors", GetConsumer, ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, ApiEndpoint4, VersionOfApi) { + scenario("We test the missing roles errors", UpdateConsumerName, GetConsumer, ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, ApiEndpoint4, VersionOfApi) { When("We make a request v5.1.0") lazy val wrongJsonForTesting = SwaggerDefinitionsJSON.routing @@ -101,6 +108,9 @@ class ConsumerTest extends V510ServerSetup { val requestApiEndpoint4 = (v5_1_0_Request /"management" / "consumers" / "CONSUMER_ID" / "consumer" / "logo_url").PUT<@ (user1) val responseApiEndpoint4 = makePutRequest(requestApiEndpoint4, write(wrongJsonForTesting)) + + val requestApiUpdateConsumerName = (v5_1_0_Request /"management" / "consumers" / "CONSUMER_ID" / "consumer" / "name").PUT<@ (user1) + val responseApiUpdateConsumerName = makePutRequest(requestApiUpdateConsumerName, write(wrongJsonForTesting)) Then(s"we should get the error messages") responseApiEndpoint1.code should equal(403) @@ -111,6 +121,8 @@ class ConsumerTest extends V510ServerSetup { responseApiEndpoint3.body.toString contains(s"$canUpdateConsumerRedirectUrl") should be (true) responseApiEndpoint4.code should equal(403) responseApiEndpoint4.body.toString contains(s"$canUpdateConsumerLogoUrl") should be (true) + responseApiUpdateConsumerName.code should equal(403) + responseApiUpdateConsumerName.body.toString contains(s"$canUpdateConsumerName") should be (true) // Endpoint GetConsumer val requestApiEndpoint5 = (v5_1_0_Request / "management" / "consumers" / "whatever").GET <@ user1 @@ -119,12 +131,13 @@ class ConsumerTest extends V510ServerSetup { responseApiEndpoint5.body.toString contains (s"$canGetConsumers") should be(true) } - scenario("We added the proper roles, but wrong json", ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, ApiEndpoint4, VersionOfApi) { + scenario("We added the proper roles, but wrong json", UpdateConsumerName, ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, ApiEndpoint4, VersionOfApi) { When("we first grant the missing roles:") Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canCreateConsumer.toString) Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canUpdateConsumerLogoUrl.toString) Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canUpdateConsumerRedirectUrl.toString) - + Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canUpdateConsumerName.toString) + When("We make a request v5.1.0") lazy val wrongJsonForTesting = SwaggerDefinitionsJSON.postApiCollectionJson400 val requestApiEndpoint1 = (v5_1_0_Request / "management" / "consumers").POST<@ (user1) @@ -135,7 +148,10 @@ class ConsumerTest extends V510ServerSetup { val requestApiEndpoint4 = (v5_1_0_Request /"management" / "consumers" / "CONSUMER_ID" / "consumer" / "logo_url").PUT<@ (user1) val responseApiEndpoint4 = makePutRequest(requestApiEndpoint4, write(wrongJsonForTesting)) - + + val requestApiUpdateConsumerName = (v5_1_0_Request / "management" / "consumers" / "CONSUMER_ID" / "consumer" / "name").PUT <@ (user1) + val responseApiUpdateConsumerName = makePutRequest(requestApiUpdateConsumerName, write(wrongJsonForTesting)) + Then(s"we should get the error messages") responseApiEndpoint1.code should equal(400) responseApiEndpoint1.body.toString contains(s"$InvalidJsonFormat") should be (true) @@ -143,21 +159,25 @@ class ConsumerTest extends V510ServerSetup { responseApiEndpoint3.body.toString contains(s"$InvalidJsonFormat") should be (true) responseApiEndpoint4.code should equal(400) responseApiEndpoint4.body.toString contains(s"$InvalidJsonFormat") should be (true) + responseApiUpdateConsumerName.code should equal(400) + responseApiUpdateConsumerName.body.toString contains(s"$InvalidJsonFormat") should be (true) } } feature(s"test all successful cases") { - scenario("we create, update and get consumers", GetConsumer, ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, ApiEndpoint4, VersionOfApi) { + scenario("we create, update and get consumers", UpdateConsumerName, GetConsumer, ApiEndpoint1, ApiEndpoint2, ApiEndpoint3, ApiEndpoint4, VersionOfApi) { When("we first grant the missing roles:") Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canCreateConsumer.toString) Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canGetConsumers.toString) Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canUpdateConsumerLogoUrl.toString) Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canUpdateConsumerRedirectUrl.toString) + Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canUpdateConsumerName.toString) lazy val createConsumerRequestJsonV510 = SwaggerDefinitionsJSON.createConsumerRequestJsonV510 lazy val consumerRedirectUrlJSON = SwaggerDefinitionsJSON.consumerRedirectUrlJSON lazy val consumerLogoUrlJson = SwaggerDefinitionsJSON.consumerLogoUrlJson + lazy val consumerNameJson = SwaggerDefinitionsJSON.consumerNameJson val requestApiEndpoint1 = (v5_1_0_Request / "management" / "consumers").POST<@ (user1) val responseApiEndpoint1 = makePostRequest(requestApiEndpoint1, write(createConsumerRequestJsonV510)) val consumerId = responseApiEndpoint1.body.extract[ConsumerJsonV510].consumer_id @@ -175,6 +195,11 @@ class ConsumerTest extends V510ServerSetup { val responseApiEndpoint4 = makePutRequest(requestApiEndpoint4, write(consumerLogoUrlJson)) val logoUrl = responseApiEndpoint4.body.extract[ConsumerJsonV510].logo_url logoUrl.head shouldBe(consumerLogoUrlJson.logo_url) + + val requestApiUpdateConsumerName = (v5_1_0_Request /"management" / "consumers" / consumerId / "consumer" / "name").PUT<@ (user1) + val responseApiUpdateConsumerName = makePutRequest(requestApiUpdateConsumerName, write(consumerNameJson)) + val name = responseApiUpdateConsumerName.body.extract[ConsumerJsonV510].app_name + name shouldBe(consumerNameJson.app_name) Then(s"we should get the error messages") responseApiEndpoint1.code should equal(201)