From 37c396db4a1e1553371c125595b27e656d257a00 Mon Sep 17 00:00:00 2001 From: Marco Ardizzone Date: Thu, 7 Aug 2025 10:38:14 +0200 Subject: [PATCH] convert: Add UserByMetadata to GRPC converter --- .../api/grpc/user/v2beta/convert/metadata.go | 20 ++++- .../grpc/user/v2beta/convert/metadata_test.go | 83 +++++++++++++++++++ 2 files changed, 101 insertions(+), 2 deletions(-) diff --git a/internal/api/grpc/user/v2beta/convert/metadata.go b/internal/api/grpc/user/v2beta/convert/metadata.go index afb3bab949..ce56d34174 100644 --- a/internal/api/grpc/user/v2beta/convert/metadata.go +++ b/internal/api/grpc/user/v2beta/convert/metadata.go @@ -9,7 +9,23 @@ import ( user "github.com/zitadel/zitadel/pkg/grpc/user/v2beta" ) -func ListUsersByMetadataRequestToModel(req *user.ListUsersByMetadataRequest, sysDefaults systemdefaults.SystemDefaults) (*query.UserSearchQueries, error) { +func UsersByMetadataModelToGRPC(usersAndMetas []*query.UserByMetadata, assetPrefix string) []*user.UserByMetadata { + toReturn := make([]*user.UserByMetadata, len(usersAndMetas)) + + for i, userAndMeta := range usersAndMetas { + userWithMeta := &user.UserByMetadata{ + User: UserToPb(userAndMeta.User, assetPrefix), + Key: userAndMeta.Key, + Value: userAndMeta.Value, + } + + toReturn[i] = userWithMeta + } + + return toReturn +} + +func ListUsersByMetadataRequestToModel(req *user.ListUsersByMetadataRequest, sysDefaults systemdefaults.SystemDefaults) (*query.UsersByMetadataSearchQueries, error) { offset, limit, asc, err := filter.PaginationPbToQuery(sysDefaults, req.GetPagination()) if err != nil { return nil, err @@ -20,7 +36,7 @@ func ListUsersByMetadataRequestToModel(req *user.ListUsersByMetadataRequest, sys return nil, err } - return &query.UserSearchQueries{ + return &query.UsersByMetadataSearchQueries{ SearchRequest: query.SearchRequest{ Offset: offset, Limit: limit, diff --git a/internal/api/grpc/user/v2beta/convert/metadata_test.go b/internal/api/grpc/user/v2beta/convert/metadata_test.go index d10fe65664..fe2f839507 100644 --- a/internal/api/grpc/user/v2beta/convert/metadata_test.go +++ b/internal/api/grpc/user/v2beta/convert/metadata_test.go @@ -271,3 +271,86 @@ func Test_ListUsersByMetadataRequestToModel(t *testing.T) { assert.Nil(t, model) }) } +func Test_UsersByMetadataModelToGRPC(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + inputUsers []*query.UserByMetadata + inputAssetPrefix string + expectedUsers []*user.UserByMetadata + }{ + { + name: "nil input", + inputAssetPrefix: "prefix", + expectedUsers: nil, + }, + { + name: "empty UsersByMeta", + inputUsers: []*query.UserByMetadata{}, + inputAssetPrefix: "prefix", + expectedUsers: []*user.UserByMetadata{}, + }, + { + name: "single user", + inputUsers: []*query.UserByMetadata{ + { + User: &query.User{ID: "user1", Username: "testuser"}, + Key: "key1", + Value: []byte("value1"), + }, + }, + inputAssetPrefix: "prefix", + expectedUsers: []*user.UserByMetadata{ + { + User: &user.User{UserId: "user1", Username: "testuser"}, + Key: "key1", + Value: []byte("value1"), + }, + }, + }, + { + name: "multiple users", + inputUsers: []*query.UserByMetadata{ + { + User: &query.User{ID: "u1", Username: "user1"}, + Key: "k1", + Value: []byte("v1"), + }, + { + User: &query.User{ID: "u2", Username: "user2"}, + Key: "k2", + Value: []byte("v2"), + }, + }, + inputAssetPrefix: "prefix", + expectedUsers: []*user.UserByMetadata{ + { + User: &user.User{UserId: "u1", Username: "user1"}, + Key: "k1", + Value: []byte("v1"), + }, + { + User: &user.User{UserId: "u2", Username: "user2"}, + Key: "k2", + Value: []byte("v2"), + }, + }, + }, + } + + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + t.Parallel() + result := UsersByMetadataModelToGRPC(tc.inputUsers, tc.inputAssetPrefix) + + require.Len(t, result, len(tc.expectedUsers)) + for i := range tc.expectedUsers { + assert.Equal(t, tc.expectedUsers[i].User.UserId, result[i].User.UserId) + assert.Equal(t, tc.expectedUsers[i].User.Username, result[i].User.Username) + assert.Equal(t, tc.expectedUsers[i].Key, result[i].Key) + assert.Equal(t, tc.expectedUsers[i].Value, result[i].Value) + } + }) + } +}