From 0918a4f6392c16dae4f78e2c5b66dc891fce6d79 Mon Sep 17 00:00:00 2001 From: Manas Choksi <162600900+choksi2212@users.noreply.github.com> Date: Tue, 20 Oct 2026 02:46:23 +0530 Subject: [PATCH] fix: find user groups by their friendly name in the admin search (#1854) Signed-off-by: choksi2212 Co-authored-by: choksi2212 --- .../internal/service/user_group_service.go | 3 +- .../service/user_group_service_test.go | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 backend/internal/service/user_group_service_test.go diff --git a/backend/internal/service/user_group_service.go b/backend/internal/service/user_group_service.go index 44eef737..096d958a 100644 --- a/backend/internal/service/user_group_service.go +++ b/backend/internal/service/user_group_service.go @@ -35,7 +35,8 @@ func (s *UserGroupService) List(ctx context.Context, name string, listRequestOpt Model(&model.UserGroup{}) if name != "" { - query = query.Where("name LIKE ?", "%"+name+"%") + searchPattern := "%" + name + "%" + query = query.Where("name LIKE ? OR friendly_name LIKE ?", searchPattern, searchPattern) } // As userCount is not a column we need to manually sort it diff --git a/backend/internal/service/user_group_service_test.go b/backend/internal/service/user_group_service_test.go new file mode 100644 index 00000000..351db318 --- /dev/null +++ b/backend/internal/service/user_group_service_test.go @@ -0,0 +1,39 @@ +package service + +import ( + "testing" + + "github.com/stretchr/testify/require" + + "github.com/pocket-id/pocket-id/backend/internal/dto" + "github.com/pocket-id/pocket-id/backend/internal/utils" +) + +func TestUserGroupListSearchMatchesFriendlyName(t *testing.T) { + _, groupService := newTestUserService(t) + + _, err := groupService.Create(t.Context(), dto.UserGroupCreateDto{ + Name: "qa_team", + FriendlyName: "QA Engineering", + }) + require.NoError(t, err) + + // A search for the friendly name must find the group, since the + // friendly name is the name shown in the UI. + groups, pagination, err := groupService.List(t.Context(), "Engineering", utils.ListRequestOptions{}) + require.NoError(t, err) + require.Len(t, groups, 1) + require.Equal(t, "QA Engineering", groups[0].FriendlyName) + require.EqualValues(t, 1, pagination.TotalItems) + + // The internal name must remain searchable too. + groups, _, err = groupService.List(t.Context(), "qa_team", utils.ListRequestOptions{}) + require.NoError(t, err) + require.Len(t, groups, 1) + require.Equal(t, "QA Engineering", groups[0].FriendlyName) + + // A fragment matching neither field returns nothing. + groups, _, err = groupService.List(t.Context(), "Design", utils.ListRequestOptions{}) + require.NoError(t, err) + require.Empty(t, groups) +}