state: write every user column in UpdateUser

This commit is contained in:
Kristoffer Dalby committed 2026-10-30 14:55:37 +00:00
1 parent ffc668d48e
commit 8593547c9d
2 files changed
+42 -2

No files matched your search

+39
View File
@@ -2475,3 +2475,42 @@ func TestReauthReplacesReportedTags(t *testing.T) {
assert.Equal(t, want, row.Hostinfo.RequestTags)
}
}
func TestUpdateUserClearsColumns(t *testing.T) {
_, s, nodeID := persistTestSetup(t)
t.Cleanup(func() { _ = s.Close() })
node, ok := s.GetNodeByID(nodeID)
require.True(t, ok)
userID := types.UserID(node.UserID().Get())
_, _, err := s.UpdateUser(userID, func(user *types.User) error {
user.DisplayName = "Display"
user.Email = "persist@example.com"
user.ProfilePicURL = "https://example.com/picture"
return nil
})
require.NoError(t, err)
_, _, err = s.RenameUser(userID, "renamed")
require.NoError(t, err)
user, err := s.GetUserByID(userID)
require.NoError(t, err)
assert.Equal(t, "Display", user.DisplayName)
assert.Equal(t, "persist@example.com", user.Email)
assert.Equal(t, "https://example.com/picture", user.ProfilePicURL)
_, _, err = s.UpdateUser(userID, func(user *types.User) error {
user.DisplayName = ""
user.Email = ""
user.ProfilePicURL = ""
return nil
})
require.NoError(t, err)
user, err = s.GetUserByID(userID)
require.NoError(t, err)
assert.Empty(t, user.DisplayName)
assert.Empty(t, user.Email)
assert.Empty(t, user.ProfilePicURL)
assert.Equal(t, "renamed", user.Name)
}
+3 -2
View File
@@ -593,8 +593,9 @@ func (s *State) UpdateUser(userID types.UserID, updateFn func(*types.User) error
return nil, err
}
// Use Updates() to only update modified fields, preserving unchanged values.
err = tx.Updates(user).Error
// Select every column so cleared fields are written. Save would also
// insert the row again if a delete removed it meanwhile.
err = tx.Select("*").Updates(user).Error //nolint:unqueryvet // UPDATE, not a read
if err != nil {
return nil, fmt.Errorf("updating user: %w", err)
}