All Downloads are FREE. Search and download functionalities are using the official Maven repository.

in.specmatic.core.ValidateUnexpectedKeys.kt Maven / Gradle / Ivy

Go to download

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". ******************************************************************************************************

The newest version!
package `in`.specmatic.core

import `in`.specmatic.core.pattern.Pattern
import `in`.specmatic.core.pattern.withoutOptionality
import `in`.specmatic.core.value.StringValue

object ValidateUnexpectedKeys: UnexpectedKeyCheck {
    override fun validate(pattern: Map, actual: Map): UnexpectedKeyError? {
        return validateList(pattern, actual).firstOrNull()
    }

    override fun validateList(pattern: Map, actual: Map): List {
        if (pattern.containsKey("(string)?")) {
            // Supports free-form dictionaries
            return listOf()
        }
        val patternKeys = pattern.minus("...").keys.map { withoutOptionality(it) }
        val actualKeys = actual.keys.map { withoutOptionality(it) }

        return actualKeys.minus(patternKeys.toSet()).map {
            UnexpectedKeyError(it)
        }
    }

    override fun validateListCaseInsensitive(
        pattern: Map,
        actual: Map
    ): List {
        val patternKeys = pattern.minus("...").keys.map { withoutOptionality(it).lowercase() }.toSet()
        val actualKeys = actual.keys.map { withoutOptionality(it) }

        return actualKeys.filter { it.lowercase() !in patternKeys }.map { UnexpectedKeyError(it) }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy