2021-11-30 07:57:51 +00:00
package projection
import (
"database/sql"
"testing"
2022-04-26 23:01:45 +00:00
"github.com/zitadel/zitadel/internal/domain"
"github.com/zitadel/zitadel/internal/errors"
"github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/handler"
"github.com/zitadel/zitadel/internal/eventstore/repository"
"github.com/zitadel/zitadel/internal/repository/user"
2021-11-30 07:57:51 +00:00
)
func TestUserProjection_reduces ( t * testing . T ) {
type args struct {
2022-01-03 08:19:07 +00:00
event func ( t * testing . T ) eventstore . Event
2021-11-30 07:57:51 +00:00
}
tests := [ ] struct {
name string
args args
2022-01-03 08:19:07 +00:00
reduce func ( event eventstore . Event ) ( * handler . Statement , error )
2021-11-30 07:57:51 +00:00
want wantReduce
} {
{
name : "reduceHumanAdded" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanAddedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "user-name" ,
"firstName" : "first-name" ,
"lastName" : "last-name" ,
"nickName" : "nick-name" ,
"displayName" : "display-name" ,
"preferredLanguage" : "ch-DE" ,
"gender" : 1 ,
2022-05-20 14:32:06 +00:00
"email" : "email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
"phone" : "+41 00 000 00 00"
} ` ) ,
) , user . HumanAddedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanAdded ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
domain . UserStateActive ,
2021-11-30 07:57:51 +00:00
uint64 ( 15 ) ,
"user-name" ,
2022-01-14 09:45:50 +00:00
domain . UserTypeHuman ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
"first-name" ,
"last-name" ,
& sql . NullString { String : "nick-name" , Valid : true } ,
& sql . NullString { String : "display-name" , Valid : true } ,
& sql . NullString { String : "ch-DE" , Valid : true } ,
& sql . NullInt16 { Int16 : int16 ( domain . GenderFemale ) , Valid : true } ,
2022-05-20 14:32:06 +00:00
"email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
"email@zitadel.com" ,
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
false ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceUserV1Added" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1AddedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "user-name" ,
"firstName" : "first-name" ,
"lastName" : "last-name" ,
"nickName" : "nick-name" ,
"displayName" : "display-name" ,
"preferredLanguage" : "ch-DE" ,
"gender" : 1 ,
2022-05-20 14:32:06 +00:00
"email" : "email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
"phone" : "+41 00 000 00 00"
} ` ) ,
) , user . HumanAddedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanAdded ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
domain . UserStateActive ,
2021-11-30 07:57:51 +00:00
uint64 ( 15 ) ,
"user-name" ,
2022-01-14 09:45:50 +00:00
domain . UserTypeHuman ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
"first-name" ,
"last-name" ,
& sql . NullString { String : "nick-name" , Valid : true } ,
& sql . NullString { String : "display-name" , Valid : true } ,
& sql . NullString { String : "ch-DE" , Valid : true } ,
& sql . NullInt16 { Int16 : int16 ( domain . GenderFemale ) , Valid : true } ,
2022-05-20 14:32:06 +00:00
"email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
"email@zitadel.com" ,
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
false ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceHumanAdded NULLs" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanAddedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "user-name" ,
"firstName" : "first-name" ,
"lastName" : "last-name" ,
2022-05-20 14:32:06 +00:00
"email" : "email@zitadel.com"
2021-11-30 07:57:51 +00:00
} ` ) ,
) , user . HumanAddedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanAdded ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
domain . UserStateActive ,
2021-11-30 07:57:51 +00:00
uint64 ( 15 ) ,
"user-name" ,
2022-01-14 09:45:50 +00:00
domain . UserTypeHuman ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
"first-name" ,
"last-name" ,
& sql . NullString { } ,
& sql . NullString { } ,
& sql . NullString { String : "und" , Valid : false } ,
& sql . NullInt16 { } ,
2022-05-20 14:32:06 +00:00
"email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
& sql . NullString { } ,
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
"email@zitadel.com" ,
& sql . NullString { String : "" , Valid : false } ,
false ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceHumanRegistered" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanRegisteredType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "user-name" ,
"firstName" : "first-name" ,
"lastName" : "last-name" ,
"nickName" : "nick-name" ,
"displayName" : "display-name" ,
"preferredLanguage" : "ch-DE" ,
"gender" : 1 ,
2022-05-20 14:32:06 +00:00
"email" : "email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
"phone" : "+41 00 000 00 00"
} ` ) ,
) , user . HumanRegisteredEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanRegistered ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
domain . UserStateActive ,
2021-11-30 07:57:51 +00:00
uint64 ( 15 ) ,
"user-name" ,
2022-01-14 09:45:50 +00:00
domain . UserTypeHuman ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
"first-name" ,
"last-name" ,
& sql . NullString { String : "nick-name" , Valid : true } ,
& sql . NullString { String : "display-name" , Valid : true } ,
& sql . NullString { String : "ch-DE" , Valid : true } ,
& sql . NullInt16 { Int16 : int16 ( domain . GenderFemale ) , Valid : true } ,
2022-05-20 14:32:06 +00:00
"email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
"email@zitadel.com" ,
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
false ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceUserV1Registered" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1RegisteredType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "user-name" ,
"firstName" : "first-name" ,
"lastName" : "last-name" ,
"nickName" : "nick-name" ,
"displayName" : "display-name" ,
"preferredLanguage" : "ch-DE" ,
"gender" : 1 ,
2022-05-20 14:32:06 +00:00
"email" : "email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
"phone" : "+41 00 000 00 00"
} ` ) ,
) , user . HumanRegisteredEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanRegistered ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
domain . UserStateActive ,
2021-11-30 07:57:51 +00:00
uint64 ( 15 ) ,
"user-name" ,
2022-01-14 09:45:50 +00:00
domain . UserTypeHuman ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
"first-name" ,
"last-name" ,
& sql . NullString { String : "nick-name" , Valid : true } ,
& sql . NullString { String : "display-name" , Valid : true } ,
& sql . NullString { String : "ch-DE" , Valid : true } ,
& sql . NullInt16 { Int16 : int16 ( domain . GenderFemale ) , Valid : true } ,
2022-05-20 14:32:06 +00:00
"email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
"email@zitadel.com" ,
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
false ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceHumanRegistered NULLs" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanRegisteredType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "user-name" ,
"firstName" : "first-name" ,
"lastName" : "last-name" ,
2022-05-20 14:32:06 +00:00
"email" : "email@zitadel.com"
2021-11-30 07:57:51 +00:00
} ` ) ,
) , user . HumanRegisteredEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanRegistered ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
domain . UserStateActive ,
2021-11-30 07:57:51 +00:00
uint64 ( 15 ) ,
"user-name" ,
2022-01-14 09:45:50 +00:00
domain . UserTypeHuman ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2_humans (user_id, instance_id, first_name, last_name, nick_name, display_name, preferred_language, gender, email, phone) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
"first-name" ,
"last-name" ,
& sql . NullString { } ,
& sql . NullString { } ,
& sql . NullString { String : "und" , Valid : false } ,
& sql . NullInt16 { } ,
2022-05-20 14:32:06 +00:00
"email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
& sql . NullString { } ,
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "INSERT INTO projections.users2_notifications (user_id, instance_id, last_email, last_phone, password_set) VALUES ($1, $2, $3, $4, $5)" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
"email@zitadel.com" ,
& sql . NullString { String : "" , Valid : false } ,
false ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
2022-01-25 10:35:38 +00:00
{
name : "reduceHumanInitCodeAdded" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanInitialCodeAddedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanInitialCodeAddedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanInitCodeAdded ,
2022-01-25 10:35:38 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)" ,
2022-01-25 10:35:38 +00:00
expectedArgs : [ ] interface { } {
domain . UserStateInitial ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserV1InitCodeAdded" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1InitialCodeAddedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanInitialCodeAddedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanInitCodeAdded ,
2022-01-25 10:35:38 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)" ,
2022-01-25 10:35:38 +00:00
expectedArgs : [ ] interface { } {
domain . UserStateInitial ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceHumanInitCodeSucceeded" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanInitializedCheckSucceededType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanInitializedCheckSucceededEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanInitCodeSucceeded ,
2022-01-25 10:35:38 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)" ,
2022-01-25 10:35:38 +00:00
expectedArgs : [ ] interface { } {
domain . UserStateActive ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserV1InitCodeAdded" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1InitializedCheckSucceededType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanInitializedCheckSucceededEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanInitCodeSucceeded ,
2022-01-25 10:35:38 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (state) = ($1) WHERE (id = $2) AND (instance_id = $3)" ,
2022-01-25 10:35:38 +00:00
expectedArgs : [ ] interface { } {
domain . UserStateActive ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
2021-11-30 07:57:51 +00:00
{
name : "reduceUserLocked" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserLockedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . UserLockedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceUserLocked ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
domain . UserStateLocked ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserUnlocked" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserUnlockedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . UserUnlockedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceUserUnlocked ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
domain . UserStateActive ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserDeactivated" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserDeactivatedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . UserDeactivatedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceUserDeactivated ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
domain . UserStateInactive ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserReactivated" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserReactivatedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . UserReactivatedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceUserReactivated ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, state, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
domain . UserStateActive ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserRemoved" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserRemovedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . UserRemovedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceUserRemoved ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "DELETE FROM projections.users2 WHERE (id = $1) AND (instance_id = $2)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserUserNameChanged" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserUserNameChangedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "username"
} ` ) ,
) , user . UsernameChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceUserNameChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, username, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
"username" ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceHumanProfileChanged" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanProfileChangedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"firstName" : "first-name" ,
"lastName" : "last-name" ,
"nickName" : "nick-name" ,
"displayName" : "display-name" ,
"preferredLanguage" : "ch-DE" ,
"gender" : 3
} ` ) ,
) , user . HumanProfileChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanProfileChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (first_name, last_name, nick_name, display_name, preferred_language, gender) = ($1, $2, $3, $4, $5, $6) WHERE (user_id = $7) AND (instance_id = $8)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"first-name" ,
"last-name" ,
"nick-name" ,
"display-name" ,
"ch-DE" ,
domain . GenderDiverse ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserV1ProfileChanged" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1ProfileChangedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"firstName" : "first-name" ,
"lastName" : "last-name" ,
"nickName" : "nick-name" ,
"displayName" : "display-name" ,
"preferredLanguage" : "ch-DE" ,
"gender" : 3
} ` ) ,
) , user . HumanProfileChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanProfileChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (first_name, last_name, nick_name, display_name, preferred_language, gender) = ($1, $2, $3, $4, $5, $6) WHERE (user_id = $7) AND (instance_id = $8)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"first-name" ,
"last-name" ,
"nick-name" ,
"display-name" ,
"ch-DE" ,
domain . GenderDiverse ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceHumanPhoneChanged" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanPhoneChangedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"phone" : "+41 00 000 00 00"
} ` ) ,
) , user . HumanPhoneChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanPhoneChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"+41 00 000 00 00" ,
false ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "UPDATE projections.users2_notifications SET (last_phone) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
expectedArgs : [ ] interface { } {
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
"agg-id" ,
"instance-id" ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceUserV1PhoneChanged" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1PhoneChangedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"phone" : "+41 00 000 00 00"
} ` ) ,
) , user . HumanPhoneChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanPhoneChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"+41 00 000 00 00" ,
false ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "UPDATE projections.users2_notifications SET (last_phone) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
expectedArgs : [ ] interface { } {
& sql . NullString { String : "+41 00 000 00 00" , Valid : true } ,
"agg-id" ,
"instance-id" ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceHumanPhoneRemoved" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanPhoneRemovedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanPhoneRemovedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanPhoneRemoved ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
expectedArgs : [ ] interface { } {
nil ,
nil ,
"agg-id" ,
"instance-id" ,
} ,
} ,
{
expectedStmt : "UPDATE projections.users2_notifications SET (last_phone, verified_phone) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
nil ,
nil ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceUserV1PhoneRemoved" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1PhoneRemovedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanPhoneRemovedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanPhoneRemoved ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (phone, is_phone_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
expectedArgs : [ ] interface { } {
nil ,
nil ,
"agg-id" ,
"instance-id" ,
} ,
} ,
{
expectedStmt : "UPDATE projections.users2_notifications SET (last_phone, verified_phone) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
nil ,
nil ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceHumanPhoneVerified" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanPhoneVerifiedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanPhoneVerifiedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanPhoneVerified ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (is_phone_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
true ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "UPSERT INTO projections.users2_notifications (user_id, instance_id, verified_phone) SELECT user_id, instance_id, last_phone FROM projections.users2_notifications AS copy_table WHERE copy_table.user_id = $1 AND copy_table.instance_id = $2" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceUserV1PhoneVerified" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1PhoneVerifiedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanPhoneVerifiedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanPhoneVerified ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (is_phone_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
true ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "UPSERT INTO projections.users2_notifications (user_id, instance_id, verified_phone) SELECT user_id, instance_id, last_phone FROM projections.users2_notifications AS copy_table WHERE copy_table.user_id = $1 AND copy_table.instance_id = $2" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceHumanEmailChanged" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanEmailChangedType ) ,
user . AggregateType ,
[ ] byte ( ` {
2022-05-20 14:32:06 +00:00
"email" : "email@zitadel.com"
2021-11-30 07:57:51 +00:00
} ` ) ,
) , user . HumanEmailChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanEmailChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (email, is_email_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
2022-05-20 14:32:06 +00:00
"email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
false ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "UPDATE projections.users2_notifications SET (last_email) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
expectedArgs : [ ] interface { } {
& sql . NullString { String : "email@zitadel.com" , Valid : true } ,
"agg-id" ,
"instance-id" ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceUserV1EmailChanged" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1EmailChangedType ) ,
user . AggregateType ,
[ ] byte ( ` {
2022-05-20 14:32:06 +00:00
"email" : "email@zitadel.com"
2021-11-30 07:57:51 +00:00
} ` ) ,
) , user . HumanEmailChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanEmailChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (email, is_email_verified) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
2022-05-20 14:32:06 +00:00
"email@zitadel.com" ,
2021-11-30 07:57:51 +00:00
false ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "UPDATE projections.users2_notifications SET (last_email) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
expectedArgs : [ ] interface { } {
& sql . NullString { String : "email@zitadel.com" , Valid : true } ,
"agg-id" ,
"instance-id" ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceHumanEmailVerified" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanEmailVerifiedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanEmailVerifiedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanEmailVerified ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (is_email_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
true ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "UPSERT INTO projections.users2_notifications (user_id, instance_id, verified_email) SELECT user_id, instance_id, last_email FROM projections.users2_notifications AS copy_table WHERE copy_table.user_id = $1 AND copy_table.instance_id = $2" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceUserV1EmailVerified" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . UserV1EmailVerifiedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanEmailVerifiedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanEmailVerified ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (is_email_verified) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
true ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
2022-07-06 12:09:49 +00:00
{
expectedStmt : "UPSERT INTO projections.users2_notifications (user_id, instance_id, verified_email) SELECT user_id, instance_id, last_email FROM projections.users2_notifications AS copy_table WHERE copy_table.user_id = $1 AND copy_table.instance_id = $2" ,
expectedArgs : [ ] interface { } {
"agg-id" ,
"instance-id" ,
} ,
} ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
{
name : "reduceHumanAvatarAdded" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanAvatarAddedType ) ,
user . AggregateType ,
[ ] byte ( ` {
"storeKey" : "users/agg-id/avatar"
} ` ) ,
) , user . HumanAvatarAddedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanAvatarAdded ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (avatar_key) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"users/agg-id/avatar" ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceHumanAvatarRemoved" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . HumanAvatarRemovedType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . HumanAvatarRemovedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceHumanAvatarRemoved ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_humans SET (avatar_key) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
nil ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceMachineAddedEvent no description" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . MachineAddedEventType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "username" ,
"name" : "machine-name"
} ` ) ,
) , user . MachineAddedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceMachineAdded ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
domain . UserStateActive ,
2021-11-30 07:57:51 +00:00
uint64 ( 15 ) ,
"username" ,
2022-01-14 09:45:50 +00:00
domain . UserTypeMachine ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2_machines (user_id, instance_id, name, description) VALUES ($1, $2, $3, $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
"machine-name" ,
& sql . NullString { } ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceMachineAddedEvent" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . MachineAddedEventType ) ,
user . AggregateType ,
[ ] byte ( ` {
"username" : "username" ,
"name" : "machine-name" ,
"description" : "description"
} ` ) ,
) , user . MachineAddedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceMachineAdded ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2 (id, creation_date, change_date, resource_owner, instance_id, state, sequence, username, type) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-01-25 10:35:38 +00:00
domain . UserStateActive ,
2021-11-30 07:57:51 +00:00
uint64 ( 15 ) ,
"username" ,
2022-01-14 09:45:50 +00:00
domain . UserTypeMachine ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "INSERT INTO projections.users2_machines (user_id, instance_id, name, description) VALUES ($1, $2, $3, $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
"machine-name" ,
& sql . NullString { String : "description" , Valid : true } ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceMachineChangedEvent" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . MachineChangedEventType ) ,
user . AggregateType ,
[ ] byte ( ` {
"name" : "machine-name" ,
"description" : "description"
} ` ) ,
) , user . MachineChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceMachineChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_machines SET (name, description) = ($1, $2) WHERE (user_id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"machine-name" ,
"description" ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceMachineChangedEvent name" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . MachineChangedEventType ) ,
user . AggregateType ,
[ ] byte ( ` {
"name" : "machine-name"
} ` ) ,
) , user . MachineChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceMachineChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_machines SET (name) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"machine-name" ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceMachineChangedEvent description" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . MachineChangedEventType ) ,
user . AggregateType ,
[ ] byte ( ` {
"description" : "description"
} ` ) ,
) , user . MachineChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceMachineChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution {
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
{
2022-07-06 12:09:49 +00:00
expectedStmt : "UPDATE projections.users2_machines SET (description) = ($1) WHERE (user_id = $2) AND (instance_id = $3)" ,
2021-11-30 07:57:51 +00:00
expectedArgs : [ ] interface { } {
"description" ,
"agg-id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2021-11-30 07:57:51 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "reduceMachineChangedEvent no values" ,
args : args {
event : getEvent ( testEvent (
repository . EventType ( user . MachineChangedEventType ) ,
user . AggregateType ,
[ ] byte ( ` { } ` ) ,
) , user . MachineChangedEventMapper ) ,
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & userProjection { } ) . reduceMachineChanged ,
2021-11-30 07:57:51 +00:00
want : wantReduce {
aggregateType : user . AggregateType ,
sequence : 15 ,
previousSequence : 10 ,
projection : UserTable ,
executer : & testExecuter {
executions : [ ] execution { } ,
} ,
} ,
} ,
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
event := baseEvent ( t )
got , err := tt . reduce ( event )
if _ , ok := err . ( errors . InvalidArgument ) ; ! ok {
t . Errorf ( "no wrong event mapping: %v, got: %v" , err , got )
}
event = tt . args . event ( t )
got , err = tt . reduce ( event )
assertReduce ( t , got , err , tt . want )
} )
}
}