Test openapi schema parameters in path
This commit is contained in:
@@ -57,6 +57,18 @@ class `Article routes` : BaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `I can get article by id`() {
|
||||
withIntegrationApplication {
|
||||
`Given I have article`(id = "65cda9f3-8991-4420-8d41-1da9da72c9bb")
|
||||
`When I send a GET request`("/articles/65cda9f3-8991-4420-8d41-1da9da72c9bb") `Then the response should be` OK and {
|
||||
`And the response should not be null`()
|
||||
`And have property`("$.id") `whish contains` "65cda9f3-8991-4420-8d41-1da9da72c9bb"
|
||||
`And schema must be valid`()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `I can get versions of article by the id`() {
|
||||
withIntegrationApplication {
|
||||
@@ -69,17 +81,6 @@ class `Article routes` : BaseTest() {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `I can get article by id`() {
|
||||
withIntegrationApplication {
|
||||
`Given I have article`(id = "65cda9f3-8991-4420-8d41-1da9da72c9bb")
|
||||
`When I send a GET request`("/articles/65cda9f3-8991-4420-8d41-1da9da72c9bb") `Then the response should be` OK and {
|
||||
`And the response should not be null`()
|
||||
`And have property`("$.id") `whish contains` "65cda9f3-8991-4420-8d41-1da9da72c9bb"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `I can create an article`() {
|
||||
withIntegrationApplication {
|
||||
|
||||
@@ -17,13 +17,17 @@ import org.openapi4j.schema.validator.v3.SchemaValidator
|
||||
import java.io.File
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
fun TestApplicationResponse.`And schema must be valid`() {
|
||||
val uri = "/" + Url(call.request.uri).encodedPath
|
||||
val operation = call.request.httpMethod
|
||||
|
||||
fun TestApplicationResponse.`And schema must be valid`(route: String? = null) {
|
||||
OpenApi3Parser().parse(File("/openapi2.yaml".getResource().toURI()), true).let { api ->
|
||||
api.getPath(uri)
|
||||
?.getOperation(operation.value.toLowerCase())?.apply {
|
||||
val operation = call.request.httpMethod
|
||||
val uri = route ?: "/" + Url(call.request.uri).encodedPath
|
||||
val path = api.paths
|
||||
.keys
|
||||
.firstOrNull { uri.matches(it.replace("""\{[^{}]+}""".toRegex(), "[^/]+").toRegex()) }
|
||||
|
||||
api.getPath(path)
|
||||
?.getOperation(operation.value.toLowerCase())
|
||||
?.apply {
|
||||
val mediaType = call.request.contentType()
|
||||
val status = call.response.status()
|
||||
getResponse(status?.value?.toString() ?: error("HttpStatus not found"))
|
||||
@@ -38,11 +42,13 @@ fun TestApplicationResponse.`And schema must be valid`() {
|
||||
schemaValidator.validate(mapper.readTree(content), results)
|
||||
|
||||
assertTrue(results.isValid, results.results().toString())
|
||||
} ?: error("""No path found for "$operation $uri" for status ${status.value} with media type "$mediaType".""")
|
||||
}?.apply {
|
||||
}
|
||||
?: error("""No path found for "$operation $uri" for status ${status.value} with media type "$mediaType".""")
|
||||
}
|
||||
?.apply {
|
||||
Url(call.request.uri).parameters.forEach { parameter: String, values: List<String> ->
|
||||
getParametersIn(api.context, "query")
|
||||
?.firstOrNull { it.name == "workgroup" }?.schema?.let { schema ->
|
||||
?.firstOrNull { it.name == parameter }?.schema?.let { schema ->
|
||||
val validationContext: ValidationContext<OAI3> = ValidationContext(api.context)
|
||||
val jsonNode: JsonNode = schema.toNode()
|
||||
val schemaValidator = SchemaValidator(validationContext, "", jsonNode)
|
||||
@@ -50,8 +56,10 @@ fun TestApplicationResponse.`And schema must be valid`() {
|
||||
schemaValidator.validate(TextNode(values.first()), params)
|
||||
|
||||
assertTrue(params.isValid, params.results().toString())
|
||||
} ?: error("""No path found for "$operation $uri" for status "$parameter".""")
|
||||
}
|
||||
?: error("""No path found for "$operation $uri" for status "$parameter".""")
|
||||
}
|
||||
} ?: error("""No path found for "$operation $uri".""")
|
||||
}
|
||||
?: error("""No path found for "$operation $uri".""")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user