io.specmatic.core.pattern.NegativeNonStringlyPatterns.kt Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of specmatic-core Show documentation
Show all versions of specmatic-core Show documentation
Turn your contracts into executable specifications. Contract Driven Development - Collaboratively Design & Independently Deploy MicroServices & MicroFrontends.
package io.specmatic.core.pattern
import io.specmatic.core.Resolver
import io.specmatic.core.Result
import io.specmatic.core.pattern.config.NegativePatternConfiguration
class NegativeNonStringlyPatterns : NegativePatternsTemplate() {
override fun getNegativePatterns(
patternMap: Map,
resolver: Resolver,
row: Row,
config: NegativePatternConfiguration
): Map>> {
return patternMap.mapValues { (key, pattern) ->
val resolvedPattern = resolvedHop(pattern, resolver)
resolvedPattern
.negativeBasedOn(
row.stepDownOneLevelInJSONHierarchy(withoutOptionality(key)),
resolver,
config
)
.filterValueIsNot {
isStringly(resolvedPattern, it, resolver)
}.filterValueIsNot {
it is NullPattern
}
}
}
private fun isStringly(
resolvedPattern: Pattern,
it: Pattern,
resolver: Resolver
) = resolvedPattern.matches(it.generate(resolver).toStringValue(), resolver) is Result.Success
}