From fad8bf60b6bf9bd1eabe913a191e9328f39ebfac Mon Sep 17 00:00:00 2001 From: Jared O'Connell Date: Tue, 17 Dec 2024 13:50:13 -0500 Subject: [PATCH 1/2] Added test cases that explicitly test Object unserialization --- schema/object_test.go | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/schema/object_test.go b/schema/object_test.go index 64abaeb..5da333c 100644 --- a/schema/object_test.go +++ b/schema/object_test.go @@ -69,7 +69,7 @@ var testStructSchemaPtr = schema.NewTypedObject[*testStructPtr]("testStruct", ma ), }) -func TestObjectUnserialization(t *testing.T) { +func TestObjectUnserialization_Success(t *testing.T) { data := map[string]any{ "Field1": 42, "field3": "Hello world!", @@ -94,6 +94,43 @@ func TestObjectUnserialization(t *testing.T) { }) } +func TestObjectUnserialization_MissingFields(t *testing.T) { + dataMissing1 := map[string]any{ + "field3": "Hello world!", + } + _, err := testStructSchema.Unserialize(dataMissing1) + assert.Error(t, err) + assert.Contains(t, err.Error(), "field is required") + + dataMissing3 := map[string]any{ + "Field1": 42, + } + _, err = testStructSchema.Unserialize(dataMissing3) + assert.Error(t, err) + assert.Contains(t, err.Error(), "field is required") +} + +func TestObjectUnserialization_IncorrectType(t *testing.T) { + dataMissing1 := map[string]any{ + "Field1": "this cannot be represented as an integer", + "field3": "Hello world!", + } + _, err := testStructSchema.Unserialize(dataMissing1) + assert.Error(t, err) + assert.Contains(t, err.Error(), "parsing") +} + +func TestObjectUnserialization_ExtraField(t *testing.T) { + dataMissing1 := map[string]any{ + "Field1": 42, + "wrong": "wrong", + "field3": "Hello world!", + } + _, err := testStructSchema.Unserialize(dataMissing1) + assert.Error(t, err) + assert.Contains(t, err.Error(), "Invalid parameter 'wrong'") +} + type embeddedTestStruct struct { Field1 int64 } From f8088f56101d5f649b8aac84e304c8fefdb558e1 Mon Sep 17 00:00:00 2001 From: Jared O'Connell Date: Tue, 7 Jan 2025 15:38:37 -0500 Subject: [PATCH 2/2] Validate that errors are indicating the problematic data --- schema/object_test.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/schema/object_test.go b/schema/object_test.go index 5da333c..e8dd01c 100644 --- a/schema/object_test.go +++ b/schema/object_test.go @@ -100,14 +100,14 @@ func TestObjectUnserialization_MissingFields(t *testing.T) { } _, err := testStructSchema.Unserialize(dataMissing1) assert.Error(t, err) - assert.Contains(t, err.Error(), "field is required") + assert.Contains(t, err.Error(), "'Field1': This field is required") dataMissing3 := map[string]any{ "Field1": 42, } _, err = testStructSchema.Unserialize(dataMissing3) assert.Error(t, err) - assert.Contains(t, err.Error(), "field is required") + assert.Contains(t, err.Error(), "'field3': This field is required") } func TestObjectUnserialization_IncorrectType(t *testing.T) { @@ -118,6 +118,7 @@ func TestObjectUnserialization_IncorrectType(t *testing.T) { _, err := testStructSchema.Unserialize(dataMissing1) assert.Error(t, err) assert.Contains(t, err.Error(), "parsing") + assert.Contains(t, err.Error(), `"this cannot be represented as an integer"`) } func TestObjectUnserialization_ExtraField(t *testing.T) {