package user import ( "encoding/json" "testing" ) func TestUpdateUserForm_UnmarshalJSON_ProfileImage(t *testing.T) { t.Run("omitted profile_image is not treated as an update", func(t *testing.T) { var form UpdateUserForm err := json.Unmarshal([]byte(`{"full_name":"Jane Doe"}`), &form) if err != nil { t.Fatalf("unmarshal failed: %v", err) } if form.isProfileImageSet() { t.Fatal("expected profile image to be unset when omitted") } }) t.Run("null profile_image clears the image", func(t *testing.T) { var form UpdateUserForm err := json.Unmarshal([]byte(`{"profile_image":null}`), &form) if err != nil { t.Fatalf("unmarshal failed: %v", err) } if !form.isProfileImageSet() { t.Fatal("expected profile image to be marked as set") } if form.ProfileImage != nil { t.Fatalf("expected nil profile image, got %#v", form.ProfileImage) } }) t.Run("profile image url is preserved", func(t *testing.T) { var form UpdateUserForm err := json.Unmarshal([]byte(`{"profile_image":"https://example.com/avatar.png"}`), &form) if err != nil { t.Fatalf("unmarshal failed: %v", err) } if !form.isProfileImageSet() { t.Fatal("expected profile image to be marked as set") } if form.ProfileImage == nil || *form.ProfileImage != "https://example.com/avatar.png" { t.Fatalf("unexpected profile image: %#v", form.ProfileImage) } }) }