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:
Tim Möhlmann
2023-10-25 22:20:12 +03:00
committed by GitHub
parent b9061ffadc
commit ad26ca88d7
5 changed files with 136 additions and 2 deletions

View File

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

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