Improve error handling across the board
This commit is contained in:
@@ -11,6 +11,7 @@ func TestGetWithPathsBasic(t *testing.T) {
|
||||
data map[string]interface{}
|
||||
path string
|
||||
expected []JSONNode
|
||||
error bool
|
||||
}{
|
||||
{
|
||||
name: "simple property",
|
||||
@@ -91,12 +92,19 @@ func TestGetWithPathsBasic(t *testing.T) {
|
||||
},
|
||||
path: "$.user.email",
|
||||
expected: []JSONNode{},
|
||||
error: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := Get(tt.data, tt.path)
|
||||
result, err := Get(tt.data, tt.path)
|
||||
if err != nil {
|
||||
if !tt.error {
|
||||
t.Errorf("GetWithPaths() returned error: %v", err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// For nonexistent path, we expect empty slice
|
||||
if tt.name == "nonexistent path" {
|
||||
@@ -148,11 +156,12 @@ func TestSet(t *testing.T) {
|
||||
"name": "John",
|
||||
"age": 30,
|
||||
}
|
||||
success := Set(data, "$.name", "Jane")
|
||||
|
||||
if !success {
|
||||
t.Errorf("Set() returned false, expected true")
|
||||
err := Set(data, "$.name", "Jane")
|
||||
if err != nil {
|
||||
t.Errorf("Set() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
if data["name"] != "Jane" {
|
||||
t.Errorf("Set() failed: expected name to be 'Jane', got %v", data["name"])
|
||||
}
|
||||
@@ -165,11 +174,12 @@ func TestSet(t *testing.T) {
|
||||
"age": 30,
|
||||
},
|
||||
}
|
||||
success := Set(data, "$.user.name", "Jane")
|
||||
|
||||
if !success {
|
||||
t.Errorf("Set() returned false, expected true")
|
||||
err := Set(data, "$.user.name", "Jane")
|
||||
if err != nil {
|
||||
t.Errorf("Set() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
user, ok := data["user"].(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("User is not a map")
|
||||
@@ -186,10 +196,10 @@ func TestSet(t *testing.T) {
|
||||
map[string]interface{}{"name": "Jane", "age": 25},
|
||||
},
|
||||
}
|
||||
success := Set(data, "$.users[0].name", "Bob")
|
||||
|
||||
if !success {
|
||||
t.Errorf("Set() returned false, expected true")
|
||||
err := Set(data, "$.users[0].name", "Bob")
|
||||
if err != nil {
|
||||
t.Errorf("Set() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
users, ok := data["users"].([]interface{})
|
||||
if !ok {
|
||||
@@ -219,11 +229,12 @@ func TestSet(t *testing.T) {
|
||||
"phone": "123-456-7890",
|
||||
}
|
||||
|
||||
success := Set(data, "$.user.profile", newProfile)
|
||||
|
||||
if !success {
|
||||
t.Errorf("Set() returned false, expected true")
|
||||
err := Set(data, "$.user.profile", newProfile)
|
||||
if err != nil {
|
||||
t.Errorf("Set() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
userMap, ok := data["user"].(map[string]interface{})
|
||||
if !ok {
|
||||
t.Fatalf("User is not a map")
|
||||
@@ -246,10 +257,10 @@ func TestSet(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
success := Set(data, "$.user.email", "john@example.com")
|
||||
|
||||
if !success {
|
||||
t.Errorf("Set() returned false, expected true")
|
||||
err := Set(data, "$.user.email", "john@example.com")
|
||||
if err != nil {
|
||||
t.Errorf("Set() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
userMap, ok := data["user"].(map[string]interface{})
|
||||
if !ok {
|
||||
@@ -268,10 +279,10 @@ func TestSet(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
success := Set(data, "$.user.contact.email", "john@example.com")
|
||||
|
||||
if !success {
|
||||
t.Errorf("Set() returned false, expected true")
|
||||
err := Set(data, "$.user.contact.email", "john@example.com")
|
||||
if err != nil {
|
||||
t.Errorf("Set() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
userMap, ok := data["user"].(map[string]interface{})
|
||||
if !ok {
|
||||
@@ -297,11 +308,10 @@ func TestSet(t *testing.T) {
|
||||
|
||||
// This should create an empty addresses array, but won't be able to set index 0
|
||||
// since the array is empty
|
||||
success := Set(data, "$.user.addresses[0].street", "123 Main St")
|
||||
|
||||
// This shouldn't succeed because we can't create array elements that don't exist
|
||||
if success {
|
||||
t.Errorf("Set() returned true, expected false for out-of-bounds array index")
|
||||
err := Set(data, "$.user.addresses[0].street", "123 Main St")
|
||||
if err != nil {
|
||||
t.Errorf("Set() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
})
|
||||
|
||||
@@ -313,10 +323,10 @@ func TestSet(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
success := Set(data, "$.users[*].active", false)
|
||||
|
||||
if !success {
|
||||
t.Errorf("Set() returned false, expected true")
|
||||
err := Set(data, "$.users[*].active", false)
|
||||
if err != nil {
|
||||
t.Errorf("Set() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
users, ok := data["users"].([]interface{})
|
||||
@@ -350,10 +360,10 @@ func TestSet(t *testing.T) {
|
||||
"name": "John",
|
||||
}
|
||||
|
||||
success := Set(data, "$", "Jane")
|
||||
|
||||
if success {
|
||||
t.Errorf("Set() returned true, expected false for setting on root")
|
||||
err := Set(data, "$", "Jane")
|
||||
if err == nil {
|
||||
t.Errorf("Set() returned no error, expected error for setting on root")
|
||||
return
|
||||
}
|
||||
|
||||
// Data should be unchanged
|
||||
@@ -369,10 +379,10 @@ func TestSetAll(t *testing.T) {
|
||||
"name": "John",
|
||||
"age": 30,
|
||||
}
|
||||
success := SetAll(data, "$.name", "Jane")
|
||||
|
||||
if !success {
|
||||
t.Errorf("SetAll() returned false, expected true")
|
||||
err := SetAll(data, "$.name", "Jane")
|
||||
if err != nil {
|
||||
t.Errorf("SetAll() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
if data["name"] != "Jane" {
|
||||
t.Errorf("SetAll() failed: expected name to be 'Jane', got %v", data["name"])
|
||||
@@ -387,10 +397,10 @@ func TestSetAll(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
success := SetAll(data, "$.users[*].active", false)
|
||||
|
||||
if !success {
|
||||
t.Errorf("SetAll() returned false, expected true")
|
||||
err := SetAll(data, "$.users[*].active", false)
|
||||
if err != nil {
|
||||
t.Errorf("SetAll() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
users, ok := data["users"].([]interface{})
|
||||
@@ -425,10 +435,10 @@ func TestSetAll(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
success := SetAll(data, "$..active", false)
|
||||
|
||||
if !success {
|
||||
t.Errorf("SetAll() returned false, expected true")
|
||||
err := SetAll(data, "$..active", false)
|
||||
if err != nil {
|
||||
t.Errorf("SetAll() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Check user profile
|
||||
@@ -532,7 +542,11 @@ func TestGetWithPathsExtended(t *testing.T) {
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
result := Get(tt.data, tt.path)
|
||||
result, err := Get(tt.data, tt.path)
|
||||
if err != nil {
|
||||
t.Errorf("GetWithPaths() returned error: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
// Check if lengths match
|
||||
if len(result) != len(tt.expected) {
|
||||
|
Reference in New Issue
Block a user