Skip to content

Commit

Permalink
fmt
Browse files Browse the repository at this point in the history
  • Loading branch information
seakayone committed Dec 14, 2022
1 parent 1b54f11 commit 9247db4
Show file tree
Hide file tree
Showing 8 changed files with 118 additions and 64 deletions.
15 changes: 10 additions & 5 deletions webapi/src/main/scala/org/knora/webapi/config/AppConfig.scala
Expand Up @@ -6,17 +6,22 @@
package org.knora.webapi.config

import com.typesafe.config.ConfigFactory
import dsp.errors.FileWriteException
import org.knora.webapi.messages.util.rdf.RdfFeatureFactory
import org.knora.webapi.util.cache.CacheUtil
import zio._
import zio.config._
import zio.config.magnolia._
import zio.config.typesafe._

import java.nio.file.{Files, Path, Paths}
import java.nio.file.Files
import java.nio.file.Path
import java.nio.file.Paths
import scala.concurrent.duration
import scala.util.{Failure, Success, Try}
import scala.util.Failure
import scala.util.Success
import scala.util.Try

import dsp.errors.FileWriteException
import org.knora.webapi.messages.util.rdf.RdfFeatureFactory
import org.knora.webapi.util.cache.CacheUtil

/**
* Represents the configuration as defined in application.conf.
Expand Down
Expand Up @@ -5,11 +5,15 @@

package org.knora.webapi.core

import zhttp.service.Server
import zio.ZLayer
import zio._

import org.knora.webapi.config.AppConfig
import org.knora.webapi.routing.HealthRouteWithZIOHttp
import org.knora.webapi.slice.resourceinfo.api.{IriConverter, ResourceInfoRoute, RestResourceInfoService}
import zhttp.service.Server
import zio.{ZLayer, _}
import org.knora.webapi.slice.resourceinfo.api.IriConverter
import org.knora.webapi.slice.resourceinfo.api.ResourceInfoRoute
import org.knora.webapi.slice.resourceinfo.api.RestResourceInfoService

object HttpServerWithZIOHttp {

Expand Down
8 changes: 6 additions & 2 deletions webapi/src/main/scala/org/knora/webapi/core/LayersLive.scala
Expand Up @@ -5,11 +5,16 @@

package org.knora.webapi.core

import zio.ULayer
import zio.ZLayer

import org.knora.webapi.auth.JWTService
import org.knora.webapi.config.AppConfig
import org.knora.webapi.messages.StringFormatter
import org.knora.webapi.routing.ApiRoutes
import org.knora.webapi.slice.resourceinfo.api.{IriConverter, LiveRestResourceInfoService, ResourceInfoRoute}
import org.knora.webapi.slice.resourceinfo.api.IriConverter
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService
import org.knora.webapi.slice.resourceinfo.api.ResourceInfoRoute
import org.knora.webapi.slice.resourceinfo.repo.LiveResourceInfoRepo
import org.knora.webapi.store.cache.CacheServiceManager
import org.knora.webapi.store.cache.api.CacheService
Expand All @@ -21,7 +26,6 @@ import org.knora.webapi.store.triplestore.TriplestoreServiceManager
import org.knora.webapi.store.triplestore.api.TriplestoreService
import org.knora.webapi.store.triplestore.impl.TriplestoreServiceHttpConnectorImpl
import org.knora.webapi.store.triplestore.upgrade.RepositoryUpdater
import zio.{ULayer, ZLayer}

object LayersLive {

Expand Down
Expand Up @@ -11,35 +11,41 @@ import akka.pattern._
import akka.util.Timeout
import com.google.gwt.safehtml.shared.UriUtils._
import com.typesafe.scalalogging.Logger
import dsp.errors._
import dsp.valueobjects.{Iri, IriErrorMessages}
import org.apache.commons.lang3.StringUtils
import org.knora.webapi._
import org.knora.webapi.config.AppConfig
import org.knora.webapi.messages.IriConversions._
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectADM
import org.knora.webapi.messages.store.triplestoremessages.{
SparqlAskRequest,
SparqlAskResponse,
StringLiteralSequenceV2,
StringLiteralV2
}
import org.knora.webapi.messages.v1.responder.projectmessages.ProjectInfoV1
import org.knora.webapi.messages.v2.responder.KnoraContentV2
import org.knora.webapi.messages.v2.responder.standoffmessages._
import org.knora.webapi.util.{Base64UrlCheckDigit, JavaUtil}
import spray.json._
import zio.ZLayer

import java.nio.ByteBuffer
import java.time._
import java.time.format.DateTimeFormatter
import java.time.temporal.{ChronoField, TemporalAccessor}
import java.time.temporal.ChronoField
import java.time.temporal.TemporalAccessor
import java.util.Base64
import java.util.UUID
import java.util.concurrent.ConcurrentHashMap
import java.util.{Base64, UUID}
import scala.concurrent.{ExecutionContext, Future}
import scala.concurrent.ExecutionContext
import scala.concurrent.Future
import scala.util.Failure
import scala.util.Success
import scala.util.Try
import scala.util.matching.Regex
import scala.util.{Failure, Success, Try}

import dsp.errors._
import dsp.valueobjects.Iri
import dsp.valueobjects.IriErrorMessages
import org.knora.webapi._
import org.knora.webapi.config.AppConfig
import org.knora.webapi.messages.IriConversions._
import org.knora.webapi.messages.admin.responder.projectsmessages.ProjectADM
import org.knora.webapi.messages.store.triplestoremessages.SparqlAskRequest
import org.knora.webapi.messages.store.triplestoremessages.SparqlAskResponse
import org.knora.webapi.messages.store.triplestoremessages.StringLiteralSequenceV2
import org.knora.webapi.messages.store.triplestoremessages.StringLiteralV2
import org.knora.webapi.messages.v1.responder.projectmessages.ProjectInfoV1
import org.knora.webapi.messages.v2.responder.KnoraContentV2
import org.knora.webapi.messages.v2.responder.standoffmessages._
import org.knora.webapi.util.Base64UrlCheckDigit
import org.knora.webapi.util.JavaUtil

/**
* Provides instances of [[StringFormatter]], as well as string formatting constants.
Expand Down
Expand Up @@ -5,24 +5,31 @@

package org.knora.webapi.slice.resourceinfo.api

import org.knora.webapi.IRI
import org.knora.webapi.messages.StringFormatter
import org.knora.webapi.routing.RouteUtilV2
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.{ASC, Order, OrderBy, lastModificationDate}
import zhttp.http.HttpError.BadRequest
import zhttp.http._
import zio.ZIO
import zio.ZLayer
import zio.json.EncoderOps
import zio.prelude.Validation
import zio.{ZIO, ZLayer}

import org.knora.webapi.IRI
import org.knora.webapi.messages.StringFormatter
import org.knora.webapi.routing.RouteUtilV2
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.ASC
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.Order
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.OrderBy
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.lastModificationDate

final case class InternalIri(value: IRI)

final case class IriConverter(stringFormatter: StringFormatter) {
def externalToInternalIri(iri: IRI): ZIO[Any, Throwable, InternalIri] =
def asInternalIri(iri: IRI): ZIO[Any, Throwable, InternalIri] =
ZIO.attempt(stringFormatter.toSmartIri(iri).internalIri).map(InternalIri(_))
}

object IriConverter {
def asInternalIri(iri: IRI) =
ZIO.service[IriConverter].flatMap(_.asInternalIri(iri))
val layer = ZLayer.fromFunction(IriConverter(_))
}

Expand All @@ -32,8 +39,8 @@ final case class ResourceInfoRoute(iriConverter: IriConverter) {
Http.collectZIO[Request] { case req @ Method.GET -> !! / "v2" / "resources" / "info" =>
(for {
p <- getParameters(req)
projectIri <- iriConverter.externalToInternalIri(p._1).mapError(err => BadRequest(err.getMessage))
resourceClassIri <- iriConverter.externalToInternalIri(p._2).mapError(err => BadRequest(err.getMessage))
projectIri <- iriConverter.asInternalIri(p._1).mapError(err => BadRequest(err.getMessage))
resourceClassIri <- iriConverter.asInternalIri(p._2).mapError(err => BadRequest(err.getMessage))
result <- RestResourceInfoService.findByProjectAndResourceClass(projectIri, resourceClassIri, (p._3, p._4))
} yield result).fold(err => Response.fromHttpError(err), suc => Response.json(suc.toJson))
}
Expand Down
Expand Up @@ -5,11 +5,13 @@

package org.knora.webapi.slice.resourceinfo.api

import org.knora.webapi.IRI
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.{Order, OrderBy}
import zio.UIO
import zio.macros.accessible

import org.knora.webapi.IRI
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.Order
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.OrderBy

@accessible
trait RestResourceInfoService {
def findByProjectAndResourceClass(
Expand Down
@@ -1,12 +1,13 @@
package org.knora.webapi.slice.resourceinfo.api

import zhttp.http._
import zio.test.Assertion.equalTo
import zio.ZIO
import zio.test.ZIOSpecDefault
import zio.test._

import java.util.UUID.randomUUID

import org.knora.webapi.messages.StringFormatter
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.ASC
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.DESC
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.creationDate
Expand All @@ -18,44 +19,60 @@ import org.knora.webapi.slice.resourceinfo.repo.TestResourceInfoRepo

object ResourceInfoRouteSpec extends ZIOSpecDefault {

private val routeToTest = ResourceInfoRoute()

private val testResourceClass = "http://test-resource-class/" + randomUUID
private val testProjectIri = "http://test-project/" + randomUUID
private val baseUrl = URL(!! / "v2" / "resources" / "info")
private val projectHeader = Headers("x-knora-accept-project", testProjectIri)

private def sendRequest(req: Request) =
for {
route <- ZIO.service[ResourceInfoRoute].map(_.route)
response <- route(req)
} yield response

def spec =
suite("ResourceInfoRoute /v2/resources/info")(
test("given no required params/headers were passed should respond with BadRequest") {
assertZIO(routeToTest(Request(url = baseUrl)).map(_.status))(equalTo(Status.BadRequest))
val request = Request(url = baseUrl)
for {
response <- sendRequest(request)
} yield assertTrue(response.status == Status.BadRequest)
},
test("given more than one resource class should respond with BadRequest") {
val url = baseUrl.setQueryParams(Map("resourceClass" -> List(testResourceClass, "http://anotherResourceClass")))
val request = Request(url = url, headers = projectHeader)
assertZIO(routeToTest(request).map(_.status))(equalTo(Status.BadRequest))
for {
response <- sendRequest(request)
} yield assertTrue(response.status == Status.BadRequest)
},
test("given no projectIri should respond with BadRequest") {
val url = baseUrl.setQueryParams(Map("resourceClass" -> List(testResourceClass)))
val request = Request(url = url)
assertZIO(routeToTest(request).map(_.status))(equalTo(Status.BadRequest))
for {
response <- sendRequest(request)
} yield assertTrue(response.status == Status.BadRequest)
},
test("given all mandatory parameters should respond with OK") {
val url = baseUrl.setQueryParams(Map("resourceClass" -> List(testResourceClass)))
val request = Request(url = url, headers = projectHeader)
assertZIO(routeToTest(request).map(_.status))(equalTo(Status.Ok))
for {
response <- sendRequest(request)
} yield assertTrue(response.status == Status.Ok)
},
test("given all parameters rest service should be called with default order") {
val url = baseUrl.setQueryParams(Map("resourceClass" -> List(testResourceClass)))
val request = Request(url = url, headers = projectHeader)
assertZIO(routeToTest(request) *> SpyLiveRestResourceInfoService.lastInvocation)(
equalTo(
for {
expectedResourceClassIri <- IriConverter.asInternalIri(testResourceClass).map(_.value)
expectedProjectIri <- IriConverter.asInternalIri(testProjectIri).map(_.value)
lastInvocation <- sendRequest(request) *> SpyLiveRestResourceInfoService.lastInvocation
} yield assertTrue(
lastInvocation ==
Map(
projectIriKey -> testProjectIri,
resourceClassKey -> testResourceClass,
projectIriKey -> expectedProjectIri,
resourceClassKey -> expectedResourceClassIri,
orderingKey -> (lastModificationDate, ASC)
)
)
)
},
test("given all parameters rest service should be called with correct parameters") {
Expand All @@ -67,15 +84,25 @@ object ResourceInfoRouteSpec extends ZIOSpecDefault {
)
)
val request = Request(url = url, headers = projectHeader)
assertZIO(routeToTest(request) *> SpyLiveRestResourceInfoService.lastInvocation)(
equalTo(
for {
expectedProjectIri <- IriConverter.asInternalIri(testProjectIri).map(_.value)
expectedResourceClassIri <- IriConverter.asInternalIri(testResourceClass).map(_.value)
_ <- sendRequest(request)
lastInvocation <- SpyLiveRestResourceInfoService.lastInvocation
} yield assertTrue(
lastInvocation ==
Map(
projectIriKey -> testProjectIri,
resourceClassKey -> testResourceClass,
projectIriKey -> expectedProjectIri,
resourceClassKey -> expectedResourceClassIri,
orderingKey -> (creationDate, DESC)
)
)
)
}
).provide(SpyLiveRestResourceInfoService.layer, TestResourceInfoRepo.layer, IriConverter.layer)
).provide(
ResourceInfoRoute.layer,
SpyLiveRestResourceInfoService.layer,
TestResourceInfoRepo.layer,
IriConverter.layer,
StringFormatter.testLayer
)
}
@@ -1,13 +1,12 @@
package org.knora.webapi.slice.resourceinfo.api

import zio._

import org.knora.webapi.IRI
import org.knora.webapi.slice.resourceinfo.api.SpyLiveRestResourceInfoService.{
orderingKey,
projectIriKey,
resourceClassKey
}
import org.knora.webapi.slice.resourceinfo.api.SpyLiveRestResourceInfoService.orderingKey
import org.knora.webapi.slice.resourceinfo.api.SpyLiveRestResourceInfoService.projectIriKey
import org.knora.webapi.slice.resourceinfo.api.SpyLiveRestResourceInfoService.resourceClassKey
import org.knora.webapi.slice.resourceinfo.repo.TestResourceInfoRepo
import zio._

case class SpyLiveRestResourceInfoService(
lastInvocation: Ref[Map[String, Any]],
Expand Down

0 comments on commit 9247db4

Please sign in to comment.