2022-02-21 12:22:20 +00:00
package projection
import (
"testing"
2022-06-13 06:34:11 +00:00
"github.com/zitadel/zitadel/internal/crypto"
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-04-26 23:01:45 +00:00
"github.com/zitadel/zitadel/internal/repository/instance"
2023-12-08 14:30:55 +00:00
"github.com/zitadel/zitadel/internal/zerrors"
2022-02-21 12:22:20 +00:00
)
func TestSMSProjection_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
} {
{
2022-11-10 10:59:33 +00:00
name : "instance reduceSMSTwilioAdded" ,
2022-02-21 12:22:20 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
instance . SMSConfigTwilioAddedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
2022-02-21 12:22:20 +00:00
"id" : "id" ,
"sid" : "sid" ,
"token" : {
"cryptoType" : 0 ,
"algorithm" : "RSA-265" ,
2022-06-13 06:34:11 +00:00
"keyId" : "key-id" ,
"crypted" : "Y3J5cHRlZA=="
2022-02-21 12:22:20 +00:00
} ,
2024-09-06 13:11:36 +00:00
"senderNumber" : "sender-number" ,
2024-09-26 07:14:33 +00:00
"description" : "description" ,
"verifyServiceSid" : "verify-service-sid"
2022-02-21 12:22:20 +00:00
} ` ) ,
2024-09-06 13:11:36 +00:00
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioAddedEvent ] ) ,
2022-02-21 12:22:20 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioAdded ,
2022-02-21 12:22:20 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
2022-02-21 12:22:20 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-09-06 13:11:36 +00:00
expectedStmt : "INSERT INTO projections.sms_configs3 (id, aggregate_id, creation_date, change_date, resource_owner, instance_id, state, sequence, description) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
2022-02-21 12:22:20 +00:00
expectedArgs : [ ] interface { } {
"id" ,
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
2022-03-23 08:02:39 +00:00
"instance-id" ,
2022-02-21 12:22:20 +00:00
domain . SMSConfigStateInactive ,
uint64 ( 15 ) ,
2024-09-06 13:11:36 +00:00
"description" ,
2022-02-21 12:22:20 +00:00
} ,
} ,
{
2024-09-26 07:14:33 +00:00
expectedStmt : "INSERT INTO projections.sms_configs3_twilio (sms_id, instance_id, sid, token, sender_number, verify_service_sid) VALUES ($1, $2, $3, $4, $5, $6)" ,
2022-02-21 12:22:20 +00:00
expectedArgs : [ ] interface { } {
"id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-02-21 12:22:20 +00:00
"sid" ,
2022-06-13 06:34:11 +00:00
& crypto . CryptoValue {
CryptoType : crypto . TypeEncryption ,
Algorithm : "RSA-265" ,
KeyID : "key-id" ,
Crypted : [ ] byte ( "crypted" ) ,
} ,
2022-02-21 12:22:20 +00:00
"sender-number" ,
2024-09-26 07:14:33 +00:00
"verify-service-sid" ,
2022-02-21 12:22:20 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
2022-11-10 10:59:33 +00:00
name : "instance reduceSMSConfigTwilioChanged" ,
2022-02-21 12:22:20 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
instance . SMSConfigTwilioChangedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
2022-02-21 12:22:20 +00:00
"id" : "id" ,
"sid" : "sid" ,
2024-09-06 13:11:36 +00:00
"senderNumber" : "sender-number" ,
2024-09-26 07:14:33 +00:00
"description" : "description" ,
"verifyServiceSid" : "verify-service-sid"
2022-02-21 12:22:20 +00:00
} ` ) ,
2024-09-06 13:11:36 +00:00
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioChangedEvent ] ) ,
2022-02-21 12:22:20 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioChanged ,
2022-02-21 12:22:20 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
2022-02-21 12:22:20 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-09-06 13:11:36 +00:00
expectedStmt : "UPDATE projections.sms_configs3 SET (change_date, sequence, description) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"description" ,
"id" ,
"instance-id" ,
} ,
} ,
{
2024-09-26 07:14:33 +00:00
expectedStmt : "UPDATE projections.sms_configs3_twilio SET (sid, sender_number, verify_service_sid) = ($1, $2, $3) WHERE (sms_id = $4) AND (instance_id = $5)" ,
2022-02-21 12:22:20 +00:00
expectedArgs : [ ] interface { } {
2022-06-13 06:34:11 +00:00
"sid" ,
"sender-number" ,
2024-09-26 07:14:33 +00:00
"verify-service-sid" ,
2022-06-13 06:34:11 +00:00
"id" ,
"instance-id" ,
} ,
} ,
2024-09-06 13:11:36 +00:00
} ,
} ,
} ,
} ,
{
name : "instance reduceSMSConfigTwilioChanged, only description" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigTwilioChangedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id" ,
"description" : "description"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioChangedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioChanged ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "UPDATE projections.sms_configs3 SET (change_date, sequence, description) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"description" ,
"id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "instance reduceSMSConfigTwilioChanged, only sid" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigTwilioChangedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id" ,
"sid" : "sid"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioChangedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioChanged ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
2022-06-13 06:34:11 +00:00
{
2024-09-06 13:11:36 +00:00
expectedStmt : "UPDATE projections.sms_configs3 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2022-06-13 06:34:11 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
"instance-id" ,
} ,
} ,
2024-09-06 13:11:36 +00:00
{
expectedStmt : "UPDATE projections.sms_configs3_twilio SET sid = $1 WHERE (sms_id = $2) AND (instance_id = $3)" ,
expectedArgs : [ ] interface { } {
"sid" ,
"id" ,
"instance-id" ,
} ,
} ,
2022-06-13 06:34:11 +00:00
} ,
} ,
} ,
} ,
{
2022-11-10 10:59:33 +00:00
name : "instance reduceSMSConfigTwilioTokenChanged" ,
2022-06-13 06:34:11 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
instance . SMSConfigTwilioTokenChangedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
2022-06-13 06:34:11 +00:00
"id" : "id" ,
"token" : {
"cryptoType" : 0 ,
"algorithm" : "RSA-265" ,
"keyId" : "key-id" ,
"crypted" : "Y3J5cHRlZA=="
}
} ` ) ,
2024-09-06 13:11:36 +00:00
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioTokenChangedEvent ] ) ,
2022-06-13 06:34:11 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioTokenChanged ,
2022-06-13 06:34:11 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
2022-06-13 06:34:11 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-09-06 13:11:36 +00:00
expectedStmt : "UPDATE projections.sms_configs3_twilio SET token = $1 WHERE (sms_id = $2) AND (instance_id = $3)" ,
2022-06-13 06:34:11 +00:00
expectedArgs : [ ] interface { } {
& crypto . CryptoValue {
CryptoType : crypto . TypeEncryption ,
Algorithm : "RSA-265" ,
KeyID : "key-id" ,
Crypted : [ ] byte ( "crypted" ) ,
} ,
2022-02-21 12:22:20 +00:00
"id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-02-21 12:22:20 +00:00
} ,
} ,
{
2024-09-06 13:11:36 +00:00
expectedStmt : "UPDATE projections.sms_configs3 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
2022-02-21 12:22:20 +00:00
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-02-21 12:22:20 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
2024-09-26 07:14:33 +00:00
{
name : "instance reduceSMSConfigTwilioChanged, only sid" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigTwilioChangedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id" ,
"verifyServiceSid" : "verify-service-sid"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioChangedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioChanged ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "UPDATE projections.sms_configs3 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
"instance-id" ,
} ,
} ,
{
expectedStmt : "UPDATE projections.sms_configs3_twilio SET verify_service_sid = $1 WHERE (sms_id = $2) AND (instance_id = $3)" ,
expectedArgs : [ ] interface { } {
"verify-service-sid" ,
"id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
2024-09-06 13:11:36 +00:00
{
name : "instance reduceSMSHTTPAdded" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigHTTPAddedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id" ,
"description" : "description" ,
"endpoint" : "endpoint"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigHTTPAddedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigHTTPAdded ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "INSERT INTO projections.sms_configs3 (id, aggregate_id, creation_date, change_date, resource_owner, instance_id, state, sequence, description) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)" ,
expectedArgs : [ ] interface { } {
"id" ,
"agg-id" ,
anyArg { } ,
anyArg { } ,
"ro-id" ,
"instance-id" ,
domain . SMSConfigStateInactive ,
uint64 ( 15 ) ,
"description" ,
} ,
} ,
{
expectedStmt : "INSERT INTO projections.sms_configs3_http (sms_id, instance_id, endpoint) VALUES ($1, $2, $3)" ,
expectedArgs : [ ] interface { } {
"id" ,
"instance-id" ,
"endpoint" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "instance reduceSMSConfigHTTPChanged" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigHTTPChangedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id" ,
"endpoint" : "endpoint" ,
"description" : "description"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigHTTPChangedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigHTTPChanged ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "UPDATE projections.sms_configs3 SET (change_date, sequence, description) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"description" ,
"id" ,
"instance-id" ,
} ,
} ,
{
expectedStmt : "UPDATE projections.sms_configs3_http SET endpoint = $1 WHERE (sms_id = $2) AND (instance_id = $3)" ,
expectedArgs : [ ] interface { } {
"endpoint" ,
"id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "instance reduceSMSConfigHTTPChanged, only description" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigHTTPChangedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id" ,
"description" : "description"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigHTTPChangedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigHTTPChanged ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "UPDATE projections.sms_configs3 SET (change_date, sequence, description) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"description" ,
"id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} , {
name : "instance reduceSMSConfigHTTPChanged, only endpoint" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigHTTPChangedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id" ,
"endpoint" : "endpoint"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigHTTPChangedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigHTTPChanged ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "UPDATE projections.sms_configs3 SET (change_date, sequence) = ($1, $2) WHERE (id = $3) AND (instance_id = $4)" ,
expectedArgs : [ ] interface { } {
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
"instance-id" ,
} ,
} ,
{
expectedStmt : "UPDATE projections.sms_configs3_http SET endpoint = $1 WHERE (sms_id = $2) AND (instance_id = $3)" ,
expectedArgs : [ ] interface { } {
"endpoint" ,
"id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "instance reduceSMSConfigTwilioActivated" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigTwilioActivatedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioActivatedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioActivated ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "UPDATE projections.sms_configs3 SET (state, change_date, sequence) = ($1, $2, $3) WHERE (NOT (id = $4)) AND (state = $5) AND (instance_id = $6)" ,
expectedArgs : [ ] interface { } {
domain . SMSConfigStateInactive ,
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
domain . SMSConfigStateActive ,
"instance-id" ,
} ,
} ,
{
expectedStmt : "UPDATE projections.sms_configs3 SET (state, change_date, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
expectedArgs : [ ] interface { } {
domain . SMSConfigStateActive ,
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "instance reduceSMSConfigTwilioDeactivated" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigTwilioDeactivatedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioDeactivatedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioDeactivated ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "UPDATE projections.sms_configs3 SET (state, change_date, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
expectedArgs : [ ] interface { } {
domain . SMSConfigStateInactive ,
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
{
name : "instance reduceSMSConfigTwilioRemoved" ,
args : args {
event : getEvent (
testEvent (
instance . SMSConfigTwilioRemovedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
"id" : "id"
} ` ) ,
) , eventstore . GenericEventMapper [ instance . SMSConfigTwilioRemovedEvent ] ) ,
} ,
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigTwilioRemoved ,
want : wantReduce {
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
executer : & testExecuter {
executions : [ ] execution {
{
expectedStmt : "DELETE FROM projections.sms_configs3 WHERE (id = $1) AND (instance_id = $2)" ,
expectedArgs : [ ] interface { } {
"id" ,
"instance-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
2022-02-21 12:22:20 +00:00
{
2022-11-10 10:59:33 +00:00
name : "instance reduceSMSConfigActivated" ,
2022-02-21 12:22:20 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
instance . SMSConfigActivatedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
2022-02-21 12:22:20 +00:00
"id" : "id"
} ` ) ,
2024-09-06 13:11:36 +00:00
) , eventstore . GenericEventMapper [ instance . SMSConfigActivatedEvent ] ) ,
2022-02-21 12:22:20 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigActivated ,
2022-02-21 12:22:20 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
2022-02-21 12:22:20 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-09-06 13:11:36 +00:00
expectedStmt : "UPDATE projections.sms_configs3 SET (state, change_date, sequence) = ($1, $2, $3) WHERE (NOT (id = $4)) AND (state = $5) AND (instance_id = $6)" ,
expectedArgs : [ ] interface { } {
domain . SMSConfigStateInactive ,
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
domain . SMSConfigStateActive ,
"instance-id" ,
} ,
} ,
{
expectedStmt : "UPDATE projections.sms_configs3 SET (state, change_date, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
2022-02-21 12:22:20 +00:00
expectedArgs : [ ] interface { } {
domain . SMSConfigStateActive ,
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-02-21 12:22:20 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
2022-11-10 10:59:33 +00:00
name : "instance reduceSMSConfigDeactivated" ,
2022-02-21 12:22:20 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
instance . SMSConfigDeactivatedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
2022-02-21 12:22:20 +00:00
"id" : "id"
} ` ) ,
2024-09-06 13:11:36 +00:00
) , eventstore . GenericEventMapper [ instance . SMSConfigDeactivatedEvent ] ) ,
2022-02-21 12:22:20 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigDeactivated ,
2022-02-21 12:22:20 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
2022-02-21 12:22:20 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-09-06 13:11:36 +00:00
expectedStmt : "UPDATE projections.sms_configs3 SET (state, change_date, sequence) = ($1, $2, $3) WHERE (id = $4) AND (instance_id = $5)" ,
2022-02-21 12:22:20 +00:00
expectedArgs : [ ] interface { } {
domain . SMSConfigStateInactive ,
anyArg { } ,
uint64 ( 15 ) ,
"id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-02-21 12:22:20 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
{
2022-11-10 10:59:33 +00:00
name : "instance reduceSMSConfigRemoved" ,
2022-02-21 12:22:20 +00:00
args : args {
2023-10-19 10:19:10 +00:00
event : getEvent (
testEvent (
instance . SMSConfigRemovedEventType ,
instance . AggregateType ,
[ ] byte ( ` {
2022-02-21 12:22:20 +00:00
"id" : "id"
} ` ) ,
2024-09-06 13:11:36 +00:00
) , eventstore . GenericEventMapper [ instance . SMSConfigRemovedEvent ] ) ,
2022-02-21 12:22:20 +00:00
} ,
2022-06-14 05:51:00 +00:00
reduce : ( & smsConfigProjection { } ) . reduceSMSConfigRemoved ,
2022-02-21 12:22:20 +00:00
want : wantReduce {
2023-10-19 10:19:10 +00:00
aggregateType : eventstore . AggregateType ( "instance" ) ,
sequence : 15 ,
2022-02-21 12:22:20 +00:00
executer : & testExecuter {
executions : [ ] execution {
{
2024-09-06 13:11:36 +00:00
expectedStmt : "DELETE FROM projections.sms_configs3 WHERE (id = $1) AND (instance_id = $2)" ,
2022-02-21 12:22:20 +00:00
expectedArgs : [ ] interface { } {
"id" ,
2022-05-25 12:15:13 +00:00
"instance-id" ,
2022-02-21 12:22:20 +00:00
} ,
} ,
} ,
} ,
} ,
} ,
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 ( SMSColumnInstanceID ) ,
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-09-06 13:11:36 +00:00
expectedStmt : "DELETE FROM projections.sms_configs3 WHERE (instance_id = $1)" ,
2022-10-20 12:36:52 +00:00
expectedArgs : [ ] interface { } {
"agg-id" ,
} ,
} ,
} ,
} ,
} ,
} ,
2022-02-21 12:22:20 +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-02-21 12:22:20 +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 , SMSConfigProjectionTable , tt . want )
2022-02-21 12:22:20 +00:00
} )
}
}