in.specmatic.core.KeyCheck.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.
Deprecation Notice for group ID "in.specmatic"
******************************************************************************************************
Updates for "specmatic-core" will no longer be available under the deprecated group ID "in.specmatic".
Please update your dependencies to use the new group ID "io.specmatic".
******************************************************************************************************
package `in`.specmatic.core
import `in`.specmatic.core.pattern.Pattern
import `in`.specmatic.core.value.StringValue
data class KeyCheck(val patternKeyCheck: KeyErrorCheck = CheckOnlyPatternKeys,
var unexpectedKeyCheck: UnexpectedKeyCheck = ValidateUnexpectedKeys,
val overrideUnexpectedKeyCheck: OverrideUnexpectedKeyCheck? = ::overrideUnexpectedKeyCheck
) {
fun disableOverrideUnexpectedKeycheck(): KeyCheck {
return KeyCheck(patternKeyCheck, unexpectedKeyCheck, null)
}
fun withUnexpectedKeyCheck(unexpectedKeyCheck: UnexpectedKeyCheck): KeyCheck {
return this.overrideUnexpectedKeyCheck?.invoke(this, unexpectedKeyCheck) ?: this
}
fun validate(
pattern: Map,
actual: Map
): KeyError? {
return validateAll(pattern, actual).firstOrNull()
}
fun validateAll(
pattern: Map,
actual: Map
): List {
return patternKeyCheck.validateList(pattern, actual).plus(unexpectedKeyCheck.validateList(pattern, actual))
}
fun validateAllCaseInsensitive(pattern: Map, actual: Map): List {
return patternKeyCheck.validateListCaseInsensitive(pattern, actual).plus(unexpectedKeyCheck.validateListCaseInsensitive(pattern, actual))
}
}
private fun overrideUnexpectedKeyCheck(keyCheck: KeyCheck, unexpectedKeyCheck: UnexpectedKeyCheck): KeyCheck {
return KeyCheck(keyCheck.patternKeyCheck, unexpectedKeyCheck)
}
typealias OverrideUnexpectedKeyCheck = (KeyCheck, UnexpectedKeyCheck) -> KeyCheck
val DefaultKeyCheck = KeyCheck()