From c1eba2687300cf8f1d91619a39bfccfc6da1dc30 Mon Sep 17 00:00:00 2001 From: Jan Steffen Date: Tue, 2 Aug 2022 15:32:36 +0200 Subject: [PATCH] Don't error on deleted users Signed-off-by: Jan Steffen --- internal/scimserver/user_handler.go | 5 +++++ internal/scimserver/user_handler_test.go | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/internal/scimserver/user_handler.go b/internal/scimserver/user_handler.go index e6aaf7034..c1ae4a6d5 100644 --- a/internal/scimserver/user_handler.go +++ b/internal/scimserver/user_handler.go @@ -314,6 +314,11 @@ func (h *userHandler) Delete(r *http.Request, id string) error { _, err = h.cmdHandlerClient.Execute(ctx, cmd.CreateCommand(uid, commandTypes.DeleteUser)) if err != nil { + err = errors.TranslateFromGrpcError(err) + if err == errors.ErrDeleted { + return nil + } + return scim_errors.ScimError{ Status: http.StatusInternalServerError, Detail: err.Error(), diff --git a/internal/scimserver/user_handler_test.go b/internal/scimserver/user_handler_test.go index 760e7264b..155da4b3b 100644 --- a/internal/scimserver/user_handler_test.go +++ b/internal/scimserver/user_handler_test.go @@ -85,6 +85,28 @@ var _ = Describe("internal/scimserver/UserHandler", func() { scimErr, ok := err.(scim_errors.ScimError) Expect(ok).To(BeTrue()) + Expect(scimErr.Status).To(Equal(http.StatusNotFound)) + }) + It("doesn't return deleted user", func() { + deletedUser := &projections.User{ + Id: uuid.New().String(), + Name: "test.user.a", + Email: "test.user.a@monoskope.io", + Metadata: &projections.LifecycleMetadata{ + Deleted: timestamppb.Now(), + }, + } + commandHandlerClient := mock_eventsourcing.NewMockCommandHandlerClient(mockCtrl) + userClient := mock_domain.NewMockUserClient(mockCtrl) + userHandler := NewUserHandler(commandHandlerClient, userClient) + + userClient.EXPECT().GetById(ctx, gomock.Any()).Return(deletedUser, nil) + + _, err := userHandler.Get(request, deletedUser.Id) + Expect(err).To(HaveOccurred()) + scimErr, ok := err.(scim_errors.ScimError) + Expect(ok).To(BeTrue()) + Expect(scimErr.Status).To(Equal(http.StatusNotFound)) }) })