Skip to content

Commit 33b3d97

Browse files
authored
Merge pull request #2615 from hongwei1/develop
refactor/Add support for API version 6.0.0 in ResourceDocs
2 parents d0658a5 + 777c309 commit 33b3d97

File tree

7 files changed

+65
-35
lines changed

7 files changed

+65
-35
lines changed

obp-api/src/main/scala/code/api/ResourceDocs1_4_0/ResourceDocsAPIMethods.scala

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,45 @@
11
package code.api.ResourceDocs1_4_0
22

33
import code.api.Constant.{GET_DYNAMIC_RESOURCE_DOCS_TTL, GET_STATIC_RESOURCE_DOCS_TTL, PARAM_LOCALE}
4-
import java.util.UUID.randomUUID
5-
64
import code.api.OBPRestHelper
7-
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON.canGetCustomersJson
85
import code.api.cache.Caching
9-
import code.api.dynamic.endpoint.helper.{DynamicEndpointHelper, DynamicEndpoints}
10-
import code.api.dynamic.entity.helper.DynamicEntityHelper
116
import code.api.util.APIUtil._
12-
import code.api.util.ApiRole.{canReadDynamicResourceDocsAtOneBank, canReadResourceDoc, canReadStaticResourceDoc}
7+
import code.api.util.ApiRole.{canReadDynamicResourceDocsAtOneBank, canReadResourceDoc}
138
import code.api.util.ApiTag._
14-
import code.api.util.DynamicUtil.{dynamicCompileResult, logger}
159
import code.api.util.ExampleValue.endpointMappingRequestBodyExample
10+
import code.api.util.FutureUtil.EndpointContext
11+
import code.api.util.NewStyle.HttpCode
1612
import code.api.util._
1713
import code.api.v1_4_0.JSONFactory1_4_0.ResourceDocsJson
1814
import code.api.v1_4_0.{APIMethods140, JSONFactory1_4_0, OBPAPI1_4_0}
1915
import code.api.v2_2_0.{APIMethods220, OBPAPI2_2_0}
2016
import code.api.v3_0_0.OBPAPI3_0_0
2117
import code.api.v3_1_0.OBPAPI3_1_0
2218
import code.api.v4_0_0.{APIMethods400, OBPAPI4_0_0}
19+
import code.api.v5_0_0.OBPAPI5_0_0
20+
import code.api.v5_1_0.OBPAPI5_1_0
21+
import code.api.v6_0_0.OBPAPI6_0_0
2322
import code.apicollectionendpoint.MappedApiCollectionEndpointsProvider
23+
import code.util.Helper
2424
import code.util.Helper.{MdcLoggable, ObpS, SILENCE_IS_GOLDEN}
2525
import com.github.dwickern.macros.NameOf.nameOf
26-
import com.openbankproject.commons.model.{BankId, ListResult, User}
27-
import com.openbankproject.commons.model.enums.ContentParam.{ALL, DYNAMIC, STATIC}
2826
import com.openbankproject.commons.model.enums.ContentParam
27+
import com.openbankproject.commons.model.enums.ContentParam.{ALL, DYNAMIC, STATIC}
28+
import com.openbankproject.commons.model.{BankId, ListResult, User}
2929
import com.openbankproject.commons.util.ApiStandards._
3030
import com.openbankproject.commons.util.{ApiVersion, ScannedApiVersion}
31-
import com.tesobe.CacheKeyFromArguments
3231
import net.liftweb.common.{Box, Empty, Full}
33-
import net.liftweb.http.{JsonResponse, LiftRules, S}
32+
import net.liftweb.http.LiftRules
3433
import net.liftweb.json
3534
import net.liftweb.json.JsonAST.{JField, JString, JValue}
3635
import net.liftweb.json._
37-
import net.liftweb.util.Helpers.tryo
38-
import net.liftweb.util.Props
39-
import java.util.concurrent.ConcurrentHashMap
40-
41-
import code.api.util.FutureUtil.EndpointContext
42-
import code.api.util.NewStyle.HttpCode
43-
import code.api.v5_0_0.OBPAPI5_0_0
44-
import code.api.v5_1_0.{OBPAPI5_1_0, UserAttributeJsonV510}
45-
import code.util.Helper
4636

37+
import java.util.concurrent.ConcurrentHashMap
4738
import scala.collection.immutable.{List, Nil}
4839
import scala.concurrent.Future
4940

5041
// JObject creation
51-
import code.api.v1_2_1.{APIInfoJSON, APIMethods121, HostedBy, OBPAPI1_2_1}
42+
import code.api.v1_2_1.{APIMethods121, OBPAPI1_2_1}
5243
import code.api.v1_3_0.{APIMethods130, OBPAPI1_3_0}
5344
import code.api.v2_0_0.{APIMethods200, OBPAPI2_0_0}
5445
import code.api.v2_1_0.{APIMethods210, OBPAPI2_1_0}
@@ -58,9 +49,6 @@ import scala.collection.mutable.ArrayBuffer
5849
// So we can include resource docs from future versions
5950
import code.api.util.ErrorMessages._
6051
import code.util.Helper.booleanToBox
61-
62-
import scala.concurrent.duration._
63-
6452
import com.openbankproject.commons.ExecutionContext.Implicits.global
6553

6654

@@ -123,6 +111,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
123111
logger.debug(s"getResourceDocsList says requestedApiVersion is $requestedApiVersion")
124112

125113
val resourceDocs = requestedApiVersion match {
114+
case ApiVersion.v6_0_0 => OBPAPI6_0_0.allResourceDocs
126115
case ApiVersion.v5_1_0 => OBPAPI5_1_0.allResourceDocs
127116
case ApiVersion.v5_0_0 => OBPAPI5_0_0.allResourceDocs
128117
case ApiVersion.v4_0_0 => OBPAPI4_0_0.allResourceDocs
@@ -141,6 +130,7 @@ trait ResourceDocsAPIMethods extends MdcLoggable with APIMethods220 with APIMeth
141130
logger.debug(s"There are ${resourceDocs.length} resource docs available to $requestedApiVersion")
142131

143132
val versionRoutes = requestedApiVersion match {
133+
case ApiVersion.v6_0_0 => OBPAPI6_0_0.routes
144134
case ApiVersion.v5_1_0 => OBPAPI5_1_0.routes
145135
case ApiVersion.v5_0_0 => OBPAPI5_0_0.routes
146136
case ApiVersion.v4_0_0 => OBPAPI4_0_0.routes

obp-api/src/main/scala/code/api/util/ApiVersionUtils.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package code.api.util
22

3-
import com.openbankproject.commons.util.{ScannedApiVersion}
43
import com.openbankproject.commons.util.ApiVersion._
4+
import com.openbankproject.commons.util.ScannedApiVersion
55

66
object ApiVersionUtils {
77

@@ -18,6 +18,7 @@ object ApiVersionUtils {
1818
v4_0_0 ::
1919
v5_0_0 ::
2020
v5_1_0 ::
21+
v6_0_0 ::
2122
`dynamic-endpoint` ::
2223
`dynamic-entity` ::
2324
scannedApis
@@ -39,6 +40,7 @@ object ApiVersionUtils {
3940
case v4_0_0.fullyQualifiedVersion | v4_0_0.apiShortVersion => v4_0_0
4041
case v5_0_0.fullyQualifiedVersion | v5_0_0.apiShortVersion => v5_0_0
4142
case v5_1_0.fullyQualifiedVersion | v5_1_0.apiShortVersion => v5_1_0
43+
case v6_0_0.fullyQualifiedVersion | v6_0_0.apiShortVersion => v6_0_0
4244
case `dynamic-endpoint`.fullyQualifiedVersion | `dynamic-endpoint`.apiShortVersion => `dynamic-endpoint`
4345
case `dynamic-entity`.fullyQualifiedVersion | `dynamic-entity`.apiShortVersion => `dynamic-entity`
4446
case version if(scannedApis.map(_.fullyQualifiedVersion).contains(version))

obp-api/src/main/scala/code/api/util/JwsUtil.scala

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
package code.api.util
22

3-
import java.security.interfaces.RSAPublicKey
4-
import java.time.format.DateTimeFormatter
5-
import java.time.{Duration, ZoneOffset, ZonedDateTime}
6-
import java.util
73
import code.api.{CertificateConstants, Constant}
84
import code.util.Helper.MdcLoggable
95
import com.nimbusds.jose.crypto.RSASSAVerifier
@@ -16,6 +12,10 @@ import net.liftweb.http.provider.HTTPParam
1612
import net.liftweb.json
1713
import net.liftweb.util.SecurityHelpers
1814

15+
import java.security.interfaces.RSAPublicKey
16+
import java.time.format.DateTimeFormatter
17+
import java.time.{Duration, ZoneOffset, ZonedDateTime}
18+
import java.util
1919
import scala.collection.immutable.{HashMap, List}
2020
import scala.jdk.CollectionConverters.seqAsJavaListConverter
2121

@@ -147,6 +147,7 @@ object JwsUtil extends MdcLoggable {
147147
"BGv1.3"->"berlin-group/v1.3",
148148
"OBPv4.0.0"->"obp/v4.0.0",
149149
"OBPv5.0.0"->"obp/v5.0.0",
150+
"OBPv6.0.0"->"obp/v6.0.0",
150151
"OBPv3.1.0"->"obp/v3.1.0",
151152
"UKv1.3"->"open-banking/v3.1"
152153
).withDefaultValue("{Not found any standard to match}")

obp-api/src/test/scala/code/api/ResourceDocs1_4_0/ResourceDocsTest.scala

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,13 @@ package code.api.ResourceDocs1_4_0
22

33
import code.api.ResourceDocs1_4_0.ResourceDocs140.ImplementationsResourceDocs
44
import code.api.berlin.group.ConstantsBG
5-
import code.api.util.ErrorMessages.{UserHasMissingRoles, UserNotLoggedIn}
65
import code.api.util.APIUtil.OAuth._
7-
8-
import java.util
6+
import code.api.util.ErrorMessages.{UserHasMissingRoles, UserNotLoggedIn}
97
import code.api.util.{ApiRole, CustomJsonFormats}
108
import code.api.v1_4_0.JSONFactory1_4_0.ResourceDocsJson
119
import code.setup.{DefaultUsers, PropsReset}
12-
import com.openbankproject.commons.util.{ApiVersion, Functions}
1310
import com.github.dwickern.macros.NameOf.nameOf
11+
import com.openbankproject.commons.util.{ApiVersion, Functions}
1412
import net.liftweb.json
1513
import net.liftweb.json.JsonAST._
1614
import net.liftweb.json.{Formats, JString, Serializer, TypeInfo}
@@ -75,6 +73,24 @@ class ResourceDocsTest extends ResourceDocsV140ServerSetup with PropsReset with
7573

7674

7775
feature(s"test ${ApiEndpoint1.name} ") {
76+
scenario(s"We will test ${ApiEndpoint1.name} Api -v6.0.0", ApiEndpoint1, VersionOfApi) {
77+
val requestGetObp = (ResourceDocsV6_0Request / "resource-docs" / "v6.0.0" / "obp").GET
78+
val responseGetObp = makeGetRequest(requestGetObp)
79+
And("We should get 200 and the response can be extract to case classes")
80+
val responseDocs = responseGetObp.body.extract[ResourceDocsJson]
81+
responseGetObp.code should equal(200)
82+
//This should not throw any exceptions
83+
responseDocs.resource_docs.map(responseDoc => stringToNodeSeq(responseDoc.description))
84+
}
85+
scenario(s"We will test ${ApiEndpoint1.name} Api -OBPv6.0.0", ApiEndpoint1, VersionOfApi) {
86+
val requestGetObp = (ResourceDocsV6_0Request / "resource-docs" / "OBPv6.0.0" / "obp").GET
87+
val responseGetObp = makeGetRequest(requestGetObp)
88+
And("We should get 200 and the response can be extract to case classes")
89+
val responseDocs = responseGetObp.body.extract[ResourceDocsJson]
90+
responseGetObp.code should equal(200)
91+
//This should not throw any exceptions
92+
responseDocs.resource_docs.map(responseDoc => stringToNodeSeq(responseDoc.description))
93+
}
7894
scenario(s"We will test ${ApiEndpoint1.name} Api -v5.0.0", ApiEndpoint1, VersionOfApi) {
7995
val requestGetObp = (ResourceDocsV5_0Request / "resource-docs" / "v5.0.0" / "obp").GET
8096
val responseGetObp = makeGetRequest(requestGetObp)
@@ -351,6 +367,24 @@ class ResourceDocsTest extends ResourceDocsV140ServerSetup with PropsReset with
351367
}
352368

353369
feature(s"test ${ApiEndpoint2.name} ") {
370+
scenario(s"We will test ${ApiEndpoint2.name} Api -v6.0.0", ApiEndpoint1, VersionOfApi) {
371+
val requestGetObp = (ResourceDocsV1_4Request /"banks"/ testBankId1.value/ "resource-docs" / "v6.0.0" / "obp").GET
372+
val responseGetObp = makeGetRequest(requestGetObp)
373+
And("We should get 200 and the response can be extract to case classes")
374+
val responseDocs = responseGetObp.body.extract[ResourceDocsJson]
375+
responseGetObp.code should equal(200)
376+
//This should not throw any exceptions
377+
responseDocs.resource_docs.map(responseDoc => stringToNodeSeq(responseDoc.description))
378+
}
379+
scenario(s"We will test ${ApiEndpoint2.name} Api -OBPv6.0.0", ApiEndpoint1, VersionOfApi) {
380+
val requestGetObp = (ResourceDocsV1_4Request /"banks"/ testBankId1.value/ "resource-docs" / "OBPv6.0.0" / "obp").GET
381+
val responseGetObp = makeGetRequest(requestGetObp)
382+
And("We should get 200 and the response can be extract to case classes")
383+
val responseDocs = responseGetObp.body.extract[ResourceDocsJson]
384+
responseGetObp.code should equal(200)
385+
//This should not throw any exceptions
386+
responseDocs.resource_docs.map(responseDoc => stringToNodeSeq(responseDoc.description))
387+
}
354388
scenario(s"We will test ${ApiEndpoint2.name} Api -v5.0.0/v4.0.0", ApiEndpoint1, VersionOfApi) {
355389
val requestGetObp = (ResourceDocsV1_4Request /"banks"/ testBankId1.value/ "resource-docs" / "v5.0.0" / "obp").GET
356390
val responseGetObp = makeGetRequest(requestGetObp)

obp-api/src/test/scala/code/api/ResourceDocs1_4_0/ResourceDocsV140ServerSetup.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,6 @@ trait ResourceDocsV140ServerSetup extends ServerSetupWithTestData {
1313
def ResourceDocsV4_0Request = baseRequest / "obp" / "v4.0.0"
1414
def ResourceDocsV5_0Request = baseRequest / "obp" / "v5.0.0"
1515
def ResourceDocsV5_1Request = baseRequest / "obp" / "v5.1.0"
16+
def ResourceDocsV6_0Request = baseRequest / "obp" / "v6.0.0"
1617

1718
}

obp-api/src/test/scala/code/api/ResourceDocs1_4_0/SwaggerFactoryUnitTest.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import code.api.v3_1_0.OBPAPI3_1_0
99
import code.api.v4_0_0.OBPAPI4_0_0
1010
import code.api.v5_0_0.OBPAPI5_0_0
1111
import code.api.v5_1_0.OBPAPI5_1_0
12+
import code.api.v6_0_0.OBPAPI6_0_0
1213
import code.util.Helper.MdcLoggable
1314

1415
import scala.collection.mutable.ArrayBuffer
@@ -56,7 +57,8 @@ class SwaggerFactoryUnitTest extends V140ServerSetup with MdcLoggable {
5657
feature("Test all V300, V220 and V210, exampleRequestBodies and successResponseBodies and all the case classes in SwaggerDefinitionsJSON") {
5758
scenario("Test all the case classes") {
5859
val resourceDocList: ArrayBuffer[ResourceDoc] = ArrayBuffer.empty
59-
OBPAPI5_1_0.allResourceDocs// ++
60+
OBPAPI6_0_0.allResourceDocs ++
61+
OBPAPI5_1_0.allResourceDocs ++
6062
OBPAPI5_0_0.allResourceDocs ++
6163
OBPAPI4_0_0.allResourceDocs ++
6264
OBPAPI3_1_0.allResourceDocs ++

obp-api/src/test/scala/code/util/ApiVersionUtilsTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ class ApiVersionUtilsTest extends V400ServerSetup {
2020
versions.map(version => ApiVersionUtils.valueOf(version.fullyQualifiedVersion))
2121

2222
//NOTE, when we added the new version, better fix this number manually. and also check the versions
23-
versions.length shouldBe(23)
23+
versions.length shouldBe(24)
2424
}}
2525
}

0 commit comments

Comments
 (0)