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

com.github.squirrelgrip.scientist4k.comparator.JsonContentTypeComparator.kt Maven / Gradle / Ivy

package com.github.squirrelgrip.scientist4k.comparator

import com.github.squirrelgrip.extension.json.toInstance
import com.github.squirrelgrip.extension.map.flatten
import com.github.squirrelgrip.scientist4k.model.ComparisonResult
import com.github.squirrelgrip.scientist4k.model.ComparisonResult.Companion.SUCCESS
import com.google.common.collect.MapDifference
import com.google.common.collect.Maps

class JsonContentTypeComparator : ContentTypeComparator {

    override fun invoke(control: ByteArray, candidate: ByteArray): ComparisonResult {
        val controlMap: Map = control.toInstance()
        val candidateMap: Map = candidate.toInstance()

        val difference: MapDifference = Maps.difference(controlMap.flatten(), candidateMap.flatten())

        return if (difference.areEqual()) {
            SUCCESS
        } else {
            ComparisonResult(
                    *difference.entriesOnlyOnLeft()
                            .map { (key, _) -> "$key in control, not in candidate" }.toTypedArray(),
                    *difference.entriesOnlyOnRight()
                            .map { (key, _) -> "$key in candidate, not in control" }.toTypedArray(),
                    *difference.entriesDiffering()
                            .map { (key, value) -> "$key has different values (${value.leftValue()} != ${value.rightValue()})" }.toTypedArray()
            )
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy