Merge branch 'org_api_2' into org_api_merge_2

This commit is contained in:
Iraq Jaber
2025-05-30 18:21:06 +02:00
8 changed files with 78 additions and 49 deletions

View File

@@ -47,3 +47,4 @@ func OrgMetadataQueryToQuery(metadataQuery *meta_pb.MetadataQuery) (query.Search
return nil, zerrors.ThrowInvalidArgument(nil, "METAD-fdg23", "List.Query.Invalid") return nil, zerrors.ThrowInvalidArgument(nil, "METAD-fdg23", "List.Query.Invalid")
} }
} }

View File

@@ -159,3 +159,4 @@ func DomainValidationTypeToDomain(validationType org_pb.DomainValidationType) do
return domain.OrgDomainValidationTypeUnspecified return domain.OrgDomainValidationTypeUnspecified
} }
} }

View File

@@ -284,3 +284,4 @@ func ListOrgMetadataToDomain(systemDefaults systemdefaults.SystemDefaults, reque
Queries: queries, Queries: queries,
}, nil }, nil
} }

View File

@@ -110,11 +110,15 @@ func TestServer_CreateOrganization(t *testing.T) {
}, },
want: &v2beta_org.CreateOrganizationResponse{ want: &v2beta_org.CreateOrganizationResponse{
Id: integration.NotEmpty, Id: integration.NotEmpty,
CreatedAdmins: []*v2beta_org.CreatedAdmin{ OrganizationAdmins: []*org.OrganizationAdmin{
{ {
UserId: integration.NotEmpty, OrganizationAdmin: &org.OrganizationAdmin_CreatedAdmin{
EmailCode: gu.Ptr(integration.NotEmpty), CreatedAdmin: &org.CreatedAdmin{
PhoneCode: nil, UserId: integration.NotEmpty,
EmailCode: gu.Ptr(integration.NotEmpty),
PhoneCode: nil,
},
},
}, },
}, },
}, },
@@ -153,11 +157,22 @@ func TestServer_CreateOrganization(t *testing.T) {
}, },
}, },
}, },
want: &v2beta_org.CreateOrganizationResponse{ want: &org.CreateOrganizationResponse{
CreatedAdmins: []*v2beta_org.CreatedAdmin{ // OrganizationId: integration.NotEmpty,
// a single admin is expected, because the first provided already exists OrganizationAdmins: []*org.OrganizationAdmin{
{ {
UserId: integration.NotEmpty, OrganizationAdmin: &org.OrganizationAdmin_AssignedAdmin{
AssignedAdmin: &org.AssignedAdmin{
UserId: User.GetUserId(),
},
},
},
{
OrganizationAdmin: &org.OrganizationAdmin_CreatedAdmin{
CreatedAdmin: &org.CreatedAdmin{
UserId: integration.NotEmpty,
},
},
}, },
}, },
}, },
@@ -180,10 +195,14 @@ func TestServer_CreateOrganization(t *testing.T) {
// organization id must be the same as the resourceOwner // organization id must be the same as the resourceOwner
// check the admins // check the admins
require.Len(t, got.GetCreatedAdmins(), len(tt.want.GetCreatedAdmins())) for i, admin := range tt.want.GetOrganizationAdmins() {
for i, admin := range tt.want.GetCreatedAdmins() { gotAdmin := got.GetOrganizationAdmins()[i].OrganizationAdmin
gotAdmin := got.GetCreatedAdmins()[i] switch admin := admin.OrganizationAdmin.(type) {
assertCreatedAdmin(t, admin, gotAdmin) case *org.OrganizationAdmin_CreatedAdmin:
assertCreatedAdmin(t, admin.CreatedAdmin, gotAdmin.(*org.OrganizationAdmin_CreatedAdmin).CreatedAdmin)
case *org.OrganizationAdmin_AssignedAdmin:
assert.Equal(t, admin.AssignedAdmin.GetUserId(), gotAdmin.(*org.OrganizationAdmin_AssignedAdmin).AssignedAdmin.GetUserId())
}
} }
}) })
} }
@@ -681,7 +700,7 @@ func TestServer_DeactivateReactivateNonExistentOrganization(t *testing.T) {
require.Contains(t, err.Error(), "Organisation not found") require.Contains(t, err.Error(), "Organisation not found")
} }
func TestServer_ActivateOrganization(t *testing.T) { func TestServer_DeactivateReactivateOrganization(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
ctx context.Context ctx context.Context
@@ -723,8 +742,8 @@ func TestServer_ActivateOrganization(t *testing.T) {
}, },
}, },
}) })
require.NoError(ttt, err) require.NoError(t, err)
require.Equal(ttt, v2beta_org.OrgState_ORG_STATE_INACTIVE, listOrgRes.Organizations[0].State) require.Equal(t, v2beta_org.OrgState_ORG_STATE_INACTIVE, listOrgRes.Organizations[0].State)
}, retryDuration, tick, "timeout waiting for expected organizations being created") }, retryDuration, tick, "timeout waiting for expected organizations being created")
return orgId return orgId
@@ -853,7 +872,7 @@ func TestServer_DeactivateOrganization(t *testing.T) {
now := time.Now() now := time.Now()
assert.WithinRange(t, gotCD, now.Add(-time.Minute), now.Add(time.Minute)) assert.WithinRange(t, gotCD, now.Add(-time.Minute), now.Add(time.Minute))
// 3. check organization state is deactivated // 4. check organization state is deactivated
retryDuration, tick := integration.WaitForAndTickWithMaxDuration(CTX, 10*time.Minute) retryDuration, tick := integration.WaitForAndTickWithMaxDuration(CTX, 10*time.Minute)
require.EventuallyWithT(t, func(ttt *assert.CollectT) { require.EventuallyWithT(t, func(ttt *assert.CollectT) {
listOrgRes, err := Client.ListOrganizations(CTX, &v2beta_org.ListOrganizationsRequest{ listOrgRes, err := Client.ListOrganizations(CTX, &v2beta_org.ListOrganizationsRequest{
@@ -903,7 +922,7 @@ func TestServer_AddOerganizationDomain(t *testing.T) {
}{ }{
{ {
name: "add org domain, happy path", name: "add org domain, happy path",
domain: "www.domain.com", domain: gofakeit.URL(),
testFunc: func() string { testFunc: func() string {
orgs, _, err := createOrgs(CTX, Client, 1) orgs, _, err := createOrgs(CTX, Client, 1)
if err != nil { if err != nil {
@@ -916,7 +935,7 @@ func TestServer_AddOerganizationDomain(t *testing.T) {
}, },
{ {
name: "add org domain, twice", name: "add org domain, twice",
domain: "www.domain.com", domain: gofakeit.URL(),
testFunc: func() string { testFunc: func() string {
// 1. create organization // 1. create organization
orgs, _, err := createOrgs(CTX, Client, 1) orgs, _, err := createOrgs(CTX, Client, 1)
@@ -926,7 +945,7 @@ func TestServer_AddOerganizationDomain(t *testing.T) {
} }
orgId := orgs[0].Id orgId := orgs[0].Id
domain := "www.domain.com" domain := gofakeit.URL()
// 2. add domain // 2. add domain
addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{ addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{
OrganizationId: orgId, OrganizationId: orgId,
@@ -956,16 +975,15 @@ func TestServer_AddOerganizationDomain(t *testing.T) {
return orgId return orgId
}, },
err: errors.New("AlreadyExists"),
}, },
{ {
name: "add org domain to non existent org", name: "add org domain to non existent org",
domain: "www.domain.com", domain: gofakeit.URL(),
testFunc: func() string { testFunc: func() string {
return "non-existing-org-id" return "non-existing-org-id"
}, },
// BUG: // BUG: should return a error
err: errors.New("Domain already exists"), err: nil,
}, },
} }
@@ -1000,7 +1018,7 @@ func TestServer_ListOrganizationDomain(t *testing.T) {
}{ }{
{ {
name: "list org domain, happy path", name: "list org domain, happy path",
domain: "www.domain.com", domain: gofakeit.URL(),
testFunc: func() string { testFunc: func() string {
// 1. create organization // 1. create organization
orgs, _, err := createOrgs(CTX, Client, 1) orgs, _, err := createOrgs(CTX, Client, 1)
@@ -1010,7 +1028,7 @@ func TestServer_ListOrganizationDomain(t *testing.T) {
} }
orgId := orgs[0].Id orgId := orgs[0].Id
domain := "www.domain.com" domain := gofakeit.URL()
// 2. add domain // 2. add domain
addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{ addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{
OrganizationId: orgId, OrganizationId: orgId,
@@ -1064,7 +1082,7 @@ func TestServer_DeleteOerganizationDomain(t *testing.T) {
}{ }{
{ {
name: "delete org domain, happy path", name: "delete org domain, happy path",
domain: "www.domain.com", domain: gofakeit.URL(),
testFunc: func() string { testFunc: func() string {
// 1. create organization // 1. create organization
orgs, _, err := createOrgs(CTX, Client, 1) orgs, _, err := createOrgs(CTX, Client, 1)
@@ -1074,7 +1092,7 @@ func TestServer_DeleteOerganizationDomain(t *testing.T) {
} }
orgId := orgs[0].Id orgId := orgs[0].Id
domain := "www.domain.com" domain := gofakeit.URL()
// 2. add domain // 2. add domain
addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{ addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{
OrganizationId: orgId, OrganizationId: orgId,
@@ -1107,7 +1125,7 @@ func TestServer_DeleteOerganizationDomain(t *testing.T) {
}, },
{ {
name: "delete org domain, twice", name: "delete org domain, twice",
domain: "www.domain.com", domain: gofakeit.URL(),
testFunc: func() string { testFunc: func() string {
// 1. create organization // 1. create organization
orgs, _, err := createOrgs(CTX, Client, 1) orgs, _, err := createOrgs(CTX, Client, 1)
@@ -1117,7 +1135,7 @@ func TestServer_DeleteOerganizationDomain(t *testing.T) {
} }
orgId := orgs[0].Id orgId := orgs[0].Id
domain := "www.domain.com" domain := gofakeit.URL()
// 2. add domain // 2. add domain
addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{ addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{
OrganizationId: orgId, OrganizationId: orgId,
@@ -1157,7 +1175,7 @@ func TestServer_DeleteOerganizationDomain(t *testing.T) {
}, },
{ {
name: "delete org domain to non existent org", name: "delete org domain to non existent org",
domain: "www.domain.com", domain: gofakeit.URL(),
testFunc: func() string { testFunc: func() string {
return "non-existing-org-id" return "non-existing-org-id"
}, },
@@ -1202,7 +1220,7 @@ func TestServer_AddListDeleteOrganizationDomain(t *testing.T) {
orgId := orgs[0].Id orgId := orgs[0].Id
// ctx := Instance.WithAuthorization(CTX, integration.UserTypeIAMOwner) // ctx := Instance.WithAuthorization(CTX, integration.UserTypeIAMOwner)
domain := "www.domain.com" domain := gofakeit.URL()
// 2. add domain // 2. add domain
addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{ addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{
OrganizationId: orgId, OrganizationId: orgId,
@@ -1252,7 +1270,7 @@ func TestServer_AddListDeleteOrganizationDomain(t *testing.T) {
} }
orgId := orgs[0].Id orgId := orgs[0].Id
domain := "www.domain2.com" domain := gofakeit.URL()
// 2. add domain // 2. add domain
addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{ addOrgDomainRes, err := Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{
OrganizationId: orgId, OrganizationId: orgId,
@@ -1339,7 +1357,7 @@ func TestServer_ValidateOrganizationDomain(t *testing.T) {
require.NoError(t, err) require.NoError(t, err)
} }
domain := "www.domainnn.com" domain := gofakeit.URL()
_, err = Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{ _, err = Client.AddOrganizationDomain(CTX, &v2beta_org.AddOrganizationDomainRequest{
OrganizationId: orgId, OrganizationId: orgId,
Domain: domain, Domain: domain,

View File

@@ -283,3 +283,4 @@ func (s *Server) getClaimedUserIDsOfOrgDomain(ctx context.Context, orgDomain, or
} }
return userIDs, nil return userIDs, nil
} }

View File

@@ -13,12 +13,13 @@ import (
"github.com/zitadel/zitadel/internal/domain" "github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/zerrors" "github.com/zitadel/zitadel/internal/zerrors"
org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta" org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
v2beta_org "github.com/zitadel/zitadel/pkg/grpc/org/v2beta"
user "github.com/zitadel/zitadel/pkg/grpc/user/v2beta" user "github.com/zitadel/zitadel/pkg/grpc/user/v2beta"
) )
func Test_createOrganizationRequestToCommand(t *testing.T) { func Test_createOrganizationRequestToCommand(t *testing.T) {
type args struct { type args struct {
request *org.CreateOrganizationRequest request *v2beta_org.CreateOrganizationRequest
} }
tests := []struct { tests := []struct {
name string name string
@@ -29,9 +30,9 @@ func Test_createOrganizationRequestToCommand(t *testing.T) {
{ {
name: "nil user", name: "nil user",
args: args{ args: args{
request: &org.CreateOrganizationRequest{ request: &v2beta_org.CreateOrganizationRequest{
Name: "name", Name: "name",
Admins: []*org.CreateOrganizationRequest_Admin{ Admins: []*v2beta_org.CreateOrganizationRequest_Admin{
{}, {},
}, },
}, },
@@ -41,11 +42,11 @@ func Test_createOrganizationRequestToCommand(t *testing.T) {
{ {
name: "user ID", name: "user ID",
args: args{ args: args{
request: &org.CreateOrganizationRequest{ request: &v2beta_org.CreateOrganizationRequest{
Name: "name", Name: "name",
Admins: []*org.CreateOrganizationRequest_Admin{ Admins: []*v2beta_org.CreateOrganizationRequest_Admin{
{ {
UserType: &org.CreateOrganizationRequest_Admin_UserId{ UserType: &v2beta_org.CreateOrganizationRequest_Admin_UserId{
UserId: "userID", UserId: "userID",
}, },
Roles: nil, Roles: nil,
@@ -66,11 +67,11 @@ func Test_createOrganizationRequestToCommand(t *testing.T) {
{ {
name: "human user", name: "human user",
args: args{ args: args{
request: &org.CreateOrganizationRequest{ request: &v2beta_org.CreateOrganizationRequest{
Name: "name", Name: "name",
Admins: []*org.CreateOrganizationRequest_Admin{ Admins: []*v2beta_org.CreateOrganizationRequest_Admin{
{ {
UserType: &org.CreateOrganizationRequest_Admin_Human{ UserType: &v2beta_org.CreateOrganizationRequest_Admin_Human{
Human: &user.AddHumanUserRequest{ Human: &user.AddHumanUserRequest{
Profile: &user.SetHumanProfile{ Profile: &user.SetHumanProfile{
GivenName: "firstname", GivenName: "firstname",
@@ -123,7 +124,7 @@ func Test_createdOrganizationToPb(t *testing.T) {
tests := []struct { tests := []struct {
name string name string
args args args args
want *org.CreateOrganizationResponse want *v2beta_org.CreateOrganizationResponse
wantErr error wantErr error
}{ }{
{ {
@@ -135,8 +136,8 @@ func Test_createdOrganizationToPb(t *testing.T) {
EventDate: now, EventDate: now,
ResourceOwner: "orgID", ResourceOwner: "orgID",
}, },
CreatedAdmins: []*command.CreatedOrgAdmin{ OrgAdmins: []command.OrgAdmin{
{ &command.CreatedOrgAdmin{
ID: "id", ID: "id",
EmailCode: gu.Ptr("emailCode"), EmailCode: gu.Ptr("emailCode"),
PhoneCode: gu.Ptr("phoneCode"), PhoneCode: gu.Ptr("phoneCode"),
@@ -147,11 +148,15 @@ func Test_createdOrganizationToPb(t *testing.T) {
want: &org.CreateOrganizationResponse{ want: &org.CreateOrganizationResponse{
CreationDate: timestamppb.New(now), CreationDate: timestamppb.New(now),
Id: "orgID", Id: "orgID",
CreatedAdmins: []*org.CreatedAdmin{ OrganizationAdmins: []*org.OrganizationAdmin{
{ {
UserId: "id", OrganizationAdmin: &org.OrganizationAdmin_CreatedAdmin{
EmailCode: gu.Ptr("emailCode"), CreatedAdmin: &org.CreatedAdmin{
PhoneCode: gu.Ptr("phoneCode"), UserId: "id",
EmailCode: gu.Ptr("emailCode"),
PhoneCode: gu.Ptr("phoneCode"),
},
},
}, },
}, },
}, },

View File

@@ -212,6 +212,7 @@ func (c *orgSetupCommands) createdAdmins() []OrgAdmin {
users := make([]OrgAdmin, 0, len(c.admins)) users := make([]OrgAdmin, 0, len(c.admins))
for _, admin := range c.admins { for _, admin := range c.admins {
if admin.ID != "" && admin.Human == nil { if admin.ID != "" && admin.Human == nil {
users = append(users, &AssignedOrgAdmin{ID: admin.ID})
continue continue
} }
if admin.Human != nil { if admin.Human != nil {

View File

@@ -959,3 +959,4 @@ message DeleteOrganizationMetadataResponse{
} }
]; ];
} }