Skip to content

Commit

Permalink
Adjusting error message to correctly state missing/extra keys (#3267)
Browse files Browse the repository at this point in the history
* Adjusting error message to correctly state missing/extra keys

* Remove redundant test
  • Loading branch information
Kantis committed Oct 29, 2022
1 parent e0ca769 commit 2f57f2e
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 28 deletions.
Expand Up @@ -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)
}
}

Expand Down
Expand Up @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand All @@ -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",
Expand Down Expand Up @@ -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": [
Expand Down

0 comments on commit 2f57f2e

Please sign in to comment.