diff --git a/src/main/scala/org/openeo/opensearch/OpenSearchResponses.scala b/src/main/scala/org/openeo/opensearch/OpenSearchResponses.scala index 3b41596c..12dc4f80 100644 --- a/src/main/scala/org/openeo/opensearch/OpenSearchResponses.scala +++ b/src/main/scala/org/openeo/opensearch/OpenSearchResponses.scala @@ -645,7 +645,7 @@ object OpenSearchResponses { implicit val decodeFeature: Decoder[Feature] = new Decoder[Feature] { override def apply(c: HCursor): Decoder.Result[Feature] = { for { - id <- c.downField("properties").downField("productIdentifier").as[String] + id <- c.downField("properties").downField("productIdentifier").as[String] // TODO: that's not the feature ID geometry <- c.downField("geometry").as[Json] nominalDate <- c.downField("properties").downField("startDate").as[ZonedDateTime] links <- c.downField("properties").downField("links").as[Array[Link]] @@ -698,10 +698,10 @@ object OpenSearchResponses { case Some(pattern) => features.filter(feature => feature.tileID match { case Some(tileId) => val matchesPattern = tileId matches pattern.replace("*", ".*") - logger.debug(s"${if (matchesPattern) "retaining" else "omitting"} feature with tileId $tileId") + logger.debug(s"${if (matchesPattern) "retaining" else "omitting"} feature ${feature.id} with tileId $tileId") matchesPattern case _ => - logger.debug(s"omitting feature with unknown tileId") + logger.debug(s"omitting feature ${feature.id} with unknown tileId") false }) case _ => features diff --git a/src/test/scala/org/openeo/CreodiasAPITest.scala b/src/test/scala/org/openeo/CreodiasAPITest.scala index 2f7284e9..d937e9d9 100644 --- a/src/test/scala/org/openeo/CreodiasAPITest.scala +++ b/src/test/scala/org/openeo/CreodiasAPITest.scala @@ -2,7 +2,9 @@ package org.openeo import geotrellis.proj4.{CRS, LatLng} import geotrellis.vector.{Extent, ProjectedExtent} +import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.{AfterEach, BeforeEach, Test} +import org.openeo.opensearch.OpenSearchResponses import org.openeo.opensearch.backends.CreodiasClient import java.time.ZoneOffset.UTC @@ -38,20 +40,25 @@ class CreodiasAPITest { // The parser in getProducts should be able to handle these incorrect multipolygons. new CreodiasClient().getProducts( "Sentinel1", Some(fromDate, toDate), - bbox, attributeValues, "", "" + bbox, attributeValues ) } @Test - def testTileIdWithWildcardIsNotPropagatedToApi(): Unit = { - // propagating it makes the API return a 400 error - new CreodiasClient().getProducts( - "Sentinel2", - dateRange = LocalDate.of(2023, 9, 24) -> LocalDate.of(2023, 9, 24), - bbox = ProjectedExtent(Extent(4.912844218500582, 51.02816932187383, 4.918160603369832, 51.029815337603594), LatLng), - attributeValues = Map("tileId" -> "31*"), - correlationId = "", - processingLevel = "" - ) + def testTileIdWithWildcard(): Unit = { + def getProducts(tileIdPattern: Option[String]): Seq[OpenSearchResponses.Feature] = { + new CreodiasClient().getProducts( + "Sentinel2", + dateRange = LocalDate.of(2023, 9, 24) -> LocalDate.of(2023, 9, 24), + bbox = ProjectedExtent( + Extent(4.912844218500582, 51.02816932187383, 4.918160603369832, 51.029815337603594), LatLng), + attributeValues = tileIdPattern.map("tileId" -> _).toMap, + correlationId = "", + processingLevel = "" + ) + } + + assertTrue(getProducts(tileIdPattern = None).nonEmpty) // sanity check + assertTrue(getProducts(tileIdPattern = Some("30*")).isEmpty) } }