diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 6a9870968e93df0c20c5b054fc6afb5fabe2c78e..88c620dd790fcc45156cb8fbf7f76512055c3bee 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -64,5 +64,5 @@ demo:now:
     url: $NOW_URL
   script:
     - npm i -g --unsafe-perm now
-    - cd ${HOME}
-    - npm run deploy_now
\ No newline at end of file
+    - cd ${HOME}/now
+    - now --public --docker --token $NOW_TOKEN -e AWS_S3_ACCESS_KEY=$AWS_S3_ACCESS_KEY -e AWS_S3_SECRET_KEY=$AWS_S3_SECRET_KEY -e AWS_S3_REGION=$AWS_S3_REGION -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_SES_SECRET_KEY=$AWS_SES_SECRET_KEY -e AWS_SES_ACCESS_KEY=$AWS_SES_ACCESS_KEY -e AWS_SES_REGION=$AWS_SES_REGION -e EMAIL_SENDER=$EMAIL_SENDER -e secret=$SECRET
\ No newline at end of file
diff --git a/Dockerfile b/Dockerfile
index 698c88f458e85c2f87bdb64b4f9722ea6a2c6bfc..6b7916c6b878cd4d86b238fdca907fe1ea0aefbf 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,6 +3,7 @@ FROM xpub/xpub:base
 COPY package.json yarn.lock ./
 COPY lerna.json .babelrc .eslintignore .eslintrc .prettierrc .stylelintignore .stylelintrc ./
 COPY packages packages
+COPY now now
 
 RUN [ "yarn", "config", "set", "workspaces-experimental", "true" ]
 
diff --git a/package.json b/package.json
index d3ba020bbae08ea43170d63411b295dfcbc9a6bd..079e1d213d174a5d15d3b0943eded9c29c5e2881 100644
--- a/package.json
+++ b/package.json
@@ -36,8 +36,7 @@
     "lint:style": "stylelint packages/**/*.scss packages/**/*.css",
     "precommit": "lint-staged",
     "styleguide": "lerna run styleguide",
-    "test": "lerna run test",
-    "deploy_now": "cd now && now --public --docker --token $NOW_TOKEN -e AWS_S3_ACCESS_KEY=$AWS_S3_ACCESS_KEY -e AWS_S3_SECRET_KEY=$AWS_S3_SECRET_KEY -e AWS_S3_REGION=$AWS_S3_REGION -e AWS_S3_BUCKET=$AWS_S3_BUCKET -e AWS_SES_SECRET_KEY=$AWS_SES_SECRET_KEY -e AWS_SES_ACCESS_KEY=$AWS_SES_ACCESS_KEY -e AWS_SES_REGION=$AWS_SES_REGION -e EMAIL_SENDER=$EMAIL_SENDER -e secret=$SECRET"
+    "test": "lerna run test"
   },
   "lint-staged": {
     "*.js": [
diff --git a/packages/component-invite/src/routes/getCollectionUsers.js b/packages/component-invite/src/routes/getCollectionUsers.js
index c1389b98c1e00722f03a65309d4263b9d95dd693..3644aa4c50f9f48d965cbeb8f752d955f55a87e2 100644
--- a/packages/component-invite/src/routes/getCollectionUsers.js
+++ b/packages/component-invite/src/routes/getCollectionUsers.js
@@ -1,6 +1,8 @@
 const helpers = require('../helpers/helpers')
 const teamHelper = require('../helpers/Team')
+const config = require('config')
 
+const configRoles = config.get('roles')
 module.exports = models => async (req, res) => {
   const { role } = req.query
   if (!helpers.checkForUndefinedParams(role)) {
@@ -8,6 +10,17 @@ module.exports = models => async (req, res) => {
     return
   }
 
+  if (!configRoles.collection.includes(role)) {
+    res.status(400).json({ error: `Role ${role} is invalid` })
+    return
+  }
+
+  const reqUser = await models.User.find(req.user)
+  if (!reqUser.editorInChief) {
+    res.status(400).json({ error: 'The request user must be Editor in Chief' })
+    return
+  }
+
   const { collectionId } = req.params
   try {
     await models.Collection.find(collectionId)
diff --git a/packages/component-invite/src/tests/getCollectionUsers.test.js b/packages/component-invite/src/tests/getCollectionUsers.test.js
index 2458b1044b8349bbc9f7f00fd6c8732be6cd1ba1..1599ea3c1ee57da7e8b38e25efd7d93d3ef668dd 100644
--- a/packages/component-invite/src/tests/getCollectionUsers.test.js
+++ b/packages/component-invite/src/tests/getCollectionUsers.test.js
@@ -5,7 +5,8 @@ const httpMocks = require('node-mocks-http')
 const fixtures = require('./fixtures/fixtures')
 const Model = require('./helpers/Model')
 
-const user = fixtures.users.editorInChief
+const { standardCollection } = fixtures.collections
+const { editorInChief, admin } = fixtures.users
 const query = {
   role: 'handlingEditor',
 }
@@ -14,7 +15,8 @@ describe('Get collection users route handler', () => {
   it('should return success when the role is correct, the collection exists and the request user is editorInChief ', async () => {
     const req = httpMocks.createRequest()
     req.query = query
-    req.params.collectionId = '2c4fb766-a798-4c32-b857-c5d21a2ab331'
+    req.params.collectionId = standardCollection.id
+    req.user = editorInChief.id
     const res = httpMocks.createResponse()
     const models = Model.build()
     await require(getCollectionUsersPath)(models)(req, res)
@@ -27,13 +29,51 @@ describe('Get collection users route handler', () => {
     delete query.role
     const req = httpMocks.createRequest()
     req.query = query
-
+    req.user = editorInChief.id
     const res = httpMocks.createResponse()
-    const models = Model.build(user)
+    const models = Model.build()
     await require(getCollectionUsersPath)(models)(req, res)
     expect(res.statusCode).toBe(400)
     const data = JSON.parse(res._getData())
     expect(data.error).toEqual('Role is required')
-    query.email = 'handlingEditor'
+    query.role = 'handlingEditor'
+  })
+  it('should return an error when the collection does not exist', async () => {
+    const req = httpMocks.createRequest()
+    req.query = query
+    req.params.collectionId = 'invalid-id'
+    req.user = editorInChief.id
+    const res = httpMocks.createResponse()
+    const models = Model.build()
+    await require(getCollectionUsersPath)(models)(req, res)
+    expect(res.statusCode).toBe(404)
+    const data = JSON.parse(res._getData())
+    expect(data.error).toEqual('collection not found')
+  })
+  it('should return an error when the role is invalid', async () => {
+    query.role = 'invalidRole'
+    const req = httpMocks.createRequest()
+    req.query = query
+    req.params.collectionId = standardCollection.id
+    req.user = editorInChief.id
+    const res = httpMocks.createResponse()
+    const models = Model.build()
+    await require(getCollectionUsersPath)(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'
+  })
+  it('should return an error when the request user is not editorInChief', async () => {
+    const req = httpMocks.createRequest()
+    req.query = query
+    req.params.collectionId = standardCollection.id
+    req.user = admin.id
+    const res = httpMocks.createResponse()
+    const models = Model.build()
+    await require(getCollectionUsersPath)(models)(req, res)
+    expect(res.statusCode).toBe(400)
+    const data = JSON.parse(res._getData())
+    expect(data.error).toEqual('The request user must be Editor in Chief')
   })
 })
diff --git a/packages/components-faraday/src/components/AuthorList/AuthorAdder.js b/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
index eccca432675ccaadea8061465644fc4afe690571..2cb1d3258fbd47afa1004fa0fb6af36b29a46314 100644
--- a/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
+++ b/packages/components-faraday/src/components/AuthorList/AuthorAdder.js
@@ -27,7 +27,7 @@ const AuthorAdder = ({
   isFetching,
 }) => (
   <Root>
-    <Button onClick={setEditMode(true)} primary>
+    <Button data-test="button-add-author" onClick={setEditMode(true)} primary>
       {authors.length === 0 ? '+ Add submitting author' : '+ Add author'}
     </Button>
     {editMode && (
@@ -54,9 +54,15 @@ const AuthorAdder = ({
           <MenuItem label="Country*" name="country" options={countries} />
         </Row>
         <ButtonsContainer>
-          <Button onClick={setEditMode(false)}>Cancel</Button>
+          <Button data-test="button-cancel-author" onClick={setEditMode(false)}>
+            Cancel
+          </Button>
           {!isFetching ? (
-            <Button onClick={handleSubmit} primary>
+            <Button
+              data-test="button-save-author"
+              onClick={handleSubmit}
+              primary
+            >
               Save
             </Button>
           ) : (
diff --git a/packages/components-faraday/src/components/AuthorList/FormItems.js b/packages/components-faraday/src/components/AuthorList/FormItems.js
index 807a34fe4cd3103414ecfb16871e67a9ad9851bc..96040013537ca947984c8151894f1e09fa4848e0 100644
--- a/packages/components-faraday/src/components/AuthorList/FormItems.js
+++ b/packages/components-faraday/src/components/AuthorList/FormItems.js
@@ -19,7 +19,7 @@ export const ValidatedTextField = ({
 }
 
 export const MenuItem = ({ label, name, options }) => (
-  <MenuItemRoot>
+  <MenuItemRoot data-test="country-selector-author">
     <StyledLabel>{label}</StyledLabel>
     <ValidatedField
       component={input => <Menu {...input} options={options} />}
diff --git a/packages/xpub-faraday/package.json b/packages/xpub-faraday/package.json
index 365407d9373fac7980c27e0f9773f0b71db7bc16..84bcffe1ebda407d2399808effe8c1e920bacae4 100644
--- a/packages/xpub-faraday/package.json
+++ b/packages/xpub-faraday/package.json
@@ -78,7 +78,7 @@
     "setupdb": "pubsweet setupdb ./",
     "reset": "pubsweet setupdb --clobber ./",
     "start": "pubsweet start",
-    "start-now": "echo $secret > config/local-development.json && npm run start",
+    "start-now": "echo $secret > config/local-development.json && npm run reset --username admin --email admin@mailinator.com --password admin123 && npm run start",
     "build": "NODE_ENV=production pubsweet build"
   }
 }