diff --git a/packages/components/xpub-submit/src/components/Suggestions.js b/packages/components/xpub-submit/src/components/Suggestions.js
index a226eec9b84d88fbe133c8eaf4dc7929ad33b0c2..59ebeec630b9d4eacd6901844575417842a718bb 100644
--- a/packages/components/xpub-submit/src/components/Suggestions.js
+++ b/packages/components/xpub-submit/src/components/Suggestions.js
@@ -93,22 +93,33 @@ const SuggestionsEditable = ({ readonly }) => (
   </FormSection>
 )
 
-const SuggestionsNonEditable = ({ readonly, version }) => [
-  <Section id="suggestions.reviewers">
-    <Legend>Suggested or opposed reviewers</Legend>
-    <SubLegend>Suggested reviewers</SubLegend>
-    <div>{version.suggestions.reviewers.suggested.join(', ')}</div>
-    <SubLegend>Opposed reviewers</SubLegend>
-    <div>{version.suggestions.reviewers.opposed.join(', ')}</div>
-  </Section>,
-  <Section id="suggestions.editors">
-    <Legend>Suggested or opposed editors</Legend>
-    <SubLegend>Suggested editors</SubLegend>
-    <div>{version.suggestions.editors.suggested.join(', ')}</div>
-    <SubLegend>Opposed editors</SubLegend>
-    <div>{version.suggestions.editors.opposed.join(', ')}</div>
-  </Section>,
-]
+const SuggestionsNonEditable = ({ readonly, version }) => {
+  const suggestions = version.suggestions || {}
+
+  return [
+    <Section id="suggestions.reviewers">
+      <Legend>Suggested or opposed reviewers</Legend>
+      <SubLegend>Suggested reviewers</SubLegend>
+      <div>{suggestionsText(suggestions.reviewers, 'suggested')}</div>
+      <SubLegend>Opposed reviewers</SubLegend>
+      <div>{suggestionsText(suggestions.reviewers, 'opposed')}</div>
+    </Section>,
+    <Section id="suggestions.editors">
+      <Legend>Suggested or opposed editors</Legend>
+      <SubLegend>Suggested editors</SubLegend>
+      <div>{suggestionsText(suggestions.editors, 'suggested')}</div>
+      <SubLegend>Opposed editors</SubLegend>
+      <div>{suggestionsText(suggestions.editors, 'opposed')}</div>
+    </Section>,
+  ]
+}
+
+const suggestionsText = (source, property) => {
+  if (source && Array.isArray(source[property]) && !!source[property].length) {
+    return source[property].join(', ')
+  }
+  return 'none'
+}
 
 export default branch(
   ({ readonly }) => readonly === true,
diff --git a/packages/components/xpub-submit/src/components/Suggestions.test.js b/packages/components/xpub-submit/src/components/Suggestions.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..905d43ed02235ca4955590c532d7adc638a05e8b
--- /dev/null
+++ b/packages/components/xpub-submit/src/components/Suggestions.test.js
@@ -0,0 +1,118 @@
+import React from 'react'
+import Enzyme, { mount, render } from 'enzyme'
+import Adapter from 'enzyme-adapter-react-16'
+import { FormSection, reduxForm } from 'redux-form'
+import { compose, withProps } from 'recompose'
+import { Provider } from 'react-redux'
+import configureMockStore from 'redux-mock-store'
+
+import Suggestions from './Suggestions'
+
+Enzyme.configure({ adapter: new Adapter() })
+
+jest.mock('config', () => ({ 'pubsweet-client': {} }))
+
+const mockStore = configureMockStore()
+const store = mockStore({})
+
+const suggestionsObject = {
+  suggestions: {
+    editors: {
+      opposed: ['editor', 'opposed'],
+      suggested: ['editor', 'suggested'],
+    },
+    reviewers: {
+      opposed: ['reviewer', 'opposed'],
+      suggested: ['reviewer', 'suggested'],
+    },
+  },
+  readonly: true,
+}
+
+const getSuggested = object =>
+  object
+    .children('div')
+    .first()
+    .text()
+
+const getOpposed = object =>
+  object
+    .children('div')
+    .last()
+    .text()
+
+const renderReduxWrapper = wrappedComponent => {
+  const SuggestionsEditable = compose(
+    reduxForm({}),
+    withProps({ readonly: false }),
+  )(wrappedComponent)
+  return render(
+    <Provider store={store}>
+      <form>
+        <SuggestionsEditable />
+      </form>
+    </Provider>,
+  )
+}
+
+const makeWrapper = (props = { readonly: true, suggestions: {} }) => {
+  const version = Object.assign(
+    {
+      suggestions: {
+        editors: {
+          opposed: [],
+          suggested: [],
+        },
+        reviewers: {
+          opposed: [],
+          suggested: [],
+        },
+      },
+    },
+    { suggestions: props.suggestions },
+  )
+  return mount(<Suggestions readonly={props.readonly} version={version} />)
+}
+
+const suggestions = makeWrapper(
+  Object.assign(suggestionsObject, { readonly: true }),
+)
+
+describe('Suggestions', () => {
+  it('shows an editable form', () => {
+    expect(
+      renderReduxWrapper(Suggestions).find('input[type="text"]'),
+    ).toHaveLength(4)
+  })
+
+  it('shows a non-editable form', () => {
+    const formSection = suggestions.find(FormSection)
+    expect(formSection).toHaveLength(0)
+  })
+
+  it('shows none suggested, opposed editors', () => {
+    const noneEditors = makeWrapper().find('div[id="suggestions.editors"]')
+    expect(getSuggested(noneEditors)).toEqual('none')
+    expect(getOpposed(noneEditors)).toEqual('none')
+  })
+
+  it('shows none suggested, opposed reviewers', () => {
+    const noneReviewers = makeWrapper().find('div[id="suggestions.reviewers"]')
+    expect(getSuggested(noneReviewers)).toEqual('none')
+    expect(getOpposed(noneReviewers)).toEqual('none')
+  })
+
+  it('shows a comma seperated suggested, opposed reviewers', () => {
+    const sectionReviewers = suggestions.find('div[id="suggestions.reviewers"]')
+    expect(getSuggested(sectionReviewers)).toEqual('reviewer, suggested')
+
+    expect(getOpposed(sectionReviewers)).toEqual('reviewer, opposed')
+  })
+
+  it('shows a comma seperated suggested, opposed editor', () => {
+    const sectionEditors = suggestions.find('div[id="suggestions.editors"]')
+    expect(getSuggested(sectionEditors)).toEqual('editor, suggested')
+
+    expect(getOpposed(sectionEditors)).toEqual('editor, opposed')
+  })
+})