Skip to content

Commit

Permalink
#714 fix Violations's JsonPointer in rule + convert one more test
Browse files Browse the repository at this point in the history
  • Loading branch information
David Dufour-Boivin committed Jun 27, 2018
1 parent 71dd5e7 commit 0b106ed
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
Expand Up @@ -22,6 +22,7 @@ class MediaTypesRule {

private val description = "Custom media types should only be used for versioning"

@Deprecated("DELETE AS PART OF #714")
@Check(severity = Severity.SHOULD)
fun validate(swagger: Swagger): Violation? {
val paths = swagger.paths.orEmpty().entries.flatMap { (pathName, path) ->
Expand All @@ -40,11 +41,11 @@ class MediaTypesRule {
path.readOperations().flatMap { operation ->
val consumedMediaViolations = operation.requestBody?.content.orEmpty()
.filter { (mediaType, _) -> this.isViolatingMediaType(mediaType) }
.map { context.violation(description, it) } // todo #714: Check if pointer still valid without the 2nd parameter
.map { (_, mediaType) -> context.violation(description, mediaType) }
val producedMediaViolation = operation.responses.orEmpty().values
.flatMap { response -> response.content.orEmpty().entries }
.filter { (mediaType, _) -> isViolatingMediaType(mediaType) }
.map { context.violation(description, it) } // todo #714: Check if pointer still valid without the 2nd parameter
.map { (_, mediaType) -> context.violation(description, mediaType) }
consumedMediaViolations + producedMediaViolation
}
}
Expand Down
@@ -1,7 +1,9 @@
package de.zalando.zally.rule.zalando

import com.fasterxml.jackson.core.JsonPointer
import de.zalando.zally.getFixture
import de.zalando.zally.rule.Context
import de.zalando.zally.rule.api.Violation
import de.zalando.zally.util.PatternUtil.isApplicationJsonOrProblemJson
import de.zalando.zally.util.PatternUtil.isCustomMediaTypeWithVersioning
import io.swagger.models.Swagger
Expand Down Expand Up @@ -68,8 +70,11 @@ class MediaTypesRuleTest {
@Test
fun `custom media type without versioning causes violation`() {
val path = "/shipment-order/{shipment_order_id}"
val swagger = swaggerWithMediaTypes(path to listOf("application/json", "application/vnd.api+json"))
assertThat(rule.validate(swagger)!!.paths).hasSameElementsAs(listOf("$path GET"))
val context = contextWithMediaTypes(path to listOf("application/json", "application/vnd.api+json"))
assertThat(rule.validate(context)).hasSameElementsAs(listOf(
Violation(
"Custom media types should only be used for versioning",
JsonPointer.valueOf("/paths/~1shipment-order~1{shipment_order_id}/get/responses/200/content/application~1vnd.api+json"))))
}

@Test
Expand Down

0 comments on commit 0b106ed

Please sign in to comment.