2022-01-19 13:49:50 +00:00
package projection
import (
"testing"
2024-10-10 16:50:53 +00:00
"github.com/muhlemmer/gu"
2022-04-26 23:01:45 +00:00
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/eventstore"
2023-10-19 10:19:10 +00:00
"github.com/zitadel/zitadel/internal/eventstore/handler/v2"
2022-10-20 12:36:52 +00:00
"github.com/zitadel/zitadel/internal/repository/instance"
2022-11-30 16:01:17 +00:00
"github.com/zitadel/zitadel/internal/repository/org"
2022-04-26 23:01:45 +00:00
"github.com/zitadel/zitadel/internal/repository/user"
2023-12-08 14:30:55 +00:00
"github.com/zitadel/zitadel/internal/zerrors"
2022-01-19 13:49:50 +00:00
)
func TestUserAuthMethodProjection_reduces ( t * testing . T ) {
type args struct {
event func ( t * testing . T ) eventstore . Event
}
tests := [ ] struct {
name string
args args
reduce func ( event eventstore . Event ) ( * handler . Statement , error )
want wantReduce
} {
{
name : "reduceAddedPasswordless" ,
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
user . HumanPasswordlessTokenAddedType ,
user . AggregateType ,
[ ] byte ( ` {
2024-10-10 16:50:53 +00:00
"webAuthNTokenId" : "token-id" ,
"rpID" : "example.com"
2022-01-19 13:49:50 +00:00
} ` ) ,
2023-10-19 10:19:10 +00:00
) , user . HumanPasswordlessAddedEventMapper ) ,
2022-01-19 13:49:50 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userAuthMethodProjection { } ) . reduceInitAuthMethod ,
2022-01-19 13:49:50 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2022-01-19 13:49:50 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "INSERT INTO projections.user_auth_methods5 (token_id, creation_date, change_date, resource_owner, instance_id, user_id, sequence, state, method_type, name, domain) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) ON CONFLICT (instance_id, user_id, method_type, token_id) DO UPDATE SET (creation_date, change_date, resource_owner, sequence, state, name, domain) = (projections.user_auth_methods5.creation_date, EXCLUDED.change_date, EXCLUDED.resource_owner, EXCLUDED.sequence, EXCLUDED.state, EXCLUDED.name, EXCLUDED.domain)" ,
2022-01-19 13:49:50 +00:00
expectedArgs : [ ] interface { } {
"token-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-19 13:49:50 +00:00
"agg-id" ,
uint64 ( 15 ) ,
domain . MFAStateNotReady ,
domain . UserAuthMethodTypePasswordless ,
"" ,
2024-10-10 16:50:53 +00:00
gu . Ptr ( "example.com" ) ,
2022-01-19 13:49:50 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceAddedU2F" ,
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
user . HumanU2FTokenAddedType ,
user . AggregateType ,
[ ] byte ( ` {
2024-10-10 16:50:53 +00:00
"webAuthNTokenId" : "token-id" ,
"rpID" : "example.com"
} ` ) ,
) , user . HumanU2FAddedEventMapper ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceInitAuthMethod ,
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "INSERT INTO projections.user_auth_methods5 (token_id, creation_date, change_date, resource_owner, instance_id, user_id, sequence, state, method_type, name, domain) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) ON CONFLICT (instance_id, user_id, method_type, token_id) DO UPDATE SET (creation_date, change_date, resource_owner, sequence, state, name, domain) = (projections.user_auth_methods5.creation_date, EXCLUDED.change_date, EXCLUDED.resource_owner, EXCLUDED.sequence, EXCLUDED.state, EXCLUDED.name, EXCLUDED.domain)" ,
expectedArgs : [ ] interface { } {
"token-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
"instance-id" ,
"agg-id" ,
uint64 ( 15 ) ,
domain . MFAStateNotReady ,
domain . UserAuthMethodTypeU2F ,
"" ,
gu . Ptr ( "example.com" ) ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceAddedU2F internal" ,
args : args {
event : getEvent (
testEvent (
user . HumanU2FTokenAddedType ,
user . AggregateType ,
[ ] byte ( ` {
"webAuthNTokenId" : "token-id" ,
"rpID" : ""
2022-01-19 13:49:50 +00:00
} ` ) ,
2023-10-19 10:19:10 +00:00
) , user . HumanU2FAddedEventMapper ) ,
2022-01-19 13:49:50 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userAuthMethodProjection { } ) . reduceInitAuthMethod ,
2022-01-19 13:49:50 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2022-01-19 13:49:50 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "INSERT INTO projections.user_auth_methods5 (token_id, creation_date, change_date, resource_owner, instance_id, user_id, sequence, state, method_type, name, domain) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11) ON CONFLICT (instance_id, user_id, method_type, token_id) DO UPDATE SET (creation_date, change_date, resource_owner, sequence, state, name, domain) = (projections.user_auth_methods5.creation_date, EXCLUDED.change_date, EXCLUDED.resource_owner, EXCLUDED.sequence, EXCLUDED.state, EXCLUDED.name, EXCLUDED.domain)" ,
2022-01-19 13:49:50 +00:00
expectedArgs : [ ] interface { } {
"token-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-19 13:49:50 +00:00
"agg-id" ,
uint64 ( 15 ) ,
domain . MFAStateNotReady ,
domain . UserAuthMethodTypeU2F ,
"" ,
2024-10-10 16:50:53 +00:00
gu . Ptr ( "" ) ,
2022-01-19 13:49:50 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
2023-08-02 16:57:53 +00:00
name : "reduceAddedTOTP" ,
2022-01-19 13:49:50 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
user . HumanMFAOTPAddedType ,
user . AggregateType ,
[ ] byte ( ` {
2022-01-19 13:49:50 +00:00
} ` ) ,
2023-10-19 10:19:10 +00:00
) , user . HumanOTPAddedEventMapper ) ,
2022-01-19 13:49:50 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userAuthMethodProjection { } ) . reduceInitAuthMethod ,
2022-01-19 13:49:50 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2022-01-19 13:49:50 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "INSERT INTO projections.user_auth_methods5 (token_id, creation_date, change_date, resource_owner, instance_id, user_id, sequence, state, method_type, name) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10) ON CONFLICT (instance_id, user_id, method_type, token_id) DO UPDATE SET (creation_date, change_date, resource_owner, sequence, state, name) = (projections.user_auth_methods5.creation_date, EXCLUDED.change_date, EXCLUDED.resource_owner, EXCLUDED.sequence, EXCLUDED.state, EXCLUDED.name)" ,
2022-01-19 13:49:50 +00:00
expectedArgs : [ ] interface { } {
"" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-19 13:49:50 +00:00
"agg-id" ,
uint64 ( 15 ) ,
domain . MFAStateNotReady ,
2023-08-02 16:57:53 +00:00
domain . UserAuthMethodTypeTOTP ,
2022-01-19 13:49:50 +00:00
"" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceVerifiedPasswordless" ,
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
user . HumanPasswordlessTokenVerifiedType ,
user . AggregateType ,
[ ] byte ( ` {
2022-01-19 13:49:50 +00:00
"webAuthNTokenId" : "token-id" ,
"webAuthNTokenName" : "name"
} ` ) ,
2023-10-19 10:19:10 +00:00
) , user . HumanPasswordlessVerifiedEventMapper ) ,
2022-01-19 13:49:50 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userAuthMethodProjection { } ) . reduceActivateEvent ,
2022-01-19 13:49:50 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2022-01-19 13:49:50 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "UPDATE projections.user_auth_methods5 SET (change_date, sequence, name, state) = ($1, $2, $3, $4) WHERE (user_id = $5) AND (method_type = $6) AND (resource_owner = $7) AND (token_id = $8) AND (instance_id = $9)" ,
2022-01-19 13:49:50 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"name" ,
domain . MFAStateReady ,
"agg-id" ,
domain . UserAuthMethodTypePasswordless ,
"ro-id" ,
"token-id" ,
2022-11-10 10:59:33 +00:00
"instance-id" ,
2022-01-19 13:49:50 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceVerifiedU2F" ,
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
user . HumanU2FTokenVerifiedType ,
user . AggregateType ,
[ ] byte ( ` {
2022-01-19 13:49:50 +00:00
"webAuthNTokenId" : "token-id" ,
"webAuthNTokenName" : "name"
} ` ) ,
2023-10-19 10:19:10 +00:00
) , user . HumanU2FVerifiedEventMapper ) ,
2022-01-19 13:49:50 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userAuthMethodProjection { } ) . reduceActivateEvent ,
2022-01-19 13:49:50 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2022-01-19 13:49:50 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "UPDATE projections.user_auth_methods5 SET (change_date, sequence, name, state) = ($1, $2, $3, $4) WHERE (user_id = $5) AND (method_type = $6) AND (resource_owner = $7) AND (token_id = $8) AND (instance_id = $9)" ,
2022-01-19 13:49:50 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"name" ,
domain . MFAStateReady ,
"agg-id" ,
domain . UserAuthMethodTypeU2F ,
"ro-id" ,
"token-id" ,
2022-11-10 10:59:33 +00:00
"instance-id" ,
2022-01-19 13:49:50 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
2023-08-02 16:57:53 +00:00
name : "reduceVerifiedTOTP" ,
2022-01-19 13:49:50 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
user . HumanMFAOTPVerifiedType ,
user . AggregateType ,
[ ] byte ( ` {
2022-01-19 13:49:50 +00:00
} ` ) ,
2023-10-19 10:19:10 +00:00
) , user . HumanOTPVerifiedEventMapper ) ,
2022-01-19 13:49:50 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userAuthMethodProjection { } ) . reduceActivateEvent ,
2022-01-19 13:49:50 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2022-01-19 13:49:50 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "UPDATE projections.user_auth_methods5 SET (change_date, sequence, name, state) = ($1, $2, $3, $4) WHERE (user_id = $5) AND (method_type = $6) AND (resource_owner = $7) AND (token_id = $8) AND (instance_id = $9)" ,
2022-01-19 13:49:50 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"" ,
domain . MFAStateReady ,
"agg-id" ,
2023-08-02 16:57:53 +00:00
domain . UserAuthMethodTypeTOTP ,
2022-01-19 13:49:50 +00:00
"ro-id" ,
"" ,
2022-11-10 10:59:33 +00:00
"instance-id" ,
2022-01-19 13:49:50 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
2023-08-02 16:57:53 +00:00
{
name : "reduceAddedOTPSMS" ,
args : args {
event : getEvent ( testEvent (
2023-10-19 10:19:10 +00:00
user . HumanOTPSMSAddedType ,
2023-08-02 16:57:53 +00:00
user . AggregateType ,
nil ,
) , eventstore . GenericEventMapper [ user . HumanOTPSMSAddedEvent ] ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceAddAuthMethod ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2023-08-02 16:57:53 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "INSERT INTO projections.user_auth_methods5 (token_id, creation_date, change_date, resource_owner, instance_id, user_id, sequence, state, method_type, name) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
2023-08-02 16:57:53 +00:00
expectedArgs : [ ] interface { } {
"" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
"instance-id" ,
"agg-id" ,
uint64 ( 15 ) ,
domain . MFAStateReady ,
domain . UserAuthMethodTypeOTPSMS ,
"" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceAddedOTPEmail" ,
args : args {
event : getEvent ( testEvent (
2023-10-19 10:19:10 +00:00
user . HumanOTPEmailAddedType ,
2023-08-02 16:57:53 +00:00
user . AggregateType ,
nil ,
) , eventstore . GenericEventMapper [ user . HumanOTPEmailAddedEvent ] ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceAddAuthMethod ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2023-08-02 16:57:53 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "INSERT INTO projections.user_auth_methods5 (token_id, creation_date, change_date, resource_owner, instance_id, user_id, sequence, state, method_type, name) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
2023-08-02 16:57:53 +00:00
expectedArgs : [ ] interface { } {
"" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
"instance-id" ,
"agg-id" ,
uint64 ( 15 ) ,
domain . MFAStateReady ,
domain . UserAuthMethodTypeOTPEmail ,
"" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceRemoveOTPPasswordless" ,
args : args {
event : getEvent ( testEvent (
2023-10-19 10:19:10 +00:00
user . HumanPasswordlessTokenRemovedType ,
2023-08-02 16:57:53 +00:00
user . AggregateType ,
[ ] byte ( ` {
"webAuthNTokenId" : "token-id"
} ` ) ,
) , user . HumanPasswordlessRemovedEventMapper ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceRemoveAuthMethod ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2023-08-02 16:57:53 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "DELETE FROM projections.user_auth_methods5 WHERE (user_id = $1) AND (method_type = $2) AND (resource_owner = $3) AND (instance_id = $4) AND (token_id = $5)" ,
2023-08-02 16:57:53 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
domain . UserAuthMethodTypePasswordless ,
"ro-id" ,
"instance-id" ,
"token-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceRemoveOTPU2F" ,
args : args {
event : getEvent ( testEvent (
2023-10-19 10:19:10 +00:00
user . HumanU2FTokenRemovedType ,
2023-08-02 16:57:53 +00:00
user . AggregateType ,
[ ] byte ( ` {
"webAuthNTokenId" : "token-id"
} ` ) ,
) , user . HumanU2FRemovedEventMapper ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceRemoveAuthMethod ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2023-08-02 16:57:53 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "DELETE FROM projections.user_auth_methods5 WHERE (user_id = $1) AND (method_type = $2) AND (resource_owner = $3) AND (instance_id = $4) AND (token_id = $5)" ,
2023-08-02 16:57:53 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
domain . UserAuthMethodTypeU2F ,
"ro-id" ,
"instance-id" ,
"token-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceRemoveTOTP" ,
args : args {
event : getEvent ( testEvent (
2023-10-19 10:19:10 +00:00
user . HumanMFAOTPRemovedType ,
2023-08-02 16:57:53 +00:00
user . AggregateType ,
nil ,
) , user . HumanOTPRemovedEventMapper ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceRemoveAuthMethod ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2023-08-02 16:57:53 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "DELETE FROM projections.user_auth_methods5 WHERE (user_id = $1) AND (method_type = $2) AND (resource_owner = $3) AND (instance_id = $4)" ,
2023-08-02 16:57:53 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
domain . UserAuthMethodTypeTOTP ,
"ro-id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceRemoveOTPSMS" ,
args : args {
event : getEvent ( testEvent (
2023-10-19 10:19:10 +00:00
user . HumanOTPSMSRemovedType ,
2023-08-02 16:57:53 +00:00
user . AggregateType ,
nil ,
) , eventstore . GenericEventMapper [ user . HumanOTPSMSRemovedEvent ] ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceRemoveAuthMethod ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2023-08-02 16:57:53 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "DELETE FROM projections.user_auth_methods5 WHERE (user_id = $1) AND (method_type = $2) AND (resource_owner = $3) AND (instance_id = $4)" ,
2023-08-02 16:57:53 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
domain . UserAuthMethodTypeOTPSMS ,
"ro-id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceRemovePhone" ,
args : args {
event : getEvent ( testEvent (
2023-10-19 10:19:10 +00:00
user . HumanPhoneRemovedType ,
2023-08-02 16:57:53 +00:00
user . AggregateType ,
nil ,
) , user . HumanPhoneRemovedEventMapper ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceRemoveAuthMethod ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2023-08-02 16:57:53 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "DELETE FROM projections.user_auth_methods5 WHERE (user_id = $1) AND (method_type = $2) AND (resource_owner = $3) AND (instance_id = $4)" ,
2023-08-02 16:57:53 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
domain . UserAuthMethodTypeOTPSMS ,
"ro-id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceRemoveOTPEmail" ,
args : args {
event : getEvent ( testEvent (
2023-10-19 10:19:10 +00:00
user . HumanOTPEmailRemovedType ,
2023-08-02 16:57:53 +00:00
user . AggregateType ,
nil ,
) , eventstore . GenericEventMapper [ user . HumanOTPEmailRemovedEvent ] ) ,
} ,
reduce : ( & userAuthMethodProjection { } ) . reduceRemoveAuthMethod ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : user . AggregateType ,
sequence : 15 ,
2023-08-02 16:57:53 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "DELETE FROM projections.user_auth_methods5 WHERE (user_id = $1) AND (method_type = $2) AND (resource_owner = $3) AND (instance_id = $4)" ,
2023-08-02 16:57:53 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
domain . UserAuthMethodTypeOTPEmail ,
"ro-id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
2022-11-30 16:01:17 +00:00
{
name : "org reduceOwnerRemoved" ,
reduce : ( & userAuthMethodProjection { } ) . reduceOwnerRemoved ,
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
org . OrgRemovedEventType ,
org . AggregateType ,
nil ,
) , org . OrgRemovedEventMapper ) ,
2022-11-30 16:01:17 +00:00
} ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : eventstore . AggregateType ( "org" ) ,
sequence : 15 ,
2022-11-30 16:01:17 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "DELETE FROM projections.user_auth_methods5 WHERE (instance_id = $1) AND (resource_owner = $2)" ,
2022-11-30 16:01:17 +00:00
expectedArgs : [ ] interface { } {
"instance-id" ,
"agg-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
2022-10-20 12:36:52 +00:00
{
2022-11-10 10:59:33 +00:00
name : "instance reduceInstanceRemoved" ,
2022-10-20 12:36:52 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
instance . InstanceRemovedEventType ,
instance . AggregateType ,
nil ,
) , instance . InstanceRemovedEventMapper ) ,
2022-10-20 12:36:52 +00:00
} ,
reduce : reduceInstanceRemovedHelper ( UserAuthMethodInstanceIDCol ) ,
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
2022-10-20 12:36:52 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-10-10 16:50:53 +00:00
expectedStmt : "DELETE FROM projections.user_auth_methods5 WHERE (instance_id = $1)" ,
2022-10-20 12:36:52 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
2022-01-19 13:49:50 +00:00
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
event := baseEvent ( t )
got , err := tt . reduce ( event )
2023-12-08 14:30:55 +00:00
if ok := zerrors . IsErrorInvalidArgument ( err ) ; ! ok {
2022-01-19 13:49:50 +00:00
t . Errorf ( "no wrong event mapping: %v, got: %v" , err , got )
}
event = tt . args . event ( t )
got , err = tt . reduce ( event )
2022-10-20 12:36:52 +00:00
assertReduce ( t , got , err , UserAuthMethodTable , tt . want )
2022-01-19 13:49:50 +00:00
} )
}
}