-
Notifications
You must be signed in to change notification settings - Fork 18
/
ResourceInfoRouteSpec.scala
81 lines (74 loc) · 3.83 KB
/
ResourceInfoRouteSpec.scala
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
package org.knora.webapi.slice.resourceinfo.api
import zhttp.http._
import zio.test.Assertion.equalTo
import zio.test.ZIOSpecDefault
import zio.test._
import java.util.UUID.randomUUID
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
import org.knora.webapi.slice.resourceinfo.api.LiveRestResourceInfoService.lastModificationDate
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
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)
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))
},
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))
},
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))
},
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))
},
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(
Map(
projectIriKey -> testProjectIri,
resourceClassKey -> testResourceClass,
orderingKey -> (lastModificationDate, ASC)
)
)
)
},
test("given all parameters rest service should be called with correct parameters") {
val url = baseUrl.setQueryParams(
Map(
"resourceClass" -> List(testResourceClass),
"orderBy" -> List("creationDate"),
"order" -> List("DESC")
)
)
val request = Request(url = url, headers = projectHeader)
assertZIO(routeToTest(request) *> SpyLiveRestResourceInfoService.lastInvocation)(
equalTo(
Map(
projectIriKey -> testProjectIri,
resourceClassKey -> testResourceClass,
orderingKey -> (creationDate, DESC)
)
)
)
}
).provide(SpyLiveRestResourceInfoService.layer, TestResourceInfoRepo.layer, IriConverter.layer)
}