diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/MessageDocsSwaggerDefinitions.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/MessageDocsSwaggerDefinitions.scala index 51087f681..79069feb6 100644 --- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/MessageDocsSwaggerDefinitions.scala +++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/MessageDocsSwaggerDefinitions.scala @@ -95,10 +95,11 @@ object MessageDocsSwaggerDefinitions val inboundStatusMessage = InboundStatusMessage( - source ="String", - status ="String", - errorCode ="String", - text= "String" + source = sourceExample.value, + status = statusExample.value, + errorCode = errorCodeExample.value, + text = textExample.value, + duration= Some(durationExample.value), ) val inboundStatus = Status("Status errorCode", List(inboundStatusMessage)) @@ -109,8 +110,8 @@ object MessageDocsSwaggerDefinitions errorCode ="", backendMessages = List(inboundStatusMessage), name = usernameExample.value, - version = "", - git_commit = "String", + version = versionExample.value, + git_commit = gitCommitExample.value, date = DateWithMsExampleString ) 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 28d98c3be..653b2d60c 100644 --- a/obp-api/src/main/scala/code/api/util/ApiRole.scala +++ b/obp-api/src/main/scala/code/api/util/ApiRole.scala @@ -355,6 +355,12 @@ object ApiRole { case class CanGetConfig(requiresBankId: Boolean = false) extends ApiRole lazy val canGetConfig = CanGetConfig() + case class CanGetAdapterInfo(requiresBankId: Boolean = false) extends ApiRole + lazy val canGetAdapterInfo = CanGetAdapterInfo() + + case class CanGetAdapterInfoAtOneBank(requiresBankId: Boolean = false) extends ApiRole + lazy val canGetAdapterInfoAtOneBank = CanGetAdapterInfoAtOneBank() + case class CanGetDatabaseInfo(requiresBankId: Boolean = false) extends ApiRole lazy val canGetDatabaseInfo = CanGetDatabaseInfo() 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 1f41db8ca..dcd1ea231 100644 --- a/obp-api/src/main/scala/code/api/util/ErrorMessages.scala +++ b/obp-api/src/main/scala/code/api/util/ErrorMessages.scala @@ -287,7 +287,7 @@ object ErrorMessages { val CreateCardError = "OBP-30032: Could not insert the Card" val UpdateCardError = "OBP-30033: Could not update the Card" - val ViewIdNotSupported = "OBP-30034: This ViewId is do not supported. Only support four now: Owner, Accountant, Auditor, StageOne, SmallPaymentVerified, _Public." + val ViewIdNotSupported = "OBP-30034: This ViewId is not supported. Only support four now: Owner, Accountant, Auditor, StageOne, Standard, _Public." val UserCustomerLinkNotFound = "OBP-30035: User Customer Link not found" diff --git a/obp-api/src/main/scala/code/api/util/ExampleValue.scala b/obp-api/src/main/scala/code/api/util/ExampleValue.scala index e777e20c3..6e153f99b 100644 --- a/obp-api/src/main/scala/code/api/util/ExampleValue.scala +++ b/obp-api/src/main/scala/code/api/util/ExampleValue.scala @@ -718,6 +718,12 @@ object ExampleValue { lazy val statusExample = ConnectorField(NoExampleProvided,NoDescriptionProvided) glossaryItems += makeGlossaryItem("status", statusExample) + + lazy val errorCodeExample = ConnectorField(NoExampleProvided,NoDescriptionProvided) + glossaryItems += makeGlossaryItem("errorCode", errorCodeExample) + + lazy val textExample = ConnectorField(NoExampleProvided,NoDescriptionProvided) + glossaryItems += makeGlossaryItem("text", textExample) lazy val canSeeTransactionBalanceExample = ConnectorField(NoExampleProvided,NoDescriptionProvided) glossaryItems += makeGlossaryItem("can_see_transaction_balance", canSeeTransactionBalanceExample) diff --git a/obp-api/src/main/scala/code/api/v3_0_0/APIMethods300.scala b/obp-api/src/main/scala/code/api/v3_0_0/APIMethods300.scala index e47464ef3..37a3c27a7 100644 --- a/obp-api/src/main/scala/code/api/v3_0_0/APIMethods300.scala +++ b/obp-api/src/main/scala/code/api/v3_0_0/APIMethods300.scala @@ -1007,16 +1007,19 @@ trait APIMethods300 { """.stripMargin, emptyObjectJson, adapterInfoJsonV300, - List(UserNotLoggedIn, UnknownError), - List(apiTagApi, apiTagNewStyle)) + List(UserNotLoggedIn, UserHasMissingRoles, UnknownError), + List(apiTagApi, apiTagNewStyle), + Some(List(canGetAdapterInfoAtOneBank)) + ) lazy val getAdapterInfoForBank: OBPEndpoint = { case "banks" :: BankId(bankId) :: "adapter" :: Nil JsonGet _ => { cc => for { - (_, callContext) <- anonymousAccess(cc) + (Full(u), callContext) <- authenticatedAccess(cc) (_, callContext) <- NewStyle.function.getBank(bankId, callContext) + _ <- NewStyle.function.hasEntitlement(bankId.value, u.userId, ApiRole.canGetAdapterInfoAtOneBank, callContext) (ai, callContext) <- NewStyle.function.getAdapterInfo(callContext) } yield { (createAdapterInfoJson(ai), callContext) diff --git a/obp-api/src/main/scala/code/api/v3_1_0/APIMethods310.scala b/obp-api/src/main/scala/code/api/v3_1_0/APIMethods310.scala index 6c56141b7..7a4673397 100644 --- a/obp-api/src/main/scala/code/api/v3_1_0/APIMethods310.scala +++ b/obp-api/src/main/scala/code/api/v3_1_0/APIMethods310.scala @@ -1054,15 +1054,18 @@ trait APIMethods310 { """.stripMargin, emptyObjectJson, adapterInfoJsonV300, - List(UserNotLoggedIn, UnknownError), - List(apiTagApi, apiTagNewStyle)) + List(UserNotLoggedIn,UserHasMissingRoles, UnknownError), + List(apiTagApi, apiTagNewStyle), + Some(List(canGetAdapterInfo)) + ) lazy val getAdapterInfo: OBPEndpoint = { case "adapter" :: Nil JsonGet _ => { cc => for { - (_, callContext) <- anonymousAccess(cc) + (Full(u), callContext) <- authenticatedAccess(cc) + _ <- NewStyle.function.hasEntitlement("", u.userId, ApiRole.canGetAdapterInfo, callContext) (ai,_) <- NewStyle.function.getAdapterInfo(callContext) } yield { (createAdapterInfoJson(ai), HttpCode.`200`(callContext)) diff --git a/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala b/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala index bc65a3dac..2dd674f7c 100644 --- a/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala +++ b/obp-api/src/main/scala/code/api/v5_0_0/APIMethods500.scala @@ -33,7 +33,7 @@ import net.liftweb.http.rest.RestHelper import net.liftweb.json import net.liftweb.json.{Extraction, compactRender, prettyRender} import net.liftweb.util.Helpers.tryo -import net.liftweb.util.Props +import net.liftweb.util.{Helpers, Props} import java.util.concurrent.ThreadLocalRandom import code.accountattribute.AccountAttributeX @@ -1678,6 +1678,36 @@ trait APIMethods500 { } } } + + resourceDocs += ResourceDoc( + getAdapterInfo, + implementedInApiVersion, + nameOf(getAdapterInfo), + "GET", + "/adapter", + "Get Adapter Info", + s"""Get basic information about the Adapter. + | + |${authenticationRequiredMessage(false)} + | + """.stripMargin, + emptyObjectJson, + adapterInfoJsonV300, + List($UserNotLoggedIn, UserHasMissingRoles, UnknownError), + List(apiTagApi, apiTagNewStyle), + Some(List(canGetAdapterInfo)) + ) + lazy val getAdapterInfo: OBPEndpoint = { + case "adapter" :: Nil JsonGet _ => { + cc => + for { + (_, callContext) <- SS.user + (adapterInfo,_) <- NewStyle.function.getAdapterInfo(callContext) + } yield { + (JSONFactory500.createAdapterInfoJson(adapterInfo,cc.startTime.getOrElse(Helpers.now).getTime), HttpCode.`200`(callContext)) + } + } + } } } diff --git a/obp-api/src/main/scala/code/api/v5_0_0/JSONFactory5.0.0.scala b/obp-api/src/main/scala/code/api/v5_0_0/JSONFactory5.0.0.scala index 9382f09ce..8279312df 100644 --- a/obp-api/src/main/scala/code/api/v5_0_0/JSONFactory5.0.0.scala +++ b/obp-api/src/main/scala/code/api/v5_0_0/JSONFactory5.0.0.scala @@ -35,13 +35,14 @@ import code.api.v1_3_0.JSONFactory1_3_0.{cardActionsToString, createAccountJson, import code.api.v1_3_0.{PinResetJSON, ReplacementJSON} import code.api.v1_4_0.JSONFactory1_4_0.CustomerFaceImageJson import code.api.v2_1_0.CustomerCreditRatingJSON -import code.api.v3_0_0.{CustomerAttributeResponseJsonV300, JSONFactory300} +import code.api.v3_0_0.{AdapterInfoJsonV300, CustomerAttributeResponseJsonV300, JSONFactory300} import code.api.v3_1_0.{AccountAttributeResponseJson, AccountBasicV310, CustomerWithAttributesJsonV310, PhysicalCardWithAttributesJsonV310, PostConsentEntitlementJsonV310} import code.api.v4_0_0.BankAttributeBankResponseJsonV400 import code.bankattribute.BankAttribute import code.customeraccountlinks.CustomerAccountLinkTrait -import com.openbankproject.commons.model.{AccountAttribute, AccountRouting, AccountRoutingJsonV121, AmountOfMoneyJsonV121, Bank, BankAccount, CardAttribute, Customer, CustomerAttribute, PhysicalCardTrait, User, UserAuthContext, UserAuthContextUpdate, View, ViewBasic} +import com.openbankproject.commons.model.{AccountAttribute, AccountRouting, AccountRoutingJsonV121, AmountOfMoneyJsonV121, Bank, BankAccount, CardAttribute, Customer, CustomerAttribute, InboundAdapterInfoInternal, InboundStatusMessage, PhysicalCardTrait, User, UserAuthContext, UserAuthContextUpdate, View, ViewBasic} import net.liftweb.json.JsonAST.JValue +import net.liftweb.util.Helpers import scala.collection.immutable import scala.collection.immutable.List @@ -370,6 +371,15 @@ case class CustomerAccountLinksJson( links:List[CustomerAccountLinkJson] ) +case class AdapterInfoJsonV500( + name: String, + version: String, + git_commit: String, + date: String, + total_duration: String, + backend_messages: List[InboundStatusMessage], +) + object JSONFactory500 { @@ -594,6 +604,17 @@ object JSONFactory500 { def createCustomerAccountLinksJon(customerAccountLinks: List[CustomerAccountLinkTrait]): CustomerAccountLinksJson = { CustomerAccountLinksJson(customerAccountLinks.map(createCustomerAccountLinkJson)) + } + + def createAdapterInfoJson(inboundAdapterInfoInternal: InboundAdapterInfoInternal, startTime: Long): AdapterInfoJsonV500 = { + AdapterInfoJsonV500( + name = inboundAdapterInfoInternal.name, + version = inboundAdapterInfoInternal.version, + git_commit = inboundAdapterInfoInternal.git_commit, + date = inboundAdapterInfoInternal.date, + total_duration = s"${Helpers.now.getTime - startTime} ms", + backend_messages = inboundAdapterInfoInternal.backendMessages + ) } } diff --git a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala index 6461b6553..c0b64a85a 100644 --- a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala +++ b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala @@ -87,14 +87,13 @@ import com.tesobe.model.UpdateBankAccount import com.twilio.Twilio import com.twilio.rest.api.v2010.account.Message import com.twilio.`type`.PhoneNumber - import net.liftweb.common._ import net.liftweb.json import net.liftweb.json.JsonAST.JField import net.liftweb.json.{JArray, JBool, JInt, JObject, JString, JValue} import net.liftweb.mapper.{By, _} import net.liftweb.util.Helpers.{hours, now, time, tryo} -import net.liftweb.util.Mailer +import net.liftweb.util.{Helpers, Mailer} import net.liftweb.util.Mailer.{From, PlainMailBodyType, Subject, To} import org.iban4j import org.iban4j.{CountryCode, IbanFormat} @@ -126,15 +125,26 @@ object LocalMappedConnector extends Connector with MdcLoggable { implicit override val nameOfConnector = LocalMappedConnector.getClass.getSimpleName // - override def getAdapterInfo(callContext: Option[CallContext]): Future[Box[(InboundAdapterInfoInternal, Option[CallContext])]] = Future( + override def getAdapterInfo(callContext: Option[CallContext]): Future[Box[(InboundAdapterInfoInternal, Option[CallContext])]] = Future { + val startTime = Helpers.now.getTime + val source = APIUtil.getPropsValue("db.driver","org.h2.Driver") Full(InboundAdapterInfoInternal( errorCode = "", - backendMessages = Nil, + backendMessages = List( + InboundStatusMessage( + source = source, + status = "Success", + errorCode = "", + text =s"Get data from $source database", + duration = Some(s"${Helpers.now.getTime - startTime} ms") + ) + ), name = "LocalMappedConnector", version = "mapped", git_commit = APIUtil.gitCommit, date = DateWithMsFormat.format(new Date()) - ), callContext)) + ), callContext) + } override def validateAndCheckIbanNumber(iban: String, callContext: Option[CallContext]): OBPReturnType[Box[IbanChecker]] = Future { import org.iban4j.CountryCode diff --git a/obp-api/src/test/scala/code/api/v3_0_0/GetAdapterInfoTest.scala b/obp-api/src/test/scala/code/api/v3_0_0/GetAdapterInfoTest.scala new file mode 100644 index 000000000..c3c7a1e0f --- /dev/null +++ b/obp-api/src/test/scala/code/api/v3_0_0/GetAdapterInfoTest.scala @@ -0,0 +1,85 @@ +/** +Open Bank Project - API +Copyright (C) 2011-2019, TESOBE GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . + +Email: contact@tesobe.com +TESOBE GmbH +Osloerstrasse 16/17 +Berlin 13359, Germany + +This product includes software developed at +TESOBE (http://www.tesobe.com/) + */ +package code.api.v3_0_0 + +import code.api.util.ApiRole.canGetAdapterInfoAtOneBank +import code.api.util.ErrorMessages.{UserHasMissingRoles, UserNotLoggedIn} +import code.api.v3_0_0.OBPAPI3_0_0.Implementations3_0_0 +import code.api.util.APIUtil.OAuth._ +import code.entitlement.Entitlement +import code.setup.DefaultUsers +import com.github.dwickern.macros.NameOf.nameOf +import com.openbankproject.commons.model.ErrorMessage +import com.openbankproject.commons.util.ApiVersion +import org.scalatest.Tag + +class GetAdapterInfoTest extends V300ServerSetup with DefaultUsers { + + /** + * Test tags + * Example: To run tests with tag "getPermissions": + * mvn test -D tagsToInclude + * + * This is made possible by the scalatest maven plugin + */ + object VersionOfApi extends Tag(ApiVersion.v3_0_0.toString) + object ApiEndpoint extends Tag(nameOf(Implementations3_0_0.getAdapterInfoForBank)) + + feature("Get Adapter Info v3.1.0") + { + scenario(s"$UserNotLoggedIn error case", ApiEndpoint, VersionOfApi) { + When("We make a request v3.1.0") + val request310 = (v3_0Request /"banks"/testBankId1.value/ "adapter").GET + val response310 = makeGetRequest(request310) + Then("We should get a 401") + response310.code should equal(401) + And("error should be " + UserNotLoggedIn) + response310.body.extract[ErrorMessage].message should equal (UserNotLoggedIn) + } + scenario(s"$UserHasMissingRoles error case", ApiEndpoint, VersionOfApi) { + When("We make a request v3.1.0") + val request310 = (v3_0Request / "banks"/testBankId1.value/ "adapter").GET <@ (user1) + val response310 = makeGetRequest(request310) + Then("We should get a 403") + response310.code should equal(403) + And("error should be " + UserHasMissingRoles + canGetAdapterInfoAtOneBank) + response310.body.extract[ErrorMessage].message contains (UserHasMissingRoles + canGetAdapterInfoAtOneBank) shouldBe (true) + } + scenario("We will try to get adapter info", ApiEndpoint, VersionOfApi) { + Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canGetAdapterInfoAtOneBank.toString) + When("We make a request v3.1.0") + val request310 = (v3_0Request / "banks"/testBankId1.value/ "adapter").GET <@ (user1) + val response310 = makeGetRequest(request310) + Then("We should get a 200") + response310.code should equal(200) + Then("We should get a 200") + response310.code should equal(200) + response310.body.extract[AdapterInfoJsonV300].name should equal("LocalMappedConnector") + } + } + + +} diff --git a/obp-api/src/test/scala/code/api/v3_1_0/GetAdapterInfoTest.scala b/obp-api/src/test/scala/code/api/v3_1_0/GetAdapterInfoTest.scala index d30f6c865..ed9c5ca9c 100644 --- a/obp-api/src/test/scala/code/api/v3_1_0/GetAdapterInfoTest.scala +++ b/obp-api/src/test/scala/code/api/v3_1_0/GetAdapterInfoTest.scala @@ -27,11 +27,17 @@ package code.api.v3_1_0 import com.openbankproject.commons.util.ApiVersion import code.api.v3_0_0.AdapterInfoJsonV300 +import code.api.util.APIUtil.OAuth._ +import code.api.util.ApiRole.{CanCreateAccountAttributeAtOneBank, canGetAdapterInfo} +import code.api.util.ErrorMessages.{UserHasMissingRoles, UserNotLoggedIn} +import code.setup.{APIResponse, DefaultUsers} import code.api.v3_1_0.OBPAPI3_1_0.Implementations3_1_0 +import code.entitlement.Entitlement import com.github.dwickern.macros.NameOf.nameOf +import com.openbankproject.commons.model.ErrorMessage import org.scalatest.Tag -class GetAdapterInfoTest extends V310ServerSetup { +class GetAdapterInfoTest extends V310ServerSetup with DefaultUsers { /** * Test tags @@ -45,14 +51,34 @@ class GetAdapterInfoTest extends V310ServerSetup { feature("Get Adapter Info v3.1.0") { - scenario("We will try to get adapter info", ApiEndpoint, VersionOfApi) { + scenario(s"$UserNotLoggedIn error case", ApiEndpoint, VersionOfApi) { When("We make a request v3.1.0") val request310 = (v3_1_0_Request / "adapter").GET val response310 = makeGetRequest(request310) + Then("We should get a 401") + response310.code should equal(401) + And("error should be " + UserNotLoggedIn) + response310.body.extract[ErrorMessage].message should equal (UserNotLoggedIn) + } + scenario(s"$UserHasMissingRoles error case", ApiEndpoint, VersionOfApi) { + When("We make a request v3.1.0") + val request310 = (v3_1_0_Request / "adapter").GET <@ (user1) + val response310 = makeGetRequest(request310) + Then("We should get a 403") + response310.code should equal(403) + And("error should be " + UserHasMissingRoles + canGetAdapterInfo) + response310.body.extract[ErrorMessage].message should equal (UserHasMissingRoles + canGetAdapterInfo) + } + scenario("We will try to get adapter info", ApiEndpoint, VersionOfApi) { + Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canGetAdapterInfo.toString) + When("We make a request v3.1.0") + val request310 = (v3_1_0_Request / "adapter").GET <@ (user1) + val response310 = makeGetRequest(request310) + Then("We should get a 200") + response310.code should equal(200) Then("We should get a 200") response310.code should equal(200) response310.body.extract[AdapterInfoJsonV300].name should equal("LocalMappedConnector") - } } diff --git a/obp-api/src/test/scala/code/api/v5_0_0/GetAdapterInfoTest.scala b/obp-api/src/test/scala/code/api/v5_0_0/GetAdapterInfoTest.scala new file mode 100644 index 000000000..d0eb02c11 --- /dev/null +++ b/obp-api/src/test/scala/code/api/v5_0_0/GetAdapterInfoTest.scala @@ -0,0 +1,87 @@ +/** +Open Bank Project - API +Copyright (C) 2011-2019, TESOBE GmbH + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU Affero General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see . + +Email: contact@tesobe.com +TESOBE GmbH +Osloerstrasse 16/17 +Berlin 13359, Germany + +This product includes software developed at +TESOBE (http://www.tesobe.com/) + */ +package code.api.v5_0_0 + +import code.api.util.ApiRole.canGetAdapterInfo +import code.api.util.ErrorMessages.{UserHasMissingRoles, UserNotLoggedIn} +import code.api.v3_0_0.AdapterInfoJsonV300 +import code.api.v5_0_0.OBPAPI5_0_0.Implementations5_0_0 +import code.api.util.APIUtil.OAuth._ +import code.entitlement.Entitlement +import code.setup.DefaultUsers +import com.github.dwickern.macros.NameOf.nameOf +import com.openbankproject.commons.model.ErrorMessage +import com.openbankproject.commons.util.ApiVersion +import org.scalatest.Tag + +class GetAdapterInfoTest extends V500ServerSetup with DefaultUsers { + + /** + * Test tags + * Example: To run tests with tag "getPermissions": + * mvn test -D tagsToInclude + * + * This is made possible by the scalatest maven plugin + */ + object VersionOfApi extends Tag(ApiVersion.v5_0_0.toString) + object ApiEndpoint extends Tag(nameOf(Implementations5_0_0.getAdapterInfo)) + + feature("Get Adapter Info v5.0.0") + { + scenario(s"$UserNotLoggedIn error case", ApiEndpoint, VersionOfApi) { + When("We make a request v5.0.0") + val request310 = (v5_0_0_Request / "adapter").GET + val response310 = makeGetRequest(request310) + Then("We should get a 401") + response310.code should equal(401) + And("error should be " + UserNotLoggedIn) + response310.body.extract[ErrorMessage].message should equal (UserNotLoggedIn) + } + scenario(s"$UserHasMissingRoles error case", ApiEndpoint, VersionOfApi) { + When("We make a request v5.0.0") + val request310 = (v5_0_0_Request / "adapter").GET <@ (user1) + val response310 = makeGetRequest(request310) + Then("We should get a 403") + response310.code should equal(403) + And("error should be " + UserHasMissingRoles + canGetAdapterInfo) + response310.body.extract[ErrorMessage].message should equal (UserHasMissingRoles + canGetAdapterInfo) + } + scenario("We will try to get adapter info", ApiEndpoint, VersionOfApi) { + Entitlement.entitlement.vend.addEntitlement("", resourceUser1.userId, canGetAdapterInfo.toString) + When("We make a request v5.0.0") + val request310 = (v5_0_0_Request / "adapter").GET <@ (user1) + val response310 = makeGetRequest(request310) + Then("We should get a 200") + response310.code should equal(200) + Then("We should get a 200") + response310.code should equal(200) + response310.body.extract[AdapterInfoJsonV500].name should equal("LocalMappedConnector") + response310.body.extract[AdapterInfoJsonV500].total_duration.length >0 shouldBe(true) + } + } + + +} diff --git a/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data b/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data index 9a70a17d0..2c9e711f0 100644 Binary files a/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data and b/obp-api/src/test/scala/code/connector/RestConnector_vMar2019_frozen_meta_data differ diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModelTrait.scala b/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModelTrait.scala index 37e361c19..f2be23e85 100644 --- a/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModelTrait.scala +++ b/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModelTrait.scala @@ -65,7 +65,8 @@ case class InboundStatusMessage( source: String, status: String, errorCode: String, - text: String + text: String, + duration: Option[String] = None //added from V500 ) case class Status(