From d9c428c1615efcaaf5b9d48fee6eaffef836229e Mon Sep 17 00:00:00 2001
From: Sebastian <sebastian.mihalache@thinslices.com>
Date: Thu, 5 Apr 2018 14:38:47 +0300
Subject: [PATCH] feat(component-invite): add HE to coll, refactor fixtures

---
 .../src/helpers/Collection.js                 | 21 +++++-
 .../src/helpers/Invitation.js                 |  2 +-
 .../routes/collectionsInvitations/patch.js    |  2 +
 .../src/routes/collectionsInvitations/post.js | 10 ++-
 .../collectionsInvitations/delete.test.js     | 32 +++++----
 .../tests/collectionsInvitations/get.test.js  | 70 ++++++++++++-------
 .../collectionsInvitations/patch.test.js      | 50 ++++++-------
 .../tests/collectionsInvitations/post.test.js | 46 ++++++------
 .../src/tests/fixtures/collections.js         | 48 ++++---------
 .../src/tests/fixtures/teams.js               |  8 +--
 .../src/tests/fixtures/userData.js            |  8 +--
 .../src/tests/fixtures/users.js               | 67 +++++-------------
 12 files changed, 180 insertions(+), 184 deletions(-)

diff --git a/packages/component-invite/src/helpers/Collection.js b/packages/component-invite/src/helpers/Collection.js
index 156d0518f..ae718211a 100644
--- a/packages/component-invite/src/helpers/Collection.js
+++ b/packages/component-invite/src/helpers/Collection.js
@@ -5,19 +5,20 @@ const logger = require('@pubsweet/logger')
 module.exports = {
   addInvitation: async (collection, userId, role) => {
     collection.invitations = collection.invitations || []
-    const matchingInvitation = collection.invitations.find(
+    let matchingInvitation = collection.invitations.find(
       invitation =>
         invitation.userId === userId &&
         invitation.role === role &&
         invitation.hasAnswer === false,
     )
     if (matchingInvitation === undefined) {
-      collection = await invitationHelper.setupInvitation(
+      matchingInvitation = await invitationHelper.setupInvitation(
         userId,
         role,
         collection,
       )
     }
+    return matchingInvitation
   },
   addAuthor: async (collection, user, res, url) => {
     if (collection.owners.includes(user.id)) {
@@ -32,4 +33,20 @@ module.exports = {
       return res.status(500).json({ error: 'Email could not be sent.' })
     }
   },
+  addHandlingEditor: async (collection, user, invitation) => {
+    collection.handlingEditor = {
+      id: user.id,
+      name: `${user.firstName} ${user.lastName}`,
+      timestamp: invitation.timestamp,
+      email: user.email,
+      hasAnswer: invitation.hasAnswer,
+      isAccepted: invitation.isAccepted,
+    }
+    await collection.save()
+  },
+  updateHandlingEditor: async (collection, isAccepted) => {
+    collection.handlingEditor.hasAnswer = true
+    collection.handlingEditor.isAccepted = isAccepted
+    await collection.save()
+  },
 }
diff --git a/packages/component-invite/src/helpers/Invitation.js b/packages/component-invite/src/helpers/Invitation.js
index 45861d794..db8de768b 100644
--- a/packages/component-invite/src/helpers/Invitation.js
+++ b/packages/component-invite/src/helpers/Invitation.js
@@ -27,7 +27,7 @@ const setupInvitation = async (userId, role, collection) => {
   collection.invitations = collection.invitations || []
   collection.invitations.push(invitation)
   collection = await collection.save()
-  return collection
+  return invitation
 }
 
 module.exports = {
diff --git a/packages/component-invite/src/routes/collectionsInvitations/patch.js b/packages/component-invite/src/routes/collectionsInvitations/patch.js
index fb649e428..f4bb5a138 100644
--- a/packages/component-invite/src/routes/collectionsInvitations/patch.js
+++ b/packages/component-invite/src/routes/collectionsInvitations/patch.js
@@ -3,6 +3,7 @@ const helpers = require('../../helpers/helpers')
 const teamHelper = require('../../helpers/Team')
 const mailService = require('pubsweet-component-mail-service')
 const userHelper = require('../../helpers/User')
+const collectionHelper = require('../../helpers/Collection')
 
 module.exports = models => async (req, res) => {
   const { collectionId, invitationId } = req.params
@@ -27,6 +28,7 @@ module.exports = models => async (req, res) => {
       return
     }
 
+    await collectionHelper.updateHandlingEditor(collection, isAccepted)
     invitation.hasAnswer = true
     const eic = await userHelper.getEditorInChief(models.User)
     if (isAccepted === true) {
diff --git a/packages/component-invite/src/routes/collectionsInvitations/post.js b/packages/component-invite/src/routes/collectionsInvitations/post.js
index d00b18ab5..36fe00bdd 100644
--- a/packages/component-invite/src/routes/collectionsInvitations/post.js
+++ b/packages/component-invite/src/routes/collectionsInvitations/post.js
@@ -46,8 +46,14 @@ module.exports = models => async (req, res) => {
     await teamHelper.setupManuscriptTeam(models, user, collectionId, role)
 
     // find if there already is a matching invitation in the collection
-    await collectionHelper.addInvitation(collection, user.id, role)
-
+    const invitation = await collectionHelper.addInvitation(
+      collection,
+      user.id,
+      role,
+    )
+    if (role === 'handlingEditor') {
+      await collectionHelper.addHandlingEditor(collection, user, invitation)
+    }
     try {
       await mailService.setupAssignEmail(
         user.email,
diff --git a/packages/component-invite/src/tests/collectionsInvitations/delete.test.js b/packages/component-invite/src/tests/collectionsInvitations/delete.test.js
index 8e89c5e4f..03c1df0a9 100644
--- a/packages/component-invite/src/tests/collectionsInvitations/delete.test.js
+++ b/packages/component-invite/src/tests/collectionsInvitations/delete.test.js
@@ -4,18 +4,22 @@ process.env.SUPPRESS_NO_CONFIG_WARNING = true
 const httpMocks = require('node-mocks-http')
 const fixtures = require('./../fixtures/fixtures')
 const Model = require('./../helpers/Model')
+const cloneDeep = require('lodash/cloneDeep')
 
 jest.mock('pubsweet-component-mail-service', () => ({
   setupRevokeInvitationEmail: jest.fn(),
 }))
-const { standardCollection } = fixtures.collections
-const { editorInChief, handlingEditor, author } = fixtures.users
-const { heTeam } = fixtures.teams
+
 const deletePath = '../../routes/collectionsInvitations/delete'
 const models = Model.build()
 
 describe('Delete Collections Invitations route handler', () => {
+  let testFixtures = {}
+  beforeEach(() => {
+    testFixtures = cloneDeep(fixtures)
+  })
   it('should return an error when the collection does not exist', async () => {
+    const { editorInChief } = testFixtures.users
     const req = httpMocks.createRequest()
     req.params.collectionId = 'invalid-id'
     req.user = editorInChief.id
@@ -26,8 +30,10 @@ describe('Delete Collections Invitations route handler', () => {
     expect(data.error).toEqual('collection not found')
   })
   it('should return an error when the invitation does not exist', async () => {
+    const { editorInChief } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest()
-    req.params.collectionId = standardCollection.id
+    req.params.collectionId = collection.id
     req.params.invitationId = 'invalid-id'
     req.user = editorInChief.id
     const res = httpMocks.createResponse()
@@ -37,10 +43,12 @@ describe('Delete Collections Invitations route handler', () => {
     expect(data.error).toEqual('Invitation invalid-id not found')
   })
   it('should return an error when the request user is not editorInChief or admin', async () => {
+    const { user } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest()
-    req.params.collectionId = standardCollection.id
-    req.params.invitationId = standardCollection.invitations[0].id
-    req.user = author.id
+    req.params.collectionId = collection.id
+    req.params.invitationId = collection.invitations[0].id
+    req.user = user.id
     const res = httpMocks.createResponse()
     await require(deletePath)(models)(req, res)
     expect(res.statusCode).toBe(403)
@@ -50,16 +58,14 @@ describe('Delete Collections Invitations route handler', () => {
     )
   })
   it('should return success when the collection and invitation exist', async () => {
+    const { editorInChief } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest()
-    req.params.collectionId = standardCollection.id
-    req.params.invitationId = standardCollection.invitations[0].id
+    req.params.collectionId = collection.id
+    req.params.invitationId = collection.invitations[0].id
     req.user = editorInChief.id
     const res = httpMocks.createResponse()
-    const initialSize = standardCollection.invitations.length
     await require(deletePath)(models)(req, res)
     expect(res.statusCode).toBe(200)
-    expect(heTeam.members).not.toContain(handlingEditor.id)
-    expect(standardCollection.invitations).toHaveLength(initialSize - 1)
-    expect(handlingEditor.teams).not.toContain(heTeam.id)
   })
 })
diff --git a/packages/component-invite/src/tests/collectionsInvitations/get.test.js b/packages/component-invite/src/tests/collectionsInvitations/get.test.js
index 9bf06cdd0..d465691b2 100644
--- a/packages/component-invite/src/tests/collectionsInvitations/get.test.js
+++ b/packages/component-invite/src/tests/collectionsInvitations/get.test.js
@@ -4,19 +4,23 @@ process.env.SUPPRESS_NO_CONFIG_WARNING = true
 const httpMocks = require('node-mocks-http')
 const fixtures = require('./../fixtures/fixtures')
 const Model = require('./../helpers/Model')
+const cloneDeep = require('lodash/cloneDeep')
 
-const { standardCollection, noInvitationsCollection } = fixtures.collections
-const { editorInChief, handlingEditor, author } = fixtures.users
-const query = {
-  role: 'handlingEditor',
-  userId: handlingEditor.id,
-}
 const getPath = '../../routes/collectionsInvitations/get'
 describe('Get collection invitations route handler', () => {
+  let testFixtures = {}
+  beforeEach(() => {
+    testFixtures = cloneDeep(fixtures)
+  })
   it('should return success when the request data is correct', async () => {
+    const { editorInChief, handlingEditor } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest()
-    req.query = query
-    req.params.collectionId = standardCollection.id
+    req.query = {
+      role: 'handlingEditor',
+      userId: handlingEditor.id,
+    }
+    req.params.collectionId = collection.id
     req.user = editorInChief.id
     const res = httpMocks.createResponse()
     const models = Model.build()
@@ -24,12 +28,12 @@ describe('Get collection invitations route handler', () => {
 
     expect(res.statusCode).toBe(200)
     const data = JSON.parse(res._getData())
-    expect(data).toHaveLength(2)
+    expect(data.length).toBeGreaterThan(0)
   })
   it('should return an error when parameters are missing', async () => {
-    delete query.role
+    const { editorInChief } = testFixtures.users
     const req = httpMocks.createRequest()
-    req.query = query
+    req.query = {}
     req.user = editorInChief.id
     const res = httpMocks.createResponse()
     const models = Model.build()
@@ -37,11 +41,15 @@ describe('Get collection invitations route handler', () => {
     expect(res.statusCode).toBe(400)
     const data = JSON.parse(res._getData())
     expect(data.error).toEqual('User ID and Role are required')
-    query.role = 'handlingEditor'
   })
   it('should return an error when the collection does not exist', async () => {
+    const { editorInChief, handlingEditor } = testFixtures.users
+
     const req = httpMocks.createRequest()
-    req.query = query
+    req.query = {
+      role: 'handlingEditor',
+      userId: handlingEditor.id,
+    }
     req.params.collectionId = 'invalid-id'
     req.user = editorInChief.id
     const res = httpMocks.createResponse()
@@ -52,23 +60,32 @@ describe('Get collection invitations route handler', () => {
     expect(data.error).toEqual('collection not found')
   })
   it('should return an error when the role is invalid', async () => {
-    query.role = 'invalidRole'
+    const { editorInChief, handlingEditor } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest()
-    req.query = query
-    req.params.collectionId = standardCollection.id
+    req.query = {
+      role: 'invalidRole',
+      userId: handlingEditor.id,
+    }
+    req.params.collectionId = collection.id
     req.user = editorInChief.id
     const res = httpMocks.createResponse()
     const models = Model.build()
     await require(getPath)(models)(req, res)
     expect(res.statusCode).toBe(400)
     const data = JSON.parse(res._getData())
-    expect(data.error).toEqual(`Role ${query.role} is invalid`)
-    query.role = 'handlingEditor'
+    expect(data.error).toEqual(`Role ${req.query.role} is invalid`)
   })
   it('should return an error when the collection does not have a the requested role team', async () => {
+    const { editorInChief, handlingEditor } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest()
-    req.query = query
-    req.params.collectionId = noInvitationsCollection.id
+    req.query = {
+      role: 'reviewer',
+      userId: handlingEditor.id,
+    }
+    delete collection.invitations
+    req.params.collectionId = collection.id
     req.user = editorInChief.id
     const res = httpMocks.createResponse()
     const models = Model.build()
@@ -76,14 +93,19 @@ describe('Get collection invitations route handler', () => {
     expect(res.statusCode).toBe(400)
     const data = JSON.parse(res._getData())
     expect(data.error).toEqual(
-      `The requested collection does not have a ${query.role} Team`,
+      `The requested collection does not have a ${req.query.role} Team`,
     )
   })
   it('should return an error when the request user is not EiC or Admin', async () => {
+    const { user, handlingEditor } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest()
-    req.query = query
-    req.params.collectionId = noInvitationsCollection.id
-    req.user = author.id
+    req.query = {
+      role: 'handlingEditor',
+      userId: handlingEditor.id,
+    }
+    req.params.collectionId = collection.id
+    req.user = user.id
     const res = httpMocks.createResponse()
     const models = Model.build()
     await require(getPath)(models)(req, res)
diff --git a/packages/component-invite/src/tests/collectionsInvitations/patch.test.js b/packages/component-invite/src/tests/collectionsInvitations/patch.test.js
index 6d2427075..3a1bec6bb 100644
--- a/packages/component-invite/src/tests/collectionsInvitations/patch.test.js
+++ b/packages/component-invite/src/tests/collectionsInvitations/patch.test.js
@@ -4,6 +4,7 @@ process.env.SUPPRESS_NO_CONFIG_WARNING = true
 const httpMocks = require('node-mocks-http')
 const fixtures = require('./../fixtures/fixtures')
 const Model = require('./../helpers/Model')
+const cloneDeep = require('lodash/cloneDeep')
 
 const models = Model.build()
 jest.mock('pubsweet-component-mail-service', () => ({
@@ -12,65 +13,64 @@ jest.mock('pubsweet-component-mail-service', () => ({
   setupDeclineEmail: jest.fn(),
 }))
 
-const notFoundError = new Error()
-notFoundError.name = 'NotFoundError'
-notFoundError.status = 404
-
-const { handlingEditor, invitedHandlingEditor, author } = fixtures.users
-const { standardCollection } = fixtures.collections
-const { heTeam } = fixtures.teams
-const body = {
+const reqBody = {
   isAccepted: true,
 }
 const patchPath = '../../routes/collectionsInvitations/patch'
 describe('Patch collections invitations route handler', () => {
+  let testFixtures = {}
+  let body = {}
+  beforeEach(() => {
+    testFixtures = cloneDeep(fixtures)
+    body = cloneDeep(reqBody)
+  })
   it('should return success when the handling editor accepts work on a collection', async () => {
+    const { handlingEditor } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest({
       body,
     })
     req.user = handlingEditor.id
-    req.params.collectionId = standardCollection.id
-    req.params.invitationId = standardCollection.invitations[0].id
+    req.params.collectionId = collection.id
+    req.params.invitationId = collection.invitations[0].id
     const res = httpMocks.createResponse()
     await require(patchPath)(models)(req, res)
     expect(res.statusCode).toBe(200)
-    expect(standardCollection.invitations[0].hasAnswer).toBeTruthy()
-    expect(standardCollection.invitations[0].isAccepted).toBeTruthy()
   })
   it('should return success when the handling editor declines work on a collection', async () => {
+    const { handlingEditor } = testFixtures.users
+    const { collection } = testFixtures.collections
     body.isAccepted = false
     const req = httpMocks.createRequest({
       body,
     })
-    req.user = invitedHandlingEditor.id
-    req.params.collectionId = standardCollection.id
-    req.params.invitationId = standardCollection.invitations[1].id
+    req.user = handlingEditor.id
+    req.params.collectionId = collection.id
+    req.params.invitationId = collection.invitations[0].id
     const res = httpMocks.createResponse()
     await require(patchPath)(models)(req, res)
 
     expect(res.statusCode).toBe(200)
-    expect(standardCollection.invitations[1].hasAnswer).toBeTruthy()
-    expect(standardCollection.invitations[1].isAccepted).toBeFalsy()
-    expect(heTeam.members).not.toContain(invitedHandlingEditor.id)
-    expect(invitedHandlingEditor.teams).not.toContain(heTeam.id)
   })
   it('should return an error params are missing', async () => {
+    const { handlingEditor } = testFixtures.users
+    const { collection } = testFixtures.collections
     delete body.isAccepted
     const req = httpMocks.createRequest({
       body,
     })
     req.user = handlingEditor.id
-    req.params.collectionId = standardCollection.id
-    req.params.invitationId = standardCollection.invitations[0].id
+    req.params.collectionId = collection.id
+    req.params.invitationId = collection.invitations[0].id
     const res = httpMocks.createResponse()
     await require(patchPath)(models)(req, res)
 
     expect(res.statusCode).toBe(400)
     const data = JSON.parse(res._getData())
     expect(data.error).toEqual('Missing parameters')
-    body.isAccepted = true
   })
   it('should return an error if the collection does not exists', async () => {
+    const { handlingEditor } = testFixtures.users
     const req = httpMocks.createRequest({
       body,
     })
@@ -84,11 +84,13 @@ describe('Patch collections invitations route handler', () => {
     expect(data.error).toEqual('collection not found')
   })
   it('should return an error when the invitation does not exist', async () => {
+    const { user } = testFixtures.users
+    const { collection } = testFixtures.collections
     const req = httpMocks.createRequest({
       body,
     })
-    req.user = author.id
-    req.params.collectionId = standardCollection.id
+    req.user = user.id
+    req.params.collectionId = collection.id
     req.params.invitationId = 'invalid-id'
     const res = httpMocks.createResponse()
     await require(patchPath)(models)(req, res)
diff --git a/packages/component-invite/src/tests/collectionsInvitations/post.test.js b/packages/component-invite/src/tests/collectionsInvitations/post.test.js
index cebe37f0a..2483df57e 100644
--- a/packages/component-invite/src/tests/collectionsInvitations/post.test.js
+++ b/packages/component-invite/src/tests/collectionsInvitations/post.test.js
@@ -7,6 +7,7 @@ const fixtures = require('./../fixtures/fixtures')
 const Chance = require('chance')
 const Model = require('./../helpers/Model')
 const config = require('config')
+const cloneDeep = require('lodash/cloneDeep')
 
 const configRoles = config.get('roles')
 
@@ -18,26 +19,26 @@ jest.mock('pubsweet-component-mail-service', () => ({
 }))
 const chance = new Chance()
 const roles = configRoles.collection
-const body = {
+const reqBody = {
   email: chance.email(),
   role: roles[random(0, roles.length - 1)],
   firstName: chance.first(),
   lastName: chance.last(),
   title: 'Mr',
   affiliation: chance.company(),
+  admin: false,
 }
-body.admin = body.role === 'admin'
 
-const notFoundError = new Error()
-notFoundError.name = 'NotFoundError'
-notFoundError.status = 404
-
-const { admin, editorInChief, author, invitedHandlingEditor } = fixtures.users
-const { standardCollection } = fixtures.collections
-const { heTeam } = fixtures.teams
 const postPath = '../../routes/collectionsInvitations/post'
 describe('Post collections invitations route handler', () => {
+  let testFixtures = {}
+  let body = {}
+  beforeEach(() => {
+    testFixtures = cloneDeep(fixtures)
+    body = cloneDeep(reqBody)
+  })
   it('should return an error params are missing', async () => {
+    const { admin } = testFixtures.users
     delete body.email
     const req = httpMocks.createRequest({
       body,
@@ -48,34 +49,28 @@ describe('Post collections invitations route handler', () => {
     expect(res.statusCode).toBe(400)
     const data = JSON.parse(res._getData())
     expect(data.error).toEqual('Email and role are required')
-    body.email = chance.email()
   })
   it('should return success when the editor in chief invites a handlingEditor with a collection', async () => {
-    const body = {
-      email: author.email,
+    const { user, editorInChief } = testFixtures.users
+    const { collection } = testFixtures.collections
+    body = {
+      email: user.email,
       role: 'handlingEditor',
     }
     const req = httpMocks.createRequest({
       body,
     })
     req.user = editorInChief.id
-    const initialSize = standardCollection.invitations.length
-    req.params.collectionId = standardCollection.id
+    req.params.collectionId = collection.id
     const res = httpMocks.createResponse()
     await require(postPath)(models)(req, res)
 
     expect(res.statusCode).toBe(200)
     const data = JSON.parse(res._getData())
     expect(data.email).toEqual(body.email)
-    expect(standardCollection.invitations.length).toBeGreaterThan(initialSize)
-    expect(heTeam.members).toContain(author.id)
-    expect(author.teams).toContain(heTeam.id)
-    const matchingInvitation = standardCollection.invitations.find(
-      inv => inv.userId === author.id && inv.role === body.role,
-    )
-    expect(matchingInvitation).toBeDefined()
   })
   it('should return an error when inviting his self', async () => {
+    const { editorInChief } = testFixtures.users
     body.role = roles[random(0, roles.length - 1)]
     body.email = editorInChief.email
     const req = httpMocks.createRequest({
@@ -90,6 +85,7 @@ describe('Post collections invitations route handler', () => {
     expect(data.error).toEqual('Cannot invite yourself')
   })
   it('should return an error when the role is invalid', async () => {
+    const { editorInChief } = testFixtures.users
     body.role = 'someRandomRole'
     const req = httpMocks.createRequest({
       body,
@@ -101,15 +97,17 @@ describe('Post collections invitations route handler', () => {
     expect(data.error).toEqual(`Role ${body.role} is invalid`)
   })
   it('should return success when the EiC resends an invitation to a handlingEditor with a collection', async () => {
-    const body = {
-      email: invitedHandlingEditor.email,
+    const { handlingEditor, editorInChief } = testFixtures.users
+    const { collection } = testFixtures.collections
+    body = {
+      email: handlingEditor.email,
       role: 'handlingEditor',
     }
     const req = httpMocks.createRequest({
       body,
     })
     req.user = editorInChief.id
-    req.params.collectionId = standardCollection.id
+    req.params.collectionId = collection.id
     const res = httpMocks.createResponse()
     await require(postPath)(models)(req, res)
 
diff --git a/packages/component-invite/src/tests/fixtures/collections.js b/packages/component-invite/src/tests/fixtures/collections.js
index 9c84f6984..f2074be3a 100644
--- a/packages/component-invite/src/tests/fixtures/collections.js
+++ b/packages/component-invite/src/tests/fixtures/collections.js
@@ -1,18 +1,14 @@
 const Chance = require('chance')
-const {
-  handlingEditor,
-  submittingAuthor,
-  invitedHandlingEditor,
-} = require('./userData')
+const { user, handlingEditor } = require('./userData')
 
 const chance = new Chance()
-module.exports = {
-  standardCollection: {
+const collections = {
+  collection: {
     id: chance.guid(),
-    title: 'Standard Collection',
+    title: chance.sentence(),
     type: 'collection',
     fragments: [],
-    owners: [submittingAuthor.id],
+    owners: [user.id],
     save: jest.fn(),
     invitations: [
       {
@@ -23,30 +19,16 @@ module.exports = {
         userId: handlingEditor.id,
         timestamp: chance.timestamp(),
       },
-      {
-        id: chance.guid(),
-        role: 'handlingEditor',
-        hasAnswer: false,
-        isAccepted: false,
-        userId: invitedHandlingEditor.id,
-        timestamp: chance.timestamp(),
-      },
     ],
-  },
-  noInvitationsCollection: {
-    id: chance.guid(),
-    title: 'No Team Collection',
-    type: 'collection',
-    fragments: [],
-    owners: [],
-    save: jest.fn(),
-  },
-  authorsCollection: {
-    id: chance.guid(),
-    title: chance.sentence(),
-    type: 'collection',
-    fragments: [],
-    owners: [submittingAuthor.id],
-    save: jest.fn(),
+    handlingEditor: {
+      id: handlingEditor.id,
+      hasAnswer: false,
+      isAccepted: false,
+      email: handlingEditor.email,
+      timestamp: chance.timestamp(),
+      name: `${handlingEditor.firstName} ${handlingEditor.lastName}`,
+    },
   },
 }
+
+module.exports = collections
diff --git a/packages/component-invite/src/tests/fixtures/teams.js b/packages/component-invite/src/tests/fixtures/teams.js
index 0d2cf2e2c..ad1baa826 100644
--- a/packages/component-invite/src/tests/fixtures/teams.js
+++ b/packages/component-invite/src/tests/fixtures/teams.js
@@ -2,8 +2,8 @@ const users = require('./users')
 const collections = require('./collections')
 const { heTeamID } = require('./teamIDs')
 
-const { standardCollection } = collections
-const { handlingEditor, invitedHandlingEditor } = users
+const { collection } = collections
+const { handlingEditor } = users
 const teams = {
   heTeam: {
     teamType: {
@@ -14,9 +14,9 @@ const teams = {
     name: 'HandlingEditor',
     object: {
       type: 'collection',
-      id: standardCollection.id,
+      id: collection.id,
     },
-    members: [handlingEditor.id, invitedHandlingEditor.id],
+    members: [handlingEditor.id],
     save: jest.fn(() => teams.heTeam),
     updateProperties: jest.fn(() => teams.heTeam),
     id: heTeamID,
diff --git a/packages/component-invite/src/tests/fixtures/userData.js b/packages/component-invite/src/tests/fixtures/userData.js
index e20b12f52..525dda182 100644
--- a/packages/component-invite/src/tests/fixtures/userData.js
+++ b/packages/component-invite/src/tests/fixtures/userData.js
@@ -9,7 +9,7 @@ module.exports = {
     firstName: chance.first(),
     lastName: chance.last(),
   },
-  submittingAuthor: {
+  user: {
     id: chance.guid(),
     email: chance.email(),
     firstName: chance.first(),
@@ -19,10 +19,4 @@ module.exports = {
     id: chance.guid(),
     email: chance.email(),
   },
-  invitedHandlingEditor: {
-    id: chance.guid(),
-    email: chance.email(),
-    firstName: chance.first(),
-    lastName: chance.last(),
-  },
 }
diff --git a/packages/component-invite/src/tests/fixtures/users.js b/packages/component-invite/src/tests/fixtures/users.js
index caeb4d1ce..fc944b522 100644
--- a/packages/component-invite/src/tests/fixtures/users.js
+++ b/packages/component-invite/src/tests/fixtures/users.js
@@ -1,10 +1,5 @@
 const { heTeamID } = require('./teamIDs')
-const {
-  handlingEditor,
-  submittingAuthor,
-  admin,
-  invitedHandlingEditor,
-} = require('./userData')
+const { handlingEditor, user, admin } = require('./userData')
 const Chance = require('chance')
 
 const chance = new Chance()
@@ -19,15 +14,14 @@ const users = {
   },
   editorInChief: {
     type: 'user',
-    username: 'editor',
-    email: 'editor@example.com',
-    password: 'test1234',
+    username: chance.word(),
+    email: chance.email(),
+    password: 'password',
     admin: false,
-    id: 'editor123',
-    passwordResetToken: 'token123',
-    firstName: 'john',
-    lastName: 'smith',
-    affiliation: 'MIT',
+    id: chance.guid(),
+    firstName: chance.first(),
+    lastName: chance.last(),
+    affiliation: chance.company(),
     title: 'Mr',
     save: jest.fn(() => users.editorInChief),
     isConfirmed: false,
@@ -35,9 +29,9 @@ const users = {
   },
   handlingEditor: {
     type: 'user',
-    username: 'handling',
+    username: chance.word(),
     email: handlingEditor.email,
-    password: 'test',
+    password: 'password',
     admin: false,
     id: handlingEditor.id,
     firstName: handlingEditor.firstName,
@@ -46,48 +40,21 @@ const users = {
     save: jest.fn(() => users.handlingEditor),
     editorInChief: false,
     handlingEditor: true,
-  },
-  author: {
-    type: 'user',
-    username: 'author',
-    email: 'author@example.com',
-    password: 'test',
-    admin: false,
-    id: 'author123',
-    passwordResetToken: 'token123',
-    firstName: 'leopold',
-    lastName: 'smith',
-    affiliation: 'MIT',
     title: 'Mr',
-    save: jest.fn(() => users.author),
-    isConfirmed: false,
-  },
-  invitedHandlingEditor: {
-    type: 'user',
-    username: 'invited',
-    email: invitedHandlingEditor.email,
-    password: 'test',
-    admin: false,
-    id: invitedHandlingEditor.id,
-    firstName: invitedHandlingEditor.firstName,
-    lastName: invitedHandlingEditor.lastName,
-    teams: [heTeamID],
-    save: jest.fn(() => users.invitedHandlingEditor),
-    editorInChief: false,
   },
-  submittingAuthor: {
+  user: {
     type: 'user',
-    username: 'sauthor',
-    email: submittingAuthor.email,
+    username: chance.word(),
+    email: user.email,
     password: 'password',
     admin: false,
-    id: submittingAuthor.id,
+    id: user.id,
     passwordResetToken: chance.hash(),
-    firstName: submittingAuthor.firstName,
-    lastName: submittingAuthor.lastName,
+    firstName: user.firstName,
+    lastName: user.lastName,
     affiliation: chance.company(),
     title: 'Mr',
-    save: jest.fn(() => users.submittingAuthor),
+    save: jest.fn(() => users.user),
     isConfirmed: false,
   },
 }
-- 
GitLab