mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-12 09:27:33 +00:00
fix: v2 human command (#3435)
* add/register human command done * validations * crypto * move clientid * keys * fix: clientID * remove v2 package * tests * tests running * revert old code * instance domain from ctx * chore: rename zitadel app ids * comments * fix: test
This commit is contained in:
@@ -8,8 +8,9 @@ import (
|
||||
"golang.org/x/text/language"
|
||||
|
||||
"github.com/caos/zitadel/internal/api/authz"
|
||||
"github.com/caos/zitadel/internal/command/preparation"
|
||||
"github.com/caos/zitadel/internal/domain"
|
||||
caos_errs "github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/errors"
|
||||
"github.com/caos/zitadel/internal/eventstore"
|
||||
"github.com/caos/zitadel/internal/eventstore/repository"
|
||||
"github.com/caos/zitadel/internal/eventstore/v1/models"
|
||||
@@ -19,6 +20,271 @@ import (
|
||||
"github.com/caos/zitadel/internal/repository/user"
|
||||
)
|
||||
|
||||
func TestAddMember(t *testing.T) {
|
||||
type args struct {
|
||||
a *org.Aggregate
|
||||
userID string
|
||||
roles []string
|
||||
zitadelRoles []authz.RoleMapping
|
||||
filter preparation.FilterToQueryReducer
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
agg := org.NewAggregate("test", "test")
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
want Want
|
||||
}{
|
||||
{
|
||||
name: "no user id",
|
||||
args: args{
|
||||
a: agg,
|
||||
userID: "",
|
||||
},
|
||||
want: Want{
|
||||
ValidationErr: errors.ThrowInvalidArgument(nil, "ORG-4Mlfs", "Errors.Invalid.Argument"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "no roles",
|
||||
args: args{
|
||||
a: agg,
|
||||
userID: "12342",
|
||||
},
|
||||
want: Want{
|
||||
ValidationErr: errors.ThrowInvalidArgument(nil, "V2-PfYhb", "Errors.Invalid.Argument"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "TODO: invalid roles",
|
||||
args: args{
|
||||
a: agg,
|
||||
userID: "123",
|
||||
roles: []string{"ORG_OWNER"},
|
||||
},
|
||||
want: Want{
|
||||
ValidationErr: errors.ThrowInvalidArgument(nil, "Org-4N8es", ""),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "user not exists",
|
||||
args: args{
|
||||
a: agg,
|
||||
userID: "userID",
|
||||
roles: []string{"ORG_OWNER"},
|
||||
zitadelRoles: []authz.RoleMapping{
|
||||
{
|
||||
Role: "ORG_OWNER",
|
||||
},
|
||||
},
|
||||
filter: NewMultiFilter().Append(
|
||||
func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return nil, nil
|
||||
}).Filter(),
|
||||
},
|
||||
want: Want{
|
||||
CreateErr: errors.ThrowNotFound(nil, "ORG-GoXOn", "Errors.User.NotFound"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "already member",
|
||||
args: args{
|
||||
a: agg,
|
||||
userID: "userID",
|
||||
roles: []string{"ORG_OWNER"},
|
||||
zitadelRoles: []authz.RoleMapping{
|
||||
{
|
||||
Role: "ORG_OWNER",
|
||||
},
|
||||
},
|
||||
filter: NewMultiFilter().
|
||||
Append(func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return []eventstore.Event{
|
||||
user.NewMachineAddedEvent(
|
||||
ctx,
|
||||
&user.NewAggregate("id", "ro").Aggregate,
|
||||
"userName",
|
||||
"name",
|
||||
"description",
|
||||
true,
|
||||
),
|
||||
}, nil
|
||||
}).
|
||||
Append(func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return []eventstore.Event{
|
||||
org.NewMemberAddedEvent(
|
||||
ctx,
|
||||
&org.NewAggregate("id", "ro").Aggregate,
|
||||
"userID",
|
||||
),
|
||||
}, nil
|
||||
}).
|
||||
Filter(),
|
||||
},
|
||||
want: Want{
|
||||
CreateErr: errors.ThrowAlreadyExists(nil, "ORG-poWwe", "Errors.Org.Member.AlreadyExists"),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "correct",
|
||||
args: args{
|
||||
a: agg,
|
||||
userID: "userID",
|
||||
roles: []string{"ORG_OWNER"},
|
||||
zitadelRoles: []authz.RoleMapping{
|
||||
{
|
||||
Role: "ORG_OWNER",
|
||||
},
|
||||
},
|
||||
filter: NewMultiFilter().
|
||||
Append(func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return []eventstore.Event{
|
||||
user.NewMachineAddedEvent(
|
||||
ctx,
|
||||
&user.NewAggregate("id", "ro").Aggregate,
|
||||
"userName",
|
||||
"name",
|
||||
"description",
|
||||
true,
|
||||
),
|
||||
}, nil
|
||||
}).
|
||||
Append(func(ctx context.Context, queryFactory *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return nil, nil
|
||||
}).
|
||||
Filter(),
|
||||
},
|
||||
want: Want{
|
||||
Commands: []eventstore.Command{
|
||||
org.NewMemberAddedEvent(ctx, &agg.Aggregate, "userID", "ORG_OWNER"),
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
AssertValidation(t, (&commandNew{zitadelRoles: tt.args.zitadelRoles}).AddOrgMember(tt.args.a, tt.args.userID, tt.args.roles...), tt.args.filter, tt.want)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestIsMember(t *testing.T) {
|
||||
type args struct {
|
||||
filter preparation.FilterToQueryReducer
|
||||
orgID string
|
||||
userID string
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
args args
|
||||
wantExists bool
|
||||
wantErr bool
|
||||
}{
|
||||
{
|
||||
name: "no events",
|
||||
args: args{
|
||||
filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return []eventstore.Event{}, nil
|
||||
},
|
||||
orgID: "orgID",
|
||||
userID: "userID",
|
||||
},
|
||||
wantExists: false,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "member added",
|
||||
args: args{
|
||||
filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return []eventstore.Event{
|
||||
org.NewMemberAddedEvent(
|
||||
context.Background(),
|
||||
&org.NewAggregate("orgID", "ro").Aggregate,
|
||||
"userID",
|
||||
),
|
||||
}, nil
|
||||
},
|
||||
orgID: "orgID",
|
||||
userID: "userID",
|
||||
},
|
||||
wantExists: true,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "member removed",
|
||||
args: args{
|
||||
filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return []eventstore.Event{
|
||||
org.NewMemberAddedEvent(
|
||||
context.Background(),
|
||||
&org.NewAggregate("orgID", "ro").Aggregate,
|
||||
"userID",
|
||||
),
|
||||
org.NewMemberRemovedEvent(
|
||||
context.Background(),
|
||||
&org.NewAggregate("orgID", "ro").Aggregate,
|
||||
"userID",
|
||||
),
|
||||
}, nil
|
||||
},
|
||||
orgID: "orgID",
|
||||
userID: "userID",
|
||||
},
|
||||
wantExists: false,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "member cascade removed",
|
||||
args: args{
|
||||
filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return []eventstore.Event{
|
||||
org.NewMemberAddedEvent(
|
||||
context.Background(),
|
||||
&org.NewAggregate("orgID", "ro").Aggregate,
|
||||
"userID",
|
||||
),
|
||||
org.NewMemberCascadeRemovedEvent(
|
||||
context.Background(),
|
||||
&org.NewAggregate("orgID", "ro").Aggregate,
|
||||
"userID",
|
||||
),
|
||||
}, nil
|
||||
},
|
||||
orgID: "orgID",
|
||||
userID: "userID",
|
||||
},
|
||||
wantExists: false,
|
||||
wantErr: false,
|
||||
},
|
||||
{
|
||||
name: "error durring filter",
|
||||
args: args{
|
||||
filter: func(_ context.Context, _ *eventstore.SearchQueryBuilder) ([]eventstore.Event, error) {
|
||||
return nil, errors.ThrowInternal(nil, "PROJE-Op26p", "Errors.Internal")
|
||||
},
|
||||
orgID: "orgID",
|
||||
userID: "userID",
|
||||
},
|
||||
wantExists: false,
|
||||
wantErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
gotExists, err := IsOrgMember(context.Background(), tt.args.filter, tt.args.orgID, tt.args.userID)
|
||||
if (err != nil) != tt.wantErr {
|
||||
t.Errorf("ExistsUser() error = %v, wantErr %v", err, tt.wantErr)
|
||||
return
|
||||
}
|
||||
if gotExists != tt.wantExists {
|
||||
t.Errorf("ExistsUser() = %v, want %v", gotExists, tt.wantExists)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestCommandSide_AddOrgMember(t *testing.T) {
|
||||
type fields struct {
|
||||
eventstore *eventstore.Eventstore
|
||||
@@ -54,7 +320,7 @@ func TestCommandSide_AddOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsErrorInvalidArgument,
|
||||
err: errors.IsErrorInvalidArgument,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -76,7 +342,7 @@ func TestCommandSide_AddOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsPreconditionFailed,
|
||||
err: errors.IsPreconditionFailed,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -113,7 +379,7 @@ func TestCommandSide_AddOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsErrorInvalidArgument,
|
||||
err: errors.IsErrorInvalidArgument,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -163,7 +429,7 @@ func TestCommandSide_AddOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsErrorAlreadyExists,
|
||||
err: errors.IsErrorAlreadyExists,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -188,7 +454,7 @@ func TestCommandSide_AddOrgMember(t *testing.T) {
|
||||
),
|
||||
),
|
||||
expectFilter(),
|
||||
expectPushFailed(caos_errs.ThrowAlreadyExists(nil, "ERROR", "internal"),
|
||||
expectPushFailed(errors.ThrowAlreadyExists(nil, "ERROR", "internal"),
|
||||
[]*repository.Event{
|
||||
eventFromEventPusher(org.NewMemberAddedEvent(context.Background(),
|
||||
&org.NewAggregate("org1", "org1").Aggregate,
|
||||
@@ -216,7 +482,7 @@ func TestCommandSide_AddOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsErrorAlreadyExists,
|
||||
err: errors.IsErrorAlreadyExists,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -335,7 +601,7 @@ func TestCommandSide_ChangeOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsErrorInvalidArgument,
|
||||
err: errors.IsErrorInvalidArgument,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -356,7 +622,7 @@ func TestCommandSide_ChangeOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsErrorInvalidArgument,
|
||||
err: errors.IsErrorInvalidArgument,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -383,7 +649,7 @@ func TestCommandSide_ChangeOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsNotFound,
|
||||
err: errors.IsNotFound,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -418,7 +684,7 @@ func TestCommandSide_ChangeOrgMember(t *testing.T) {
|
||||
},
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsPreconditionFailed,
|
||||
err: errors.IsPreconditionFailed,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -530,7 +796,7 @@ func TestCommandSide_RemoveOrgMember(t *testing.T) {
|
||||
resourceOwner: "org1",
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsErrorInvalidArgument,
|
||||
err: errors.IsErrorInvalidArgument,
|
||||
},
|
||||
},
|
||||
{
|
||||
@@ -547,7 +813,7 @@ func TestCommandSide_RemoveOrgMember(t *testing.T) {
|
||||
resourceOwner: "org1",
|
||||
},
|
||||
res: res{
|
||||
err: caos_errs.IsErrorInvalidArgument,
|
||||
err: errors.IsErrorInvalidArgument,
|
||||
},
|
||||
},
|
||||
{
|
||||
|
Reference in New Issue
Block a user