From 48135daa8497564569da224d25915377a9fd98b2 Mon Sep 17 00:00:00 2001 From: Fabi <38692350+fgerschwiler@users.noreply.github.com> Date: Tue, 19 Oct 2021 10:38:21 +0200 Subject: [PATCH] fix: Project grant fix (#2529) * feat: add project resource owner serch query * fix: project grant cascade changed reduce * fix: add project removed tests --- internal/query/projection/project_grant.go | 2 +- .../query/projection/project_grant_test.go | 58 +++++++++++++++++++ .../query/projection/project_role_test.go | 27 +++++++++ 3 files changed, 86 insertions(+), 1 deletion(-) diff --git a/internal/query/projection/project_grant.go b/internal/query/projection/project_grant.go index f2836e1b7..ca66308c0 100644 --- a/internal/query/projection/project_grant.go +++ b/internal/query/projection/project_grant.go @@ -132,7 +132,7 @@ func (p *ProjectGrantProjection) reduceProjectGrantCascadeChanged(event eventsto []handler.Column{ handler.NewCol(ProjectGrantColumnChangeDate, e.CreationDate()), handler.NewCol(ProjectGrantColumnSequence, e.Sequence()), - handler.NewCol(ProjectGrantColumnRoleKeys, e.RoleKeys), + handler.NewCol(ProjectGrantColumnRoleKeys, pq.StringArray(e.RoleKeys)), }, []handler.Condition{ handler.NewCond(ProjectGrantColumnGrantID, e.GrantID), diff --git a/internal/query/projection/project_grant_test.go b/internal/query/projection/project_grant_test.go index 709445f55..97e20b1f3 100644 --- a/internal/query/projection/project_grant_test.go +++ b/internal/query/projection/project_grant_test.go @@ -22,6 +22,33 @@ func TestProjectGrantProjection_reduces(t *testing.T) { reduce func(event eventstore.EventReader) (*handler.Statement, error) want wantReduce }{ + { + name: "reduceProjectRemoved", + args: args{ + event: getEvent(testEvent( + repository.EventType(project.ProjectRemovedType), + project.AggregateType, + nil, + ), project.ProjectRemovedEventMapper), + }, + reduce: (&ProjectGrantProjection{}).reduceProjectRemoved, + want: wantReduce{ + projection: ProjectGrantProjectionTable, + aggregateType: eventstore.AggregateType("project"), + sequence: 15, + previousSequence: 10, + executer: &testExecuter{ + executions: []execution{ + { + expectedStmt: "DELETE FROM zitadel.projections.project_grants WHERE (project_id = $1)", + expectedArgs: []interface{}{ + "agg-id", + }, + }, + }, + }, + }, + }, { name: "reduceProjectGrantRemoved", args: args{ @@ -143,6 +170,37 @@ func TestProjectGrantProjection_reduces(t *testing.T) { }, }, }, + { + name: "reduceProjectGrantCascadeChanged", + args: args{ + event: getEvent(testEvent( + repository.EventType(project.GrantCascadeChangedType), + project.AggregateType, + []byte(`{"grantId": "grant-id", "roleKeys": ["admin", "user"] }`), + ), project.GrantCascadeChangedEventMapper), + }, + reduce: (&ProjectGrantProjection{}).reduceProjectGrantCascadeChanged, + want: wantReduce{ + projection: ProjectGrantProjectionTable, + aggregateType: eventstore.AggregateType("project"), + sequence: 15, + previousSequence: 10, + executer: &testExecuter{ + executions: []execution{ + { + expectedStmt: "UPDATE zitadel.projections.project_grants SET (change_date, sequence, granted_role_keys) = ($1, $2, $3) WHERE (grant_id = $4) AND (project_id = $5)", + expectedArgs: []interface{}{ + anyArg{}, + uint64(15), + pq.StringArray{"admin", "user"}, + "grant-id", + "agg-id", + }, + }, + }, + }, + }, + }, { name: "reduceProjectGrantAdded", args: args{ diff --git a/internal/query/projection/project_role_test.go b/internal/query/projection/project_role_test.go index 17c3bce16..716cd4165 100644 --- a/internal/query/projection/project_role_test.go +++ b/internal/query/projection/project_role_test.go @@ -20,6 +20,33 @@ func TestProjectRoleProjection_reduces(t *testing.T) { reduce func(event eventstore.EventReader) (*handler.Statement, error) want wantReduce }{ + { + name: "reduceProjectRemoved", + args: args{ + event: getEvent(testEvent( + repository.EventType(project.ProjectRemovedType), + project.AggregateType, + nil, + ), project.ProjectRemovedEventMapper), + }, + reduce: (&ProjectRoleProjection{}).reduceProjectRemoved, + want: wantReduce{ + projection: ProjectRoleProjectionTable, + aggregateType: eventstore.AggregateType("project"), + sequence: 15, + previousSequence: 10, + executer: &testExecuter{ + executions: []execution{ + { + expectedStmt: "DELETE FROM zitadel.projections.project_roles WHERE (project_id = $1)", + expectedArgs: []interface{}{ + "agg-id", + }, + }, + }, + }, + }, + }, { name: "reduceProjectRoleRemoved", args: args{