From 2f57f2eb1d5553753c4ff72b3a8dc2a13ab311f6 Mon Sep 17 00:00:00 2001 From: Emil Kantis Date: Sat, 29 Oct 2022 14:03:15 +0200 Subject: [PATCH] Adjusting error message to correctly state missing/extra keys (#3267) * Adjusting error message to correctly state missing/extra keys * Remove redundant test --- .../io/kotest/assertions/json/compare.kt | 16 ++++---- .../sksamuel/kotest/tests/json/EqualTest.kt | 40 +++++++++---------- 2 files changed, 28 insertions(+), 28 deletions(-) diff --git a/kotest-assertions/kotest-assertions-json/src/commonMain/kotlin/io/kotest/assertions/json/compare.kt b/kotest-assertions/kotest-assertions-json/src/commonMain/kotlin/io/kotest/assertions/json/compare.kt index b17809f6966..5f8da0b6565 100644 --- a/kotest-assertions/kotest-assertions-json/src/commonMain/kotlin/io/kotest/assertions/json/compare.kt +++ b/kotest-assertions/kotest-assertions-json/src/commonMain/kotlin/io/kotest/assertions/json/compare.kt @@ -201,17 +201,17 @@ internal fun compareObjects( ): JsonError? { if (FieldComparison.Strict == options.fieldComparison) { - val keys1 = expected.elements.keys - val keys2 = actual.elements.keys + val expectedKeys = expected.elements.keys + val actualKeys = actual.elements.keys - if (keys1.size < keys2.size) { - val missing = keys2 - keys1 - return JsonError.ObjectMissingKeys(path, missing) + if (actualKeys.size > expectedKeys.size) { + val extra = actualKeys - expectedKeys + return JsonError.ObjectExtraKeys(path, extra) } - if (keys2.size < keys1.size) { - val extra = keys1 - keys2 - return JsonError.ObjectExtraKeys(path, extra) + if (actualKeys.size < expectedKeys.size) { + val missing = expectedKeys - actualKeys + return JsonError.ObjectMissingKeys(path, missing) } } diff --git a/kotest-assertions/kotest-assertions-json/src/jvmTest/kotlin/com/sksamuel/kotest/tests/json/EqualTest.kt b/kotest-assertions/kotest-assertions-json/src/jvmTest/kotlin/com/sksamuel/kotest/tests/json/EqualTest.kt index a893c3fa3a6..15dc0b5b09c 100644 --- a/kotest-assertions/kotest-assertions-json/src/jvmTest/kotlin/com/sksamuel/kotest/tests/json/EqualTest.kt +++ b/kotest-assertions/kotest-assertions-json/src/jvmTest/kotlin/com/sksamuel/kotest/tests/json/EqualTest.kt @@ -161,12 +161,12 @@ expected:<{ } test("comparing object with extra key") { - val a = """ { "a" : "foo", "b" : "bar", "c": "baz" } """ - val b = """ { "a" : "foo", "b" : "bar" } """ + val actual = """ { "a" : "foo", "b" : "bar", "c": "baz" } """ + val expected = """ { "a" : "foo", "b" : "bar" } """ shouldFail { - a shouldEqualJson b + actual shouldEqualJson expected }.shouldHaveMessage( - """The top level object was missing expected field(s) [c] + """The top level object has extra field(s) [c] expected:<{ "a": "foo", @@ -180,12 +180,12 @@ expected:<{ } test("comparing object with extra keys") { - val a = """ { "a" : "foo", "b" : "bar", "c": "baz", "d": true } """ - val b = """ { "a" : "foo", "b" : "bar" } """ + val actual = """ { "a" : "foo", "b" : "bar", "c": "baz", "d": true } """ + val expected = """ { "a" : "foo", "b" : "bar" } """ shouldFail { - a shouldEqualJson b + actual shouldEqualJson expected }.shouldHaveMessage( - """The top level object was missing expected field(s) [c,d] + """The top level object has extra field(s) [c,d] expected:<{ "a": "foo", @@ -200,12 +200,12 @@ expected:<{ } test("comparing object with missing key") { - val a = """ { "a" : "foo", "b" : "bar" } """ - val b = """ { "a" : "foo", "b" : "bar", "c": "baz" } """ + val actual = """ { "a" : "foo", "b" : "bar" } """ + val expected = """ { "a" : "foo", "b" : "bar", "c": "baz" } """ shouldFail { - a shouldEqualJson b + actual shouldEqualJson expected }.shouldHaveMessage( - """The top level object has extra field(s) [c] + """The top level object was missing expected field(s) [c] expected:<{ "a": "foo", @@ -219,12 +219,12 @@ expected:<{ } test("comparing object with missing keys") { - val a = """ { "a" : "foo", "b" : "bar" } """ - val b = """ { "a" : "foo", "b" : "bar", "c": "baz", "d": 123 } """ + val actual = """ { "a" : "foo", "b" : "bar" } """ + val expected = """ { "a" : "foo", "b" : "bar", "c": "baz", "d": 123 } """ shouldFail { - a shouldEqualJson b + actual shouldEqualJson expected }.shouldHaveMessage( - """The top level object has extra field(s) [c,d] + """The top level object was missing expected field(s) [c,d] expected:<{ "a": "foo", @@ -674,12 +674,12 @@ expected:<{ } test("real world json without field") { - val a = this::class.java.getResourceAsStream("/shopify.json").bufferedReader().readText() - val b = this::class.java.getResourceAsStream("/shopify_without_field.json").bufferedReader().readText() + val actual = this::class.java.getResourceAsStream("/shopify.json").bufferedReader().readText() + val expected = this::class.java.getResourceAsStream("/shopify_without_field.json").bufferedReader().readText() shouldFail { - a shouldEqualJson b + actual shouldEqualJson expected }.message.shouldStartWith( - """At 'products.[0].variants.[0]' object was missing expected field(s) [sku] + """At 'products.[0].variants.[0]' object has extra field(s) [sku] expected:<{ "products": [