diff --git a/src/services/ProcessorServiceProjectMember.js b/src/services/ProcessorServiceProjectMember.js index 6bd61db..bb84777 100644 --- a/src/services/ProcessorServiceProjectMember.js +++ b/src/services/ProcessorServiceProjectMember.js @@ -65,27 +65,30 @@ async function create (message) { // sometimes we have issue that when member accepts invitation the invitation is somehow // is not removed from the ES, so here we are making sure that invite is removed when we are adding member - const addedMember = members[existingMemberIndex] - const addedMemberInvites = _.filter(doc._source.invites, (invite) => ( - invite.email === addedMember.email || invite.userId === addedMember.userId - )) - - if (addedMemberInvites.length > 0) { - logger.warn(`There are ${addedMemberInvites.length} invite(s) are not yet removed` + - ` for member.id: ${addedMember.id} member.userId: ${addedMember.userId}.`) - - for (let i = 0; i < addedMemberInvites.length; i++) { - const invite = addedMemberInvites[i] - logger.debug(`Removing invite.id: ${invite.id} for member.id: ${addedMember.id} member.userId: ${addedMember.userId}.`) - try { - const message = { id: invite.id } - const updateDocHandler = helper.removeInvitePromise(message) - await updateDocHandler(doc) - logger.debug(`Successfully removed invite.id: ${invite.id}.`) - } catch (err) { - logger.error(`Failed removing invite.id: ${invite.id}. ${err}`) + try { // make sure that this logic never cause an error in member adding process + const invites = _.filter(doc._source.invites, (invite) => ( + invite.email === member.email || invite.userId === member.userId + )) + + if (invites.length > 0) { + logger.warn(`There are ${invites.length} invite(s) are not yet removed` + + ` for member.id: ${member.id} member.userId: ${member.userId}.`) + + for (let i = 0; i < invites.length; i++) { + const invite = invites[i] + logger.debug(`Removing invite.id: ${invite.id} for member.id: ${member.id} member.userId: ${member.userId}.`) + try { + const message = { id: invite.id } + const updateDocHandler = helper.removeInvitePromise(message) + await updateDocHandler(doc) + logger.debug(`Successfully removed invite.id: ${invite.id}.`) + } catch (err) { + logger.error(`Failed removing invite.id: ${invite.id}. ${err}`) + } } } + } catch (err) { + logger.error(`Error during removing existent invites for added member: ${err}`) } return _.assign(doc._source, { members }) diff --git a/test/e2e/processor.project.index.test.js b/test/e2e/processor.project.index.test.js index 3cca122..d251add 100644 --- a/test/e2e/processor.project.index.test.js +++ b/test/e2e/processor.project.index.test.js @@ -832,7 +832,7 @@ describe('TC Project Member Topic Tests', () => { _.keys(_.omit(projectMemberCreatedMessage.payload, ['resource']))) }) - it('create project member message and remove not removed invite', async () => { + it('create project member message - already exists - remove not removed invite', async () => { // let's say we still have invite await ProcessorService.create(projectMemberInviteCreatedMessage) let data = await testHelper.getProjectESData(projectId)