/** 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. Osloer Strasse 16/17 Berlin 13359, Germany This product includes software developed at TESOBE (http://www.tesobe.com/) */ package code.util import java.time.format.DateTimeFormatter import java.time.{ZoneId, ZonedDateTime} import java.util.Date import code.api.Constant import code.api.util.APIUtil.{DateWithMsFormat, DefaultToDate, theEpochTime, _} import code.api.util.ErrorMessages._ import code.api.util._ import code.setup.PropsReset import com.openbankproject.commons.model.UserAuthContextCommons import net.liftweb.common.{Box, Empty, Full} import net.liftweb.http.provider.HTTPParam import org.scalatest.{FeatureSpec, GivenWhenThen, Matchers} class APIUtilTest extends FeatureSpec with Matchers with GivenWhenThen with PropsReset { val DefaultFromDateString = APIUtil.epochTimeString val DefaultToDateString = APIUtil.DefaultToDateString val startDateString = DefaultFromDateString val startDateStringWrongFormat = "Wrong Date Format" val endDateString = DefaultToDateString val endDateStringWrongFormat = "Wrong Date Format" val inputStringDateFormat = DateWithMsFormat val startDateObject: Date = DateWithMsFormat.parse(DefaultFromDateString) val endDateObject: Date = DateWithMsFormat.parse(DefaultToDateString) ZonedDateTime.now(ZoneId.of("UTC")) feature("test APIUtil.dateRangesOverlap method") { val oneDayAgo = ZonedDateTime.now(ZoneId.of("UTC")).minusDays(1) val twoDayAgo = ZonedDateTime.now(ZoneId.of("UTC")).minusDays(2) val tomorrow = ZonedDateTime.now(ZoneId.of("UTC")).plusDays(2) val dayAfterTomorrow = ZonedDateTime.now(ZoneId.of("UTC")).plusDays(1) val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm'Z'") scenario("Date intervals do not overlap"){ val interval1 = DateInterval(Date.from(twoDayAgo.toInstant()), Date.from(oneDayAgo.toInstant())) val interval2 = DateInterval(Date.from(tomorrow.toInstant()), Date.from(dayAfterTomorrow.toInstant())) dateRangesOverlap(interval1, interval2) should be (false) } scenario("Date intervals overlap"){ val interval1 = DateInterval(Date.from(twoDayAgo.toInstant()), Date.from(tomorrow.toInstant())) val interval2 = DateInterval(Date.from(oneDayAgo.toInstant()), Date.from(dayAfterTomorrow.toInstant())) dateRangesOverlap(interval1, interval2) should be (true) } } feature("test APIUtil.getHttpRequestUrlParam method") { scenario("no parameters in the URL") { val httpRequestUrl= "/obp/v3.1.0/management/metrics/top-consumers" val returnValue = getHttpRequestUrlParam(httpRequestUrl,"from_date") returnValue should be ("") } scenario(s"only one `from_date` in URL") { val httpRequestUrl= s"/obp/v3.1.0/management/metrics/top-consumers?from_date=$startDateString" val startdateValue = getHttpRequestUrlParam(httpRequestUrl,"from_date") startdateValue should be (s"$startDateString") } scenario(s"Both `from_date` and `to_date` in URL") { val httpRequestUrl= s"httpRequestUrl = /obp/v3.1.0/management/metrics/top-consumers?from_date=$startDateString&to_date=$endDateString" val startdateValue = getHttpRequestUrlParam(httpRequestUrl,"from_date") startdateValue should be (s"$startDateString") val endDateValue = getHttpRequestUrlParam(httpRequestUrl,"to_date") endDateValue should be (s"$endDateString") val noneFieldValue = getHttpRequestUrlParam(httpRequestUrl,"none_field") noneFieldValue should be ("") } scenario(s"test some space in the URL, eg: /obp/v3.0.0/management/aggregate-metrics?app_name=API Manager Local Dev ") { val httpRequestUrl= s"httpRequestUrl = /obp/v3.0.0/management/aggregate-metrics?app_name=API Manager Local Dev " val startdateValue = getHttpRequestUrlParam(httpRequestUrl,"app_name") startdateValue should be (s"API Manager Local Dev ") } scenario(s"test the error case, eg: not proper parameter name") { val httpRequestUrl= s"httpRequestUrl = /obp/v3.1.0/management/metrics/top-consumers?from_date=$startDateString&to_date=$endDateString" val noneFieldValue = getHttpRequestUrlParam(httpRequestUrl,"none_field") noneFieldValue should be ("") } } feature("test APIUtil.getHttpValues method") { scenario("test the one value case in HTTPParam , eg: (one name : one value)") { val httpParams: List[HTTPParam] = List(HTTPParam("from_date",s"$DateWithMsExampleString")) val returnValue = getHttpValues(httpParams, "from_date") returnValue should be (List(s"$DateWithMsExampleString")) } scenario(s"test the many values case in HTTPParam, eg (one name : value1,value2,value3)") { val httpParams: List[HTTPParam] = List(HTTPParam("from_date", List(s"$DateWithMsExampleString",s"$DateWithMsExampleString"))) val returnValue = getHttpValues(httpParams, "from_date") returnValue should be (List(s"$DateWithMsExampleString",s"$DateWithMsExampleString")) } scenario(s"test the many values case in HTTPParam, eg (exclude_app_names : value1,value2,value3)") { val httpParams: List[HTTPParam] = List(HTTPParam("exclude_app_names", List("value1","value2", "value3"))) val returnValue = getHttpValues(httpParams, "exclude_app_names") returnValue should be (List("value1","value2", "value3")) } scenario(s"test error cases, get wrong name ") { val httpParams: List[HTTPParam] = List(HTTPParam("from_date", List(s"$DateWithMsExampleString",s"$DateWithMsExampleString"))) val returnValue = getHttpValues(httpParams, "wrongName") returnValue should be (Empty) } scenario(s"test None case, httpParams == Empty ") { val httpParams: List[HTTPParam] = List.empty[HTTPParam] val returnValue = getHttpValues(httpParams, "wrongName") returnValue should be (Empty) } } feature("test APIUtil.parseObpStandardDate method") { scenario(s"test the correct format- DateWithMsFormat") { val correctDateFormatString = DateWithMsExampleString val returnValue: Box[Date] = parseObpStandardDate(correctDateFormatString) returnValue.isDefined should be (true) returnValue.openOrThrowException("") should be (DateWithMsFormat.parse(correctDateFormatString)) } scenario(s"test the correct format- DateWithMsRollbackFormat") { val correctDateFormatString = DateWithMsRollbackExampleString val returnValue: Box[Date] = parseObpStandardDate(correctDateFormatString) returnValue should be (Full(DateWithMsRollbackFormat.parse(correctDateFormatString))) } scenario(s"test the wrong data format") { val returnValue: Box[Date] = parseObpStandardDate("2001.07-01T00:00:00.000+0000") returnValue.isDefined should be (false) returnValue.toString contains FilterDateFormatError should be (true) } } feature("test APIUtil.getSortDirection method") { scenario(s"test the correct case: ASC or DESC") { val httpParams: List[HTTPParam] = List(HTTPParam("sort_direction", List("ASC"))) val returnValue = getSortDirection(httpParams) returnValue.isDefined should be (true) returnValue.openOrThrowException("") should be (OBPAscending) } scenario(s"test the wrong case: wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("sort_direction", List("wrongValue"))) val returnValue = getSortDirection(httpParams) returnValue.toString contains FilterSortDirectionError should be (true) } scenario(s"test the wrong case: wrong name (wrongName) in HTTPParam. It will return the default Sort Direction = DESC ") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("ASC"))) val returnValue = getSortDirection(httpParams) returnValue should be (Full(OBPDescending)) } } implicit val fromDateOrdering = new Ordering[OBPFromDate] { override def compare(x: OBPFromDate, y: OBPFromDate): Int = if (x.value.after(y.value)) { 1 } else if(y.value.after(x.value)) { -1 } else { 0 } } feature("test APIUtil.getFromDate method") { scenario(s"test the correct case") { val correctDateFormatString = s"$DateWithMsExampleString" val httpParams: List[HTTPParam] = List(HTTPParam("from_date", List(correctDateFormatString))) val returnValue = getFromDate(httpParams) returnValue should be (Full(OBPFromDate(DateWithMsFormat.parse(correctDateFormatString)))) } scenario(s"test the wrong case: wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("from_date", List("wrongValue"))) val returnValue = getFromDate(httpParams) returnValue.toString contains FilterDateFormatError should be (true) } scenario("test the wrong case: wrong name (wrongName) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List(s"$DateWithMsExampleString"))) val startTime = OBPFromDate(theEpochTime) val returnValue = getFromDate(httpParams) returnValue.toString should startWith("Full(OBPFromDate") val currentTime = OBPFromDate(theEpochTime) val beWithinTolerance = be >= startTime and be <= currentTime returnValue.orNull should beWithinTolerance } scenario("test the wrong case: wrong name (wrongName) and wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("wrongValue"))) val startTime = OBPFromDate(theEpochTime) val returnValue = getFromDate(httpParams) returnValue.toString should startWith("Full(OBPFromDate") val currentTime = OBPFromDate(theEpochTime) val beWithinTolerance = be >= startTime and be <= currentTime returnValue.orNull should beWithinTolerance } } implicit val toDateOrdering = new Ordering[OBPToDate] { override def compare(x: OBPToDate, y: OBPToDate): Int = if (x.value.after(y.value)) { 1 } else if(y.value.after(x.value)) { -1 } else { 0 } } feature("test APIUtil.getToDate method") { scenario(s"test the correct case") { val correctDateFormatString = s"$DateWithMsExampleString" val httpParams: List[HTTPParam] = List(HTTPParam("to_date", List(correctDateFormatString))) val returnValue = getToDate(httpParams) returnValue should be (Full(OBPToDate(DateWithMsFormat.parse(correctDateFormatString)))) } scenario(s"test the wrong case: wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("to_date", List("wrongValue"))) val returnValue = getToDate(httpParams) returnValue.toString contains FilterDateFormatError should be (true) } scenario(s"test the wrong case: wrong name (wrongName) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List(s"$DateWithMsExampleString"))) val startTime = OBPToDate(DefaultToDate) val returnValue = getToDate(httpParams) returnValue.toString should startWith("Full(OBPToDate") val currentTime = OBPToDate(DefaultToDate) val beWithinTolerance = be >= startTime and be <= currentTime returnValue.orNull should beWithinTolerance } scenario(s"test the wrong case: wrong name (wrongName) and wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("wrongValue"))) val startTime = OBPToDate(DefaultToDate) val returnValue = getToDate(httpParams) returnValue.toString should startWith("Full(OBPToDate") val currentTime = OBPToDate(DefaultToDate) val beWithinTolerance = be >= startTime and be <= currentTime returnValue.orNull should beWithinTolerance } } feature("test APIUtil.getOffset method") { scenario(s"test the correct case: offset = 100") { val correctValue = "100" val httpParams: List[HTTPParam] = List(HTTPParam("offset", List(correctValue))) val returnValue = getOffset(httpParams) returnValue should be (Full(OBPOffset(100))) } scenario(s"test the wrong case: wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("offset", List("wrongValue"))) val returnValue = getOffset(httpParams) returnValue.toString contains FilterOffersetError should be (true) val httpParams2: List[HTTPParam] = List(HTTPParam("offset", List("-1"))) val returnValue2 = getOffset(httpParams) returnValue2.toString contains FilterOffersetError should be (true) } scenario(s"test the wrong case: wrong name (wrongName) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("100"))) val returnValue = getOffset(httpParams) returnValue should be (OBPOffset(0)) } scenario(s"test the wrong case: wrong name (wrongName) and wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("wrongValue"))) val returnValue = getOffset(httpParams) returnValue should be (OBPOffset(0)) } } feature("test APIUtil.getLimit method") { scenario(s"test the correct case: limit = 100") { val correctValue = "100" val httpParams: List[HTTPParam] = List(HTTPParam("limit", List(correctValue))) val returnValue = getLimit(httpParams) returnValue should be (Full(OBPLimit(100))) } scenario(s"test the wrong case: wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("limit", List("wrongValue"))) val returnValue = getLimit(httpParams) returnValue.toString contains FilterLimitError should be (true) val httpParams2: List[HTTPParam] = List(HTTPParam("limit", List("-1"))) val returnValue2 = getLimit(httpParams) returnValue2.toString contains FilterLimitError should be (true) } scenario(s"test the wrong case: wrong name (wrongName) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("100"))) val returnValue = getLimit(httpParams) returnValue should be (OBPLimit(Constant.Pagination.limit)) } scenario(s"test the wrong case: wrong name (wrongName) and wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("wrongValue"))) val returnValue = getLimit(httpParams) returnValue should be (OBPLimit(Constant.Pagination.limit)) } } feature("test APIUtil.getHttpParamValuesByName method") { scenario(s"test the correct case, single value = anon") { val correctValue = "true" val httpParams: List[HTTPParam] = List(HTTPParam("anon", List(correctValue))) val returnValue = getHttpParamValuesByName(httpParams, "anon") returnValue should be (Full(OBPAnon(true))) } scenario(s"test the correct case, exclude_app_names=API_EXPLOER,SOFIT") { val correctValue = List("API_EXPLOER","SOFIT") val httpParams: List[HTTPParam] = List(HTTPParam("exclude_app_names", correctValue)) val returnValue = getHttpParamValuesByName(httpParams, "exclude_app_names") returnValue should be (Full(OBPExcludeAppNames(correctValue))) } scenario(s"test the correct case2, multi values = anon,consumer_id") { val httpParams: List[HTTPParam] = List(HTTPParam("anon", "true"), HTTPParam("consumer_id", "1")) val returnValue = getHttpParamValuesByName(httpParams, "anon") returnValue should be (Full(OBPAnon(true))) val returnValue1 = getHttpParamValuesByName(httpParams, "consumer_id") returnValue1 should be (Full(OBPConsumerId("1"))) } scenario(s"test the wrong case: wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("anon", List("wrongValue"))) val returnValue = getHttpParamValuesByName(httpParams, "anon") returnValue.toString contains FilterAnonFormatError should be (true) } scenario(s"test the wrong case: wrong name (wrongName) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("true"))) val returnValue = getHttpParamValuesByName(httpParams, "anon") returnValue should be (Full(OBPEmpty())) } scenario(s"test the wrong case: wrong name (wrongName) and wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("wrongName", List("wrongValue"))) val returnValue = getHttpParamValuesByName(httpParams, "anon") returnValue should be (Full(OBPEmpty())) } } feature("test APIUtil.getHttpParams method") { val RetrunDefaultParams = Full(List(OBPLimit(Constant.Pagination.limit),OBPOffset(0),OBPOrdering(None,OBPDescending), OBPFromDate(startDateObject),OBPToDate(endDateObject))) scenario(s"test the correct case1: with default parameters") { val ExpectResult = RetrunDefaultParams val httpParams: List[HTTPParam] = List( HTTPParam("from_date",List(s"$DefaultFromDateString")), HTTPParam("to_date",List(s"$DefaultToDateString")) ) val returnValue = createQueriesByHttpParams(httpParams) returnValue should be (ExpectResult) } scenario(s"test the correct case2: contains the `anon` ") { val ExpectResult = Full(List(OBPLimit(Constant.Pagination.limit),OBPOffset(Constant.Pagination.offset),OBPOrdering(None,OBPDescending) ,OBPFromDate(startDateObject),OBPToDate(endDateObject), OBPAnon(true))) val httpParams: List[HTTPParam] = List( HTTPParam("from_date",List(s"$DefaultFromDateString")), HTTPParam("to_date",List(s"$DefaultToDateString")), HTTPParam("anon", "true") ) val returnValue = createQueriesByHttpParams(httpParams) returnValue should be (ExpectResult) } scenario(s"test the correct case3: contains the `anon` and `consumer_id` ") { val ExpectResult = Full(List(OBPLimit(Constant.Pagination.limit),OBPOffset(Constant.Pagination.offset),OBPOrdering(None,OBPDescending), OBPFromDate(startDateObject),OBPToDate(endDateObject), OBPAnon(true),OBPConsumerId("1"))) val httpParams: List[HTTPParam] = List( HTTPParam("from_date",List(s"$DefaultFromDateString")), HTTPParam("to_date",List(s"$DefaultToDateString")), HTTPParam("anon", "true"), HTTPParam("consumer_id", "1") ) val returnValue = createQueriesByHttpParams(httpParams) returnValue should be (ExpectResult) } scenario(s"test the correct case4: contains all the fields") { val ExpectResult = Full(List(OBPLimit(Constant.Pagination.limit), OBPOffset(Constant.Pagination.offset), OBPOrdering(None,OBPDescending), OBPFromDate(startDateObject), OBPToDate(endDateObject), OBPAnon(true), OBPConsumerId("1"), OBPUserId("2"), OBPUrl("obp/v1.2.1/getBanks"), OBPAppName("PlaneApp"), OBPImplementedByPartialFunction("getBanks"), OBPImplementedInVersion("v1.2.1"), OBPVerb("GET"), OBPCorrelationId("123"), OBPDuration(1000), OBPExcludeAppNames(List("TrainApp", "BusApp")), OBPExcludeUrlPatterns(List("%/obp/v1.2.1%")), OBPExcludeImplementedByPartialFunctions(List("getBank", "getAccounts")))) val httpParams: List[HTTPParam] = List( HTTPParam("from_date",List(s"$DefaultFromDateString")), HTTPParam("to_date",List(s"$DefaultToDateString")), HTTPParam("anon", "true"), HTTPParam("consumer_id", "1"), HTTPParam("user_id", "2"), HTTPParam("url", "obp/v1.2.1/getBanks"), HTTPParam("app_name","PlaneApp"), HTTPParam("implemented_by_partial_function","getBanks"), HTTPParam("implemented_in_version","v1.2.1"), HTTPParam("verb","GET"), HTTPParam("correlation_id","123"), HTTPParam("duration","1000"), HTTPParam("exclude_app_names",List("TrainApp","BusApp")), HTTPParam("exclude_url_patterns","%/obp/v1.2.1%"), HTTPParam("exclude_implemented_by_partial_functions",List("getBank","getAccounts")) ) val returnValue = createQueriesByHttpParams(httpParams) returnValue should be (ExpectResult) } scenario(s"test the wrong case: values (wrongValue)- limit in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("limit", List("wrongValue"))) val returnValue = createQueriesByHttpParams(httpParams) returnValue.toString contains FilterLimitError should be (true) } scenario(s"test the wrong case: wrong values - anon (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("anon", List("wrongValue"))) val returnValue = createQueriesByHttpParams(httpParams) returnValue.toString contains FilterAnonFormatError should be (true) } scenario(s"test the wrong case: wrong values-offset(wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("offset", List("wrongValue"))) val returnValue = createQueriesByHttpParams(httpParams) returnValue.toString contains FilterOffersetError should be (true) val httpParams2: List[HTTPParam] = List(HTTPParam("offset", List("-1"))) val returnValue2 = createQueriesByHttpParams(httpParams) returnValue2.toString contains FilterOffersetError should be (true) } scenario(s"test the wrong case: wrong values - duration (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List( HTTPParam("from_date",List(s"$DefaultFromDateString")), HTTPParam("to_date",List(s"$DefaultToDateString")), HTTPParam("duration", List("wrongValue")) ) val returnValue = createQueriesByHttpParams(httpParams) returnValue.toString contains FilterDurationFormatError should be (true) } scenario(s"test the wrong case: wrong name (wrongName) in HTTPParam") { val httpParams: List[HTTPParam] = List( HTTPParam("from_date",List(s"$DefaultFromDateString")), HTTPParam("to_date",List(s"$DefaultToDateString")), HTTPParam("wrongName", List("true")) ) val returnValue = createQueriesByHttpParams(httpParams) returnValue should be (RetrunDefaultParams) } scenario(s"test the wrong case: wrong values (wrongValue) in HTTPParam") { val httpParams: List[HTTPParam] = List(HTTPParam("to_date", List("wrongValue"))) val returnValue = createQueriesByHttpParams(httpParams) returnValue.toString contains FilterDateFormatError should be (true) } } feature("test APIUtil.createHttpParamsByUrl method") { val RetrunDefaultParams = Full(List(OBPLimit(Constant.Pagination.limit),OBPOffset(Constant.Pagination.offset),OBPOrdering(None,OBPDescending), OBPFromDate(startDateObject),OBPToDate(endDateObject))) scenario(s"test the correct case1: all the params are in the `URL` ") { val ExpectResult = Full(List(HTTPParam("sort_direction",List("ASC")), HTTPParam("from_date",List(s"$DateWithMsExampleString")), HTTPParam("to_date",List(s"$DateWithMsExampleString")), HTTPParam("limit",List("10")), HTTPParam("offset",List("3")), HTTPParam("anon",List("false")), HTTPParam("consumer_id",List("5")), HTTPParam("user_id",List("66214b8e-259e-44ad-8868-3eb47be70646")), HTTPParam("url",List("/obp/v3.0.0/banks/gh.29.uk/accounts/8ca8a7e4-6d02-48e3-a029-0b2bf89de9f0/owner/transactions")), HTTPParam("app_name",List("MapperPostman")), HTTPParam("implemented_by_partial_function",List("getTransactionsForBankAccount")), HTTPParam("implemented_in_version",List("v3.0.0")), HTTPParam("verb",List("GET")), HTTPParam("correlation_id",List("123")), HTTPParam("duration",List("100")), HTTPParam("exclude_app_names",List("API-EXPLORER","API-Manager","SOFI","null","SOFIT")), HTTPParam("exclude_url_patterns",List("%25management/metrics%25","%management/aggregate-metrics%")), HTTPParam("exclude_implemented_by_partial_functions",List("getMetrics","getConnectorMetrics","getAggregateMetrics")))) val httpRequestUrl = "/obp/v3.0.0/management/aggregate-metrics?" + s"offset=3&" + s"limit=10&" + s"sort_direction=ASC&" + s"from_date=$DateWithMsExampleString&" + s"to_date=$DateWithMsExampleString&" + s"consumer_id=5&user_id=66214b8e-259e-44ad-8868-3eb47be70646&" + "implemented_by_partial_function=getTransactionsForBankAccount&" + "implemented_in_version=v3.0.0&" + "url=/obp/v3.0.0/banks/gh.29.uk/accounts/8ca8a7e4-6d02-48e3-a029-0b2bf89de9f0/owner/transactions&" + "verb=GET&" + "anon=false&" + "app_name=MapperPostman&" + "exclude_app_names=API-EXPLORER,API-Manager,SOFI,null,SOFIT&" + "exclude_url_patterns=%25management/metrics%25,%management/aggregate-metrics%&" + "exclude_implemented_by_partial_functions=getMetrics,getConnectorMetrics,getAggregateMetrics&"+ "correlation_id=123&duration=100" val returnValue = createHttpParamsByUrl(httpRequestUrl) returnValue should be (ExpectResult) } scenario(s"test the correct case2: no parameters in the Url ") { val ExpectResult = Full(List()) val httpRequestUrl = "/obp/v3.0.0/management/aggregate-metrics" val returnValue = createHttpParamsByUrl(httpRequestUrl) returnValue should be (ExpectResult) } scenario(s"test the correct case3: some params are in the `URL` ") { val ExpectResult = Full(List(HTTPParam("sort_direction",List("ASC")), HTTPParam("from_date",List(s"$DateWithMsExampleString")), HTTPParam("to_date",List(s"$DateWithMsExampleString")), HTTPParam("limit",List("10")), HTTPParam("offset",List("3")), HTTPParam("consumer_id",List("5")), HTTPParam("user_id",List("66214b8e-259e-44ad-8868-3eb47be70646")), HTTPParam("implemented_by_partial_function",List("getTransactionsForBankAccount")), HTTPParam("implemented_in_version",List("v3.0.0")))) val httpRequestUrl = "/obp/v3.0.0/management/aggregate-metrics?" + s"offset=3&limit=10&sort_direction=ASC&from_date=$DateWithMsExampleString&to_date=$DateWithMsExampleString&consumer_id=5&user_id=66214b8e-259e-44ad-8868-3eb47be70646&" + "implemented_by_partial_function=getTransactionsForBankAccount&implemented_in_version=v3.0.0" val returnValue = createHttpParamsByUrl(httpRequestUrl) returnValue should be (ExpectResult) } scenario(s"test the correct case4: error case None in `=` right side ") { val ExpectResult = Full(List()) val httpRequestUrl = s"/obp/v3.0.0/management/aggregate-metrics?from_date=" val returnValue = createHttpParamsByUrl(httpRequestUrl) returnValue should be (ExpectResult) } } feature("test APIUtil.firstCharToLowerCase method") { APIUtil.firstCharToLowerCase("ABC") should be ("aBC") APIUtil.firstCharToLowerCase("") should be ("") APIUtil.firstCharToLowerCase(null) should be ("") APIUtil.firstCharToLowerCase("aaaa") should be ("aaaa") } /** * should add the follow to test.default.props * ## should be "hello_foo_bar__good luck__" * hello.world=hello_${foo.bar}__good ${greeting.${compose.exp}}__ * foo.bar=foo_bar * compose.exp=word * greeting.word=luck */ feature("test APIUtil.getPropsValue support expression") { setPropsValues( "hello.world" -> "hello_${foo.bar}__good ${greeting.${compose.exp}}__", "foo.bar" -> "foo_bar", "compose.exp" -> "word", "greeting.word" -> "luck" ) APIUtil.getPropsValue("hello.world") should be("hello_foo_bar__good luck__") } feature("test APIUtil.getObpFormatOperationId method") { APIUtil.getObpFormatOperationId("OBPv4_0_0-dynamicEntity_deleteFooBar33") should be ("OBPv4.0.0-dynamicEntity_deleteFooBar33") APIUtil.getObpFormatOperationId("OBPv3.0.0-getCoreAccountById") should be ("OBPv3.0.0-getCoreAccountById") APIUtil.getObpFormatOperationId("xxx") should be ("xxx") } feature("test APIUtil.getBankIdAccountIdPairsFromUserAuthContexts method") { scenario(s"Test the Success cases") { val userAuthContexts = List(UserAuthContextCommons( userAuthContextId = "", userId = "", key = "BANK_ID::::CUSTOMER_NUMBER", value = "bank_id1::::customer_number1", timeStamp = new Date(0), consumerId = "" ), UserAuthContextCommons( userAuthContextId = "", userId = "", key = "BANK_ID::::CUSTOMER_NUMBER", value = "bank_id2::::customer_number2", timeStamp = new Date(0), consumerId = "" ), UserAuthContextCommons( userAuthContextId = "", userId = "", key = "BANK_ID::::CUSTOMER_NUMBER", value = "bank_id3::::customer_number3", timeStamp = new Date(0), consumerId = "" )) val expectedValue = Set(("bank_id1", "customer_number1"), ("bank_id2", "customer_number2"), ("bank_id3", "customer_number3")) val actualValue = APIUtil.getBankIdAccountIdPairsFromUserAuthContexts(userAuthContexts) actualValue should be(expectedValue) } scenario(s"Test the Empty cases") { val userAuthContexts = List(UserAuthContextCommons( userAuthContextId = "", userId = "", key = "BANK_ID1::::CUSTOMER_NUMBER", value = "bank_id1::::customer_number1", timeStamp = new Date(0), consumerId = "" ), UserAuthContextCommons( userAuthContextId = "", userId = "", key = "BANK_ID:::CUSTOMER_NUMBER", value = "bank_id2::::customer_number2", timeStamp = new Date(0), consumerId = "" )) val expectedValue = Set() val actualValue = APIUtil.getBankIdAccountIdPairsFromUserAuthContexts(userAuthContexts) actualValue should be(expectedValue) } } }