diff --git a/cypress/fixtures/submission_form_data.json b/cypress/fixtures/submission_form_data.json index 6d310f547f441d847d230a1119d3ff963216e262..aa05ab92ef455671228696c3091734336dcecc2e 100644 --- a/cypress/fixtures/submission_form_data.json +++ b/cypress/fixtures/submission_form_data.json @@ -25,5 +25,14 @@ "articleId": "123", "description": "This is my description", "evaluationContent": "This is my evaluation content", - "evaluationType": "Peer Review" + "evaluationType": "Peer Review", + "ourTake": "This is our take", + "studyDesign": "Case-series", + "studySetting": "This is the study setting", + "mainFindings": "These are the main findings", + "studyStrengths": "This is the study strength", + "limitations": "These are the limitations", + "valueAdded": "This is the value added", + "label": "Ready to evaluate", + "topic": "modeling" } \ No newline at end of file diff --git a/cypress/integration/elife/manuscripts_page_spec.js b/cypress/integration/elife/manuscripts_page_spec.js index 502349bf35e290ef7b4624e10e028cbeba4d3e1c..50d7997a5f68b6b942562d8163e48a3215abe42f 100644 --- a/cypress/integration/elife/manuscripts_page_spec.js +++ b/cypress/integration/elife/manuscripts_page_spec.js @@ -93,15 +93,15 @@ describe('Manuscripts page tests', () => { NewSubmissionPage.clickSubmitURL() SubmissionFormPage.fillInArticleld('def') Menu.clickManuscripts() - ManuscriptsPage.getArticleIdColumn(0).should('contain', 'def') - ManuscriptsPage.getArticleIdColumn(1).should('contain', 'abc') - ManuscriptsPage.getArticleIdColumn(2).should('contain', '456') - ManuscriptsPage.getArticleIdColumn(3).should('contain', '123') - ManuscriptsPage.clickArticleId(0) - ManuscriptsPage.getArticleIdColumn(0).should('contain', '123') - ManuscriptsPage.getArticleIdColumn(1).should('contain', '456') - ManuscriptsPage.getArticleIdColumn(2).should('contain', 'abc') - ManuscriptsPage.getArticleIdColumn(3).should('contain', 'def') + ManuscriptsPage.getArticleIdByRow(0).should('contain', 'def') + ManuscriptsPage.getArticleIdByRow(1).should('contain', 'abc') + ManuscriptsPage.getArticleIdByRow(2).should('contain', '456') + ManuscriptsPage.getArticleIdByRow(3).should('contain', '123') + ManuscriptsPage.clickTableHead(0) + ManuscriptsPage.getArticleIdByRow(0).should('contain', '123') + ManuscriptsPage.getArticleIdByRow(1).should('contain', '456') + ManuscriptsPage.getArticleIdByRow(2).should('contain', 'abc') + ManuscriptsPage.getArticleIdByRow(3).should('contain', 'def') }) }) @@ -213,10 +213,10 @@ describe('Manuscripts page tests', () => { }) }) it('assert atricle id is the first table head and contains submitted atricle id title', () => { - ManuscriptsPage.getTabelHead(0).should('contain', 'Article Id') + ManuscriptsPage.getTableHead(0).should('contain', 'Article Id') // eslint-disable-next-line jest/valid-expect-in-promise cy.fixture('submission_form_data').then(data => { - ManuscriptsPage.getArticleIdColumn(0).should('contain', data.articleId) + ManuscriptsPage.getArticleIdByRow(0).should('contain', data.articleId) }) }) }) diff --git a/cypress/integration/ncrc/manuscripts_page_spec.js b/cypress/integration/ncrc/manuscripts_page_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..053271651e4c44402cf81bb58e300bff6ca03bf6 --- /dev/null +++ b/cypress/integration/ncrc/manuscripts_page_spec.js @@ -0,0 +1,172 @@ +import { manuscripts } from '../../support/routes' +import { ManuscriptsPage } from '../../page-object/manuscripts-page' +import { NewSubmissionPage } from '../../page-object/new-submission-page' +import { SubmissionFormPage } from '../../page-object/submission-form-page' +import { Menu } from '../../page-object/page-component/menu' + +describe('manuscripts page tests', () => { + beforeEach(() => { + // task to restore the database as per the dumps/initialState.sql + cy.task('restore', 'initialState') + + // login as admin + // eslint-disable-next-line jest/valid-expect-in-promise + cy.fixture('role_names').then(name => { + cy.login(name.role.admin, manuscripts) + }) + }) + context('elements visibility', () => { + it('submit button should be visible & dashboard page should not exist', () => { + ManuscriptsPage.getSubmitButton().should('be.visible') + Menu.getDashboardButton().should('not.exist') + }) + + it('evaluation button should be visible for unsubmitted articles', () => { + ManuscriptsPage.clickSubmit() + NewSubmissionPage.clickSubmitURL() + // fill the submit form and submit it + // eslint-disable-next-line jest/valid-expect-in-promise + cy.fixture('submission_form_data').then(data => { + SubmissionFormPage.fillInArticleDescription(data.articleId) + }) + Menu.clickManuscripts() + ManuscriptsPage.getEvaluationButton() + .scrollIntoView() + .should('be.visible') + }) + it('label & topics should be visible on manuscripts page', () => { + ManuscriptsPage.clickSubmit() + NewSubmissionPage.clickSubmitURL() + // fill the submit form and submit it + // eslint-disable-next-line jest/valid-expect-in-promise + cy.fixture('submission_form_data').then(data => { + SubmissionFormPage.clickDropdown(-1) + SubmissionFormPage.selectDropdownOption(1) + SubmissionFormPage.clickTopicsCheckboxWithText(data.topic) + SubmissionFormPage.clickTopicsCheckboxWithText('epidemiology') + Menu.clickManuscripts() + ManuscriptsPage.getArticleLabel() + .should('be.visible') + .and('contain', 'evaluated') + ManuscriptsPage.getArticleTopic(0).should('contain', data.topic) + ManuscriptsPage.getArticleTopic(1).should('contain', 'epidemiology') + }) + }) + }) + context('unsubmitted article tests', () => { + beforeEach(() => { + ManuscriptsPage.clickSubmit() + NewSubmissionPage.clickSubmitURL() + }) + + it('unsubmitted article is evaluated', () => { + // eslint-disable-next-line jest/valid-expect-in-promise + cy.fixture('submission_form_data').then(data => { + SubmissionFormPage.fillInArticleDescription(data.title) + }) + Menu.clickManuscripts() + ManuscriptsPage.clickEvaluation() + cy.url().should('contain', 'evaluation') + SubmissionFormPage.getArticleUrl().should('have.value', '') + // eslint-disable-next-line + SubmissionFormPage.getOurTakeContent().should('have.value', '') + SubmissionFormPage.getDropdown(0).should('have.value', '') + SubmissionFormPage.getStudySettingContent().should('have.value', '') + SubmissionFormPage.getMainFindingsContent().should('have.value', '') + SubmissionFormPage.getStudyStrengthsContent().should('have.value', '') + SubmissionFormPage.getLimitationsContent().should('have.value', '') + SubmissionFormPage.getValueAddedContent().should('have.value', '') + SubmissionFormPage.getDropdown(1).should('have.value', '') + // eslint-disable-next-line jest/valid-expect-in-promise + cy.fixture('submission_form_data').then(data => { + SubmissionFormPage.fillInArticleUrl(data.doi) + SubmissionFormPage.fillInArticleDescription(data.articleId) + SubmissionFormPage.fillInOurTake(data.ourTake) + SubmissionFormPage.clickDropdown(0) + SubmissionFormPage.selectDropdownOption(0) + SubmissionFormPage.fillInStudySetting(data.studySetting) + SubmissionFormPage.fillInMainFindings(data.mainFindings) + SubmissionFormPage.fillInStudyStrengths(data.studyStrengths) + SubmissionFormPage.fillInLimitations(data.limitations) + SubmissionFormPage.fillInValueAdded(data.valueAdded) + SubmissionFormPage.clickDropdown(-1) + SubmissionFormPage.selectDropdownOption(0) + SubmissionFormPage.clickTopicsCheckboxWithText(data.topic) + SubmissionFormPage.clickSubmitManuscript() + ManuscriptsPage.getStatus(0).should('eq', 'evaluated') + ManuscriptsPage.getArticleTopic(0) + .should('be.visible') + .should('contain', data.topic) + ManuscriptsPage.getArticleLabel().should('contain', 'ready to evaluate') + }) + }) + }) + context('submitted and evaluated article tests', () => { + beforeEach(() => { + ManuscriptsPage.clickSubmit() + NewSubmissionPage.clickSubmitURL() + // fill the submit form and submit it + // eslint-disable-next-line jest/valid-expect-in-promise + cy.fixture('submission_form_data').then(data => { + SubmissionFormPage.fillInArticleUrl(data.doi) + SubmissionFormPage.fillInArticleDescription(data.title) + SubmissionFormPage.fillInOurTake(data.ourTake) + SubmissionFormPage.clickDropdown(0) + SubmissionFormPage.selectDropdownOption(0) + SubmissionFormPage.fillInStudySetting(data.studySetting) + SubmissionFormPage.fillInMainFindings(data.mainFindings) + SubmissionFormPage.fillInStudyStrengths(data.studyStrengths) + SubmissionFormPage.fillInLimitations(data.limitations) + SubmissionFormPage.fillInValueAdded(data.valueAdded) + SubmissionFormPage.clickDropdown(-1) + SubmissionFormPage.selectDropdownOption(0) + SubmissionFormPage.clickTopicsCheckboxWithText(data.topic) + SubmissionFormPage.clickSubmitManuscript() + }) + }) + it('manuscripts page should contain the correct details after submission', () => { + cy.url().should('contain', 'manuscripts') + ManuscriptsPage.getStatus(0).should('eq', 'Submitted') + ManuscriptsPage.getManuscriptsPageTitle().should('be.visible') + ManuscriptsPage.getEvaluationButton() + .scrollIntoView() + .should('be.visible') + ManuscriptsPage.getControlButton().should('not.exist') + ManuscriptsPage.getOptionWithText('View').should('be.visible') + ManuscriptsPage.getOptionWithText('Delete').should('be.visible') + ManuscriptsPage.getOptionWithText('Publish').should('be.visible') + // eslint-disable-next-line jest/valid-expect-in-promise + cy.fixture('submission_form_data').then(data => { + ManuscriptsPage.getArticleTopic(0) + .should('be.visible') + .should('contain', data.topic) + }) + ManuscriptsPage.getArticleLabel().should('contain', 'ready to evaluate') + }) + it('evaluate article and check status is changed', () => { + ManuscriptsPage.getStatus(0).should('eq', 'Submitted') + ManuscriptsPage.clickEvaluation(0) + + SubmissionFormPage.clickSubmitManuscript() + + ManuscriptsPage.getStatus(0).should('eq', 'evaluated') + }) + it('evaluation changes should be visible', () => { + // eslint-disable-next-line jest/valid-expect-in-promise + cy.fixture('submission_form_data').then(data => { + ManuscriptsPage.getStatus(0).should('eq', 'Submitted') + ManuscriptsPage.clickEvaluation(0) + SubmissionFormPage.fillInValueAdded('Evaluated') + SubmissionFormPage.clickTopicsCheckboxWithText('vaccines') + SubmissionFormPage.clickSubmitManuscript() + ManuscriptsPage.clickEvaluation() + // eslint-disable-next-line + SubmissionFormPage.getValueAddedField().should( + 'not.have.text', + data.valueAdded, + ) + SubmissionFormPage.getValueAddedField().should('have.text', 'Evaluated') + }) + }) + }) +}) diff --git a/cypress/page-object/manuscripts-page.js b/cypress/page-object/manuscripts-page.js index 29e9d4a44c352ee56901b3a3698e8d2cac5367b2..75492dca9aa823e121f304d1eddd03f62be556a7 100644 --- a/cypress/page-object/manuscripts-page.js +++ b/cypress/page-object/manuscripts-page.js @@ -14,6 +14,8 @@ const AUTHOR_FIELD = 'UserCombo__Primary' const STATUS_FIELD = 'Badge__Status' const MANUSCRIPTS_TABLE_HEAD = '[class*=Table__Header] > tr >th' const ARTICLE_ID = '[class*=Table__Row]>td:nth-child(1)' +const ARTICLE_LABEL = 'style__StyledTableLabel' +const ARTICLE_TOPIC = '[class*=Table__Cell] > [title]' export const ManuscriptsPage = { getManuscriptsOptionsList() { @@ -58,14 +60,20 @@ export const ManuscriptsPage = { getStatus(nth) { return this.getStatusField(nth).invoke('text') }, - getTabelHead(nth) { + getTableHead(nth) { return cy.get(MANUSCRIPTS_TABLE_HEAD).eq(nth) }, - getArticleIdColumn(nth) { + getArticleIdByRow(nth) { return cy.get(ARTICLE_ID).eq(nth) }, - clickArticleId() { - cy.get(MANUSCRIPTS_TABLE_HEAD).eq(0).click() + clickTableHead(nth) { + this.getTableHead(nth).click() + }, + getArticleLabel() { + return cy.getByContainsClass(ARTICLE_LABEL) + }, + getArticleTopic(nth) { + return cy.get(ARTICLE_TOPIC).eq(nth) }, } export default ManuscriptsPage diff --git a/cypress/page-object/submission-form-page.js b/cypress/page-object/submission-form-page.js index 8b34966fe1da816e013402ecdedaaf05a0a11ba2..29e97db337553599b5700c3285d6d7c0cf64b1ac 100644 --- a/cypress/page-object/submission-form-page.js +++ b/cypress/page-object/submission-form-page.js @@ -32,8 +32,9 @@ const REFERENCES_FIELD = 'submission.references' const SUBMIT_RESEARCH_BUTTON = 'form > div > button' const SUBMIT_MANUSCRIPT_BUTTON = 'button[type=submit]' const VALIDATION_ERROR_MESSAGE = 'ValidatedField__MessageWrapper' -const CONTENT_ETIDABLE_VALUE = '[contenteditable="true"]' +const CONTENT_EDITABLE_VALUE = '[contenteditable="true"]' +// specific to elife const FORM_OPTION_LIST = '[class*=style__Section]' const FORM_OPTION_VALUE = 'singleValue' const ARTICLE_ID_FIELD = 'submission.articleId' @@ -42,6 +43,15 @@ const DESCRIPTION_FIELD = 'submission.description' const EVALUATION_CONTENT_FIELD = 'submission.evaluationContent' const CREATOR_FIELD = 'submission.creator' +// specific to ncrc +const ARTICLE_DESCRIPTION_FIELD = 'submission.articleDescription' +const OUR_TAKE_FIELD = 'submission.ourTake' +const DROPDOWN = 'placeholder' +const STUDY_SETTING_FIELD = 'submission.studyPopulationAndSetting' +const MAIN_FINDINGS_FIELD = 'submission.summaryOfMainFindings' +const STUDY_STRENGTHS_FIELD = 'submission.studyStrengths' +const LIMITATIONS_FIELD = 'submission.limitations' +const VALUE_ADDED_FIELD = 'submission.valueAdded' const TOPICS_CHECKBOX_LIST = 'submission.topics' export const SubmissionFormPage = { @@ -85,19 +95,19 @@ export const SubmissionFormPage = { return cy.getByDataTestId(COVER_FIELD) }, fillInCover(cover) { - this.getCoverField().find(CONTENT_ETIDABLE_VALUE).fillInput(cover) + this.getCoverField().find(CONTENT_EDITABLE_VALUE).fillInput(cover) }, getDataCodeField() { return cy.getByDataTestId(DATA_CODE_FIELD) }, fillInDataCode(dataCode) { - this.getDataCodeField().find(CONTENT_ETIDABLE_VALUE).fillInput(dataCode) + this.getDataCodeField().find(CONTENT_EDITABLE_VALUE).fillInput(dataCode) }, getEthicsField() { return cy.getByDataTestId(ETHICS_FIELD) }, fillInEthicsField(ethics) { - this.getEthicsField().find(CONTENT_ETIDABLE_VALUE).fillInput(ethics) + this.getEthicsField().find(CONTENT_EDITABLE_VALUE).fillInput(ethics) }, getTypeOfResearchDropdown() { return cy.getByContainsAreaLabel(TYPE_OF_RESEARCH_DROPDOWN) @@ -193,7 +203,7 @@ export const SubmissionFormPage = { return cy.getByDataTestId(REFERENCES_FIELD) }, fillReferences(references) { - this.getReferencesField().find(CONTENT_ETIDABLE_VALUE).fillInput(references) + this.getReferencesField().find(CONTENT_EDITABLE_VALUE).fillInput(references) }, getSubmitResearchButton() { return cy.get(SUBMIT_RESEARCH_BUTTON) @@ -245,7 +255,7 @@ export const SubmissionFormPage = { }, fillInEvaluationContent(evaluationContent) { this.getEvaluationContent() - .find(CONTENT_ETIDABLE_VALUE) + .find(CONTENT_EDITABLE_VALUE) .fillInput(evaluationContent) }, getCreatorField() { @@ -254,6 +264,72 @@ export const SubmissionFormPage = { fillInCreator(creator) { this.getCreatorField().fillInput(creator) }, + getArticleDescriptionField() { + return cy.getByName(ARTICLE_DESCRIPTION_FIELD) + }, + fillInArticleDescription(description) { + this.getArticleDescriptionField().fillInput(description) + }, + getOurTakeField() { + return cy.getByName(OUR_TAKE_FIELD) + }, + fillInOurTake(ourTake) { + this.getOurTakeField().fillInput(ourTake) + }, + getOurTakeContent() { + return this.getOurTakeField().find('p') + }, + getStudySettingField() { + return cy.getByName(STUDY_SETTING_FIELD) + }, + fillInStudySetting(studySetting) { + this.getStudySettingField().fillInput(studySetting) + }, + getStudySettingContent() { + return this.getStudySettingField().find('p') + }, + getMainFindingsField() { + return cy.getByName(MAIN_FINDINGS_FIELD) + }, + fillInMainFindings(mainFindings) { + this.getMainFindingsField().fillInput(mainFindings) + }, + getMainFindingsContent() { + return this.getMainFindingsField().find('p') + }, + getStudyStrengthsField() { + return cy.getByName(STUDY_STRENGTHS_FIELD) + }, + fillInStudyStrengths(studyStrengths) { + this.getStudyStrengthsField().fillInput(studyStrengths) + }, + getStudyStrengthsContent() { + return this.getStudyStrengthsField().find('p') + }, + getLimitationsField() { + return cy.getByName(LIMITATIONS_FIELD) + }, + fillInLimitations(limitations) { + this.getLimitationsField().fillInput(limitations) + }, + getLimitationsContent() { + return this.getLimitationsField().find('p') + }, + getValueAddedField() { + return cy.getByName(VALUE_ADDED_FIELD) + }, + fillInValueAdded(valueAdded) { + this.getValueAddedField().fillInput(valueAdded) + }, + getValueAddedContent() { + return this.getValueAddedField().find('p') + }, + getDropdown(nth) { + return cy.getByContainsClass(DROPDOWN).eq(nth) + }, + clickDropdown(nth) { + this.getDropdown(nth).click({ force: true }) + }, getTopicsCheckboxWithText(value) { return cy.getByNameAndValue(TOPICS_CHECKBOX_LIST, value) },