Skip to content

Commit

Permalink
Remove certificate provider reminders if they complete on paper
Browse files Browse the repository at this point in the history
  • Loading branch information
hawx committed Feb 28, 2025
1 parent 5a52139 commit 7844ff4
Show file tree
Hide file tree
Showing 6 changed files with 202 additions and 0 deletions.
2 changes: 2 additions & 0 deletions cmd/event-received/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"github.com/ministryofjustice/opg-modernising-lpa/internal/pay"
"github.com/ministryofjustice/opg-modernising-lpa/internal/random"
"github.com/ministryofjustice/opg-modernising-lpa/internal/s3"
"github.com/ministryofjustice/opg-modernising-lpa/internal/scheduled"
"github.com/ministryofjustice/opg-modernising-lpa/internal/telemetry"
"go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda"
"go.opentelemetry.io/contrib/instrumentation/github.com/aws/aws-lambda-go/otellambda/xrayconfig"
Expand Down Expand Up @@ -130,6 +131,7 @@ type EventClient interface {

type ScheduledStore interface {
DeleteAllByUID(ctx context.Context, uid string) error
DeleteAllActionByUID(ctx context.Context, actions []scheduled.Action, uid string) error
}

type NotifyClient interface {
Expand Down
49 changes: 49 additions & 0 deletions cmd/event-received/mock_ScheduledStore_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions cmd/event-received/sirius_event_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,13 @@ func handleCertificateProviderSubmissionCompleted(ctx context.Context, event *ev
now := factory.Now()
donor.AttorneysInvitedAt = now()

if err := factory.ScheduledStore().DeleteAllActionByUID(ctx, []scheduled.Action{
scheduled.ActionRemindCertificateProviderToComplete,
scheduled.ActionRemindCertificateProviderToConfirmIdentity,
}, v.UID); err != nil {
return fmt.Errorf("failed to delete scheduled events: %w", err)
}

if err := shareCodeSender.SendAttorneys(ctx, appData, lpa); err != nil {
return fmt.Errorf("failed to send share codes to attorneys: %w", err)
}
Expand Down
74 changes: 74 additions & 0 deletions cmd/event-received/sirius_event_handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1093,6 +1093,11 @@ func TestHandleCertificateProviderSubmissionCompleted(t *testing.T) {
SendAttorneys(ctx, appData, lpa).
Return(nil)

scheduledStore := newMockScheduledStore(t)
scheduledStore.EXPECT().
DeleteAllActionByUID(mock.Anything, mock.Anything, mock.Anything).
Return(nil)

factory := newMockFactory(t)
factory.EXPECT().
LpaStoreClient().
Expand All @@ -1109,6 +1114,9 @@ func TestHandleCertificateProviderSubmissionCompleted(t *testing.T) {
factory.EXPECT().
Now().
Return(testNowFn)
factory.EXPECT().
ScheduledStore().
Return(scheduledStore)

handler := &siriusEventHandler{}
err := handler.Handle(ctx, factory, certificateProviderSubmissionCompletedEvent)
Expand Down Expand Up @@ -1228,6 +1236,11 @@ func TestHandleCertificateProviderSubmissionCompletedWhenDonorPutErrors(t *testi
SendAttorneys(ctx, mock.Anything, mock.Anything).
Return(nil)

scheduledStore := newMockScheduledStore(t)
scheduledStore.EXPECT().
DeleteAllActionByUID(mock.Anything, mock.Anything, mock.Anything).
Return(nil)

factory := newMockFactory(t)
factory.EXPECT().
LpaStoreClient().
Expand All @@ -1244,12 +1257,65 @@ func TestHandleCertificateProviderSubmissionCompletedWhenDonorPutErrors(t *testi
factory.EXPECT().
Now().
Return(testNowFn)
factory.EXPECT().
ScheduledStore().
Return(scheduledStore)

handler := &siriusEventHandler{}
err := handler.Handle(ctx, factory, certificateProviderSubmissionCompletedEvent)
assert.ErrorIs(t, err, expectedError)
}

func TestHandleCertificateProviderSubmissionCompletedWhenScheduleDeleteErrors(t *testing.T) {
lpaStoreClient := newMockLpaStoreClient(t)
lpaStoreClient.EXPECT().
Lpa(ctx, "M-1111-2222-3333").
Return(&lpadata.Lpa{
CertificateProvider: lpadata.CertificateProvider{
Channel: lpadata.ChannelPaper,
},
}, nil)

dynamoClient := newMockDynamodbClient(t)
dynamoClient.EXPECT().
OneByUID(ctx, "M-1111-2222-3333", mock.Anything).
Return(nil).
SetData(&donordata.Provided{PK: dynamo.LpaKey("an-lpa"), SK: dynamo.LpaOwnerKey(dynamo.DonorKey("a-donor"))})
dynamoClient.EXPECT().
One(ctx, dynamo.LpaKey("an-lpa"), dynamo.DonorKey("a-donor"), mock.Anything).
Return(nil).
SetData(&donordata.Provided{PK: dynamo.LpaKey("an-lpa")})

scheduledStore := newMockScheduledStore(t)
scheduledStore.EXPECT().
DeleteAllActionByUID(mock.Anything, mock.Anything, mock.Anything).
Return(expectedError)

factory := newMockFactory(t)
factory.EXPECT().
LpaStoreClient().
Return(lpaStoreClient, nil)
factory.EXPECT().
ShareCodeSender(ctx).
Return(nil, nil)
factory.EXPECT().
AppData().
Return(appcontext.Data{}, nil)
factory.EXPECT().
DynamoClient().
Return(dynamoClient)
factory.EXPECT().
Now().
Return(testNowFn)
factory.EXPECT().
ScheduledStore().
Return(scheduledStore)

handler := &siriusEventHandler{}
err := handler.Handle(ctx, factory, certificateProviderSubmissionCompletedEvent)
assert.Equal(t, fmt.Errorf("failed to delete scheduled events: %w", expectedError), err)
}

func TestHandleCertificateProviderSubmissionCompletedWhenShareCodeSenderErrors(t *testing.T) {
lpaStoreClient := newMockLpaStoreClient(t)
lpaStoreClient.EXPECT().
Expand All @@ -1275,6 +1341,11 @@ func TestHandleCertificateProviderSubmissionCompletedWhenShareCodeSenderErrors(t
SendAttorneys(ctx, mock.Anything, mock.Anything).
Return(expectedError)

scheduledStore := newMockScheduledStore(t)
scheduledStore.EXPECT().
DeleteAllActionByUID(mock.Anything, mock.Anything, mock.Anything).
Return(nil)

factory := newMockFactory(t)
factory.EXPECT().
LpaStoreClient().
Expand All @@ -1291,6 +1362,9 @@ func TestHandleCertificateProviderSubmissionCompletedWhenShareCodeSenderErrors(t
factory.EXPECT().
Now().
Return(testNowFn)
factory.EXPECT().
ScheduledStore().
Return(scheduledStore)

handler := &siriusEventHandler{}
err := handler.Handle(ctx, factory, certificateProviderSubmissionCompletedEvent)
Expand Down
18 changes: 18 additions & 0 deletions internal/scheduled/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package scheduled
import (
"context"
"fmt"
"slices"
"time"

"github.com/ministryofjustice/opg-modernising-lpa/internal/dynamo"
Expand Down Expand Up @@ -79,3 +80,20 @@ func (s *Store) DeleteAllByUID(ctx context.Context, uid string) error {

return s.dynamoClient.DeleteKeys(ctx, keys)
}

func (s *Store) DeleteAllActionByUID(ctx context.Context, actions []Action, uid string) error {
var events []Event

if err := s.dynamoClient.AllByLpaUIDAndPartialSK(ctx, uid, dynamo.PartialScheduledKey(), &events); err != nil {
return err
}

var keys []dynamo.Keys
for _, e := range events {
if slices.Contains(actions, e.Action) {
keys = append(keys, dynamo.Keys{PK: e.PK, SK: e.SK})
}
}

return s.dynamoClient.DeleteKeys(ctx, keys)
}
52 changes: 52 additions & 0 deletions internal/scheduled/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -174,3 +174,55 @@ func TestDeleteAllByUIDWhenDeleteKeysErrors(t *testing.T) {

assert.Equal(t, expectedError, err)
}

func TestDeleteAllActionByUID(t *testing.T) {
now := time.Now()
yesterday := now.Add(-24 * time.Hour)

dynamoClient := newMockDynamoClient(t)
dynamoClient.EXPECT().
AllByLpaUIDAndPartialSK(ctx, "lpa-uid", dynamo.PartialScheduledKey(), mock.Anything).
Return(nil).
SetData([]Event{
{LpaUID: "lpa-uid", Action: ActionRemindAttorneyToComplete, PK: dynamo.ScheduledDayKey(now), SK: dynamo.ScheduledKey(now, testUuidString)},
{LpaUID: "lpa-uid", Action: ActionExpireDonorIdentity, PK: dynamo.ScheduledDayKey(yesterday), SK: dynamo.ScheduledKey(yesterday, testUuidString)},
})
dynamoClient.EXPECT().
DeleteKeys(ctx, []dynamo.Keys{
{PK: dynamo.ScheduledDayKey(yesterday), SK: dynamo.ScheduledKey(yesterday, testUuidString)},
}).
Return(nil)

store := &Store{dynamoClient: dynamoClient, now: testNowFn, uuidString: testUuidStringFn}
err := store.DeleteAllActionByUID(ctx, []Action{ActionExpireDonorIdentity}, "lpa-uid")

assert.Nil(t, err)
}

func TestDeleteAllActionByUIDWhenAllByLpaUIDAndPartialSKErrors(t *testing.T) {
dynamoClient := newMockDynamoClient(t)
dynamoClient.EXPECT().
AllByLpaUIDAndPartialSK(ctx, mock.Anything, mock.Anything, mock.Anything).
Return(expectedError)

store := &Store{dynamoClient: dynamoClient, now: testNowFn}
err := store.DeleteAllActionByUID(ctx, []Action{}, "lpa-uid")

assert.Equal(t, expectedError, err)
}

func TestDeleteAllActionByUIDWhenDeleteKeysErrors(t *testing.T) {
dynamoClient := newMockDynamoClient(t)
dynamoClient.EXPECT().
AllByLpaUIDAndPartialSK(ctx, mock.Anything, mock.Anything, mock.Anything).
Return(nil).
SetData([]Event{{LpaUID: "lpa-uid"}})
dynamoClient.EXPECT().
DeleteKeys(mock.Anything, mock.Anything).
Return(expectedError)

store := &Store{dynamoClient: dynamoClient, now: testNowFn}
err := store.DeleteAllActionByUID(ctx, []Action{}, "lpa-uid")

assert.Equal(t, expectedError, err)
}

0 comments on commit 7844ff4

Please sign in to comment.