From 8b44794c7578ec1738c1fd98c239cbab612f74c0 Mon Sep 17 00:00:00 2001 From: Livio Spring Date: Fri, 18 Aug 2023 14:22:57 +0200 Subject: [PATCH] fix: delete SMTP correctly (#6391) --- internal/query/projection/smtp.go | 18 +++++++++++++++++ internal/query/projection/smtp_test.go | 27 ++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/internal/query/projection/smtp.go b/internal/query/projection/smtp.go index 072d68f9f..e8e12c551 100644 --- a/internal/query/projection/smtp.go +++ b/internal/query/projection/smtp.go @@ -74,6 +74,10 @@ func (p *smtpConfigProjection) reducers() []handler.AggregateReducer { Event: instance.SMTPConfigPasswordChangedEventType, Reduce: p.reduceSMTPConfigPasswordChanged, }, + { + Event: instance.SMTPConfigRemovedEventType, + Reduce: p.reduceSMTPConfigRemoved, + }, { Event: instance.InstanceRemovedEventType, Reduce: reduceInstanceRemovedHelper(SMTPConfigColumnInstanceID), @@ -160,3 +164,17 @@ func (p *smtpConfigProjection) reduceSMTPConfigPasswordChanged(event eventstore. }, ), nil } + +func (p *smtpConfigProjection) reduceSMTPConfigRemoved(event eventstore.Event) (*handler.Statement, error) { + e, err := assertEvent[*instance.SMTPConfigRemovedEvent](event) + if err != nil { + return nil, err + } + return crdb.NewDeleteStatement( + e, + []handler.Condition{ + handler.NewCond(SMTPConfigColumnAggregateID, e.Aggregate().ID), + handler.NewCond(SMTPConfigColumnInstanceID, e.Aggregate().InstanceID), + }, + ), nil +} diff --git a/internal/query/projection/smtp_test.go b/internal/query/projection/smtp_test.go index 46218fbf0..8d04725db 100644 --- a/internal/query/projection/smtp_test.go +++ b/internal/query/projection/smtp_test.go @@ -145,6 +145,33 @@ func TestSMTPConfigProjection_reduces(t *testing.T) { }, }, }, + { + name: "reduceSMTPConfigRemoved", + args: args{ + event: getEvent(testEvent( + repository.EventType(instance.SMTPConfigRemovedEventType), + instance.AggregateType, + []byte(`{}`), + ), instance.SMTPConfigRemovedEventMapper), + }, + reduce: (&smtpConfigProjection{}).reduceSMTPConfigRemoved, + want: wantReduce{ + aggregateType: eventstore.AggregateType("instance"), + sequence: 15, + previousSequence: 10, + executer: &testExecuter{ + executions: []execution{ + { + expectedStmt: "DELETE FROM projections.smtp_configs WHERE (aggregate_id = $1) AND (instance_id = $2)", + expectedArgs: []interface{}{ + "agg-id", + "instance-id", + }, + }, + }, + }, + }, + }, { name: "instance reduceInstanceRemoved", args: args{