Files
zitadel/internal/api/grpc/internal_permission/v2/query_test.go
T
Livio SpringandGitHub 4b6add514f fix(api): implement missing filters on ListAdministrators endpoint (#11319)
# Which Problems Are Solved

A customer reported that multiple filters on the ListAdministrators
endpoint were returning a `List.Query.Invalid` error.
They were missing the implementation.

# How the Problems Are Solved

Implement `and`, `or`, `not` and `role` filters.

# Additional Changes

None

# Additional Context

- reported by customer
- requires backport to v4.x
2026-01-12 06:22:34 +00:00

104 lines
2.8 KiB
Go

package internal_permission
import (
"testing"
"time"
"github.com/stretchr/testify/assert"
"google.golang.org/protobuf/types/known/timestamppb"
"github.com/zitadel/zitadel/internal/query"
"github.com/zitadel/zitadel/internal/zerrors"
"github.com/zitadel/zitadel/pkg/grpc/filter/v2"
"github.com/zitadel/zitadel/pkg/grpc/internal_permission/v2"
)
func Test_administratorFilterToQuery(t *testing.T) {
now := time.Now().UTC()
type args struct {
filter *internal_permission.AdministratorSearchFilter
level uint8
}
tests := []struct {
name string
args args
want query.SearchQuery
wantErr error
}{
{
name: "max nested queries",
args: args{
filter: &internal_permission.AdministratorSearchFilter{
Filter: &internal_permission.AdministratorSearchFilter_And{
And: &internal_permission.AndFilter{
Queries: []*internal_permission.AdministratorSearchFilter{
{
Filter: &internal_permission.AdministratorSearchFilter_CreationDate{
CreationDate: &filter.TimestampFilter{
Timestamp: timestamppb.New(now),
},
},
},
},
},
},
},
level: 19,
},
want: func() query.SearchQuery {
dateQuery, _ := query.NewMembershipCreationDateQuery(now, query.TimestampEquals)
q, _ := query.NewAndQuery(dateQuery)
return q
}(),
},
{
name: "too many nested queries",
args: args{
filter: &internal_permission.AdministratorSearchFilter{
Filter: &internal_permission.AdministratorSearchFilter_And{
And: &internal_permission.AndFilter{
Queries: []*internal_permission.AdministratorSearchFilter{
{
Filter: &internal_permission.AdministratorSearchFilter_And{
And: &internal_permission.AndFilter{
Queries: []*internal_permission.AdministratorSearchFilter{
{
Filter: &internal_permission.AdministratorSearchFilter_CreationDate{
CreationDate: &filter.TimestampFilter{
Timestamp: timestamppb.New(time.Now().UTC()),
},
},
},
},
},
},
},
},
},
},
},
level: 19,
},
wantErr: zerrors.ThrowInvalidArgument(nil, "PERM-zsQ97", "Errors.Query.TooManyNestingLevels"),
},
{
name: "invalid filter",
args: args{
filter: &internal_permission.AdministratorSearchFilter{
Filter: nil,
},
level: 0,
},
wantErr: zerrors.ThrowInvalidArgument(nil, "PERM-vR9nC", "List.Query.Invalid"),
},
// rest is tested in integration tests
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
got, err := administratorFilterToQuery(tt.args.filter, tt.args.level)
assert.Equal(t, tt.want, got)
assert.ErrorIs(t, err, tt.wantErr)
})
}
}