convert: Add UserByMetadata to GRPC converter

This commit is contained in:
Marco Ardizzone
2025-08-07 10:38:14 +02:00
parent bb094c27ef
commit 37c396db4a
2 changed files with 101 additions and 2 deletions

View File

@@ -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,

View File

@@ -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)
}
})
}
}