mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 20:57:31 +00:00
feat(system api): list instances by domains (#6806)
Allow to list instances by their domains on the system API. closes #6785
This commit is contained in:
@@ -63,6 +63,8 @@ func InstanceQueryToModel(searchQuery *instance_pb.Query) (query.SearchQuery, er
|
||||
switch q := searchQuery.Query.(type) {
|
||||
case *instance_pb.Query_IdQuery:
|
||||
return query.NewInstanceIDsListSearchQuery(q.IdQuery.Ids...)
|
||||
case *instance_pb.Query_DomainQuery:
|
||||
return query.NewInstanceDomainsListSearchQuery(q.DomainQuery.Domains...)
|
||||
default:
|
||||
return nil, errors.ThrowInvalidArgument(nil, "INST-3m0se", "List.Query.Invalid")
|
||||
}
|
||||
|
109
internal/api/grpc/system/instance_integration_test.go
Normal file
109
internal/api/grpc/system/instance_integration_test.go
Normal file
@@ -0,0 +1,109 @@
|
||||
//go:build integration
|
||||
|
||||
package system_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"github.com/zitadel/zitadel/pkg/grpc/instance"
|
||||
"github.com/zitadel/zitadel/pkg/grpc/object"
|
||||
system_pb "github.com/zitadel/zitadel/pkg/grpc/system"
|
||||
)
|
||||
|
||||
func TestServer_ListInstances(t *testing.T) {
|
||||
domain, instanceID, _ := Tester.UseIsolatedInstance(CTX, SystemCTX)
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
req *system_pb.ListInstancesRequest
|
||||
want []*instance.Instance
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "empty query error",
|
||||
req: &system_pb.ListInstancesRequest{
|
||||
Queries: []*instance.Query{{}},
|
||||
},
|
||||
wantErr: true,
|
||||
},
|
||||
{
|
||||
name: "non-existing id",
|
||||
req: &system_pb.ListInstancesRequest{
|
||||
Queries: []*instance.Query{{
|
||||
Query: &instance.Query_IdQuery{
|
||||
IdQuery: &instance.IdsQuery{
|
||||
Ids: []string{"foo"},
|
||||
},
|
||||
},
|
||||
}},
|
||||
},
|
||||
want: []*instance.Instance{},
|
||||
},
|
||||
{
|
||||
name: "get 1 by id",
|
||||
req: &system_pb.ListInstancesRequest{
|
||||
Query: &object.ListQuery{
|
||||
Limit: 1,
|
||||
},
|
||||
Queries: []*instance.Query{{
|
||||
Query: &instance.Query_IdQuery{
|
||||
IdQuery: &instance.IdsQuery{
|
||||
Ids: []string{instanceID},
|
||||
},
|
||||
},
|
||||
}},
|
||||
},
|
||||
want: []*instance.Instance{{
|
||||
Id: instanceID,
|
||||
}},
|
||||
},
|
||||
{
|
||||
name: "non-existing domain",
|
||||
req: &system_pb.ListInstancesRequest{
|
||||
Queries: []*instance.Query{{
|
||||
Query: &instance.Query_DomainQuery{
|
||||
DomainQuery: &instance.DomainsQuery{
|
||||
Domains: []string{"foo"},
|
||||
},
|
||||
},
|
||||
}},
|
||||
},
|
||||
want: []*instance.Instance{},
|
||||
},
|
||||
{
|
||||
name: "get 1 by domain",
|
||||
req: &system_pb.ListInstancesRequest{
|
||||
Query: &object.ListQuery{
|
||||
Limit: 1,
|
||||
},
|
||||
Queries: []*instance.Query{{
|
||||
Query: &instance.Query_DomainQuery{
|
||||
DomainQuery: &instance.DomainsQuery{
|
||||
Domains: []string{domain},
|
||||
},
|
||||
},
|
||||
}},
|
||||
},
|
||||
want: []*instance.Instance{{
|
||||
Id: instanceID,
|
||||
}},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
resp, err := Tester.Client.System.ListInstances(SystemCTX, tt.req)
|
||||
if tt.wantErr {
|
||||
require.Error(t, err)
|
||||
return
|
||||
}
|
||||
require.NoError(t, err)
|
||||
got := resp.GetResult()
|
||||
assert.Len(t, got, len(tt.want))
|
||||
for i := 0; i < len(tt.want); i++ {
|
||||
assert.Equalf(t, tt.want[i].GetId(), got[i].GetId(), "instance[%d] id", i)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user