From 2f1f7b9f705fff5e9f81637ba0c124a81e7ef9e3 Mon Sep 17 00:00:00 2001 From: Ema Suarasan <beatrice.suarasan@endava.com> Date: Fri, 9 Apr 2021 14:07:08 +0300 Subject: [PATCH] test: add page load assertions --- .../ncrc/form_builder_page_spec.js | 4 +- .../integration/ncrc/manuscripts_page_spec.js | 44 +++++++------- cypress/page-object/forms-page.js | 60 ++++++++++--------- cypress/page-object/manuscripts-page.js | 4 ++ cypress/page-object/new-submission-page.js | 46 ++++++++------ cypress/page-object/page-component/menu.js | 6 ++ cypress/page-object/submission-form-page.js | 10 ++++ cypress/support/routes.js | 2 + 8 files changed, 106 insertions(+), 70 deletions(-) diff --git a/cypress/integration/ncrc/form_builder_page_spec.js b/cypress/integration/ncrc/form_builder_page_spec.js index 9bba6426e1..9d5f7a00ff 100644 --- a/cypress/integration/ncrc/form_builder_page_spec.js +++ b/cypress/integration/ncrc/form_builder_page_spec.js @@ -14,6 +14,7 @@ describe('form builder tests', () => { cy.fixture('role_names').then(name => { cy.login(name.role.admin, formBuilder) }) + FormsPage.verifyPageLoaded() }) it('check form entries are correct', () => { // eslint-disable-next-line jest/valid-expect-in-promise @@ -84,8 +85,9 @@ describe('form builder tests', () => { cy.fixture('role_names').then(name => { cy.login(name.role.admin, manuscripts) }) + ManuscriptsPage.getTableHeader().should('be.visible') ManuscriptsPage.clickSubmit() - NewSubmissionPage.clickSubmitURL() + NewSubmissionPage.clickSubmitUrlAndVerifyLink() }) it('check submission form contains the same fields', () => { diff --git a/cypress/integration/ncrc/manuscripts_page_spec.js b/cypress/integration/ncrc/manuscripts_page_spec.js index a581d239c5..a5eb54f9d8 100644 --- a/cypress/integration/ncrc/manuscripts_page_spec.js +++ b/cypress/integration/ncrc/manuscripts_page_spec.js @@ -14,6 +14,7 @@ describe('manuscripts page tests', () => { cy.fixture('role_names').then(name => { cy.login(name.role.admin, manuscripts) }) + ManuscriptsPage.getTableHeader().should('be.visible') }) context('elements visibility', () => { it('submit button should be visible & dashboard page should not exist', () => { @@ -23,20 +24,20 @@ describe('manuscripts page tests', () => { it('evaluation button should be visible for unsubmitted articles', () => { ManuscriptsPage.clickSubmit() - NewSubmissionPage.clickSubmitURL() + NewSubmissionPage.clickSubmitUrlAndVerifyLink() // 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() + Menu.clickManuscriptsAndAssertPageLoad() ManuscriptsPage.getEvaluationButton() .scrollIntoView() .should('be.visible') }) it('label & topics should be visible on manuscripts page', () => { ManuscriptsPage.clickSubmit() - NewSubmissionPage.clickSubmitURL() + NewSubmissionPage.clickSubmitUrlAndVerifyLink() // fill the submit form and submit it // eslint-disable-next-line jest/valid-expect-in-promise cy.fixture('submission_form_data').then(data => { @@ -44,7 +45,7 @@ describe('manuscripts page tests', () => { SubmissionFormPage.selectDropdownOption(1) SubmissionFormPage.clickTopicsCheckboxWithText(data.topic) SubmissionFormPage.clickTopicsCheckboxWithText('epidemiology') - Menu.clickManuscripts() + Menu.clickManuscriptsAndAssertPageLoad() ManuscriptsPage.getArticleLabel() .should('be.visible') .and('contain', 'evaluated') @@ -56,7 +57,7 @@ describe('manuscripts page tests', () => { context('unsubmitted article tests', () => { beforeEach(() => { ManuscriptsPage.clickSubmit() - NewSubmissionPage.clickSubmitURL() + NewSubmissionPage.clickSubmitUrlAndVerifyLink() }) it('unsubmitted article is evaluated', () => { @@ -64,7 +65,7 @@ describe('manuscripts page tests', () => { cy.fixture('submission_form_data').then(data => { SubmissionFormPage.fillInArticleDescription(data.title) }) - Menu.clickManuscripts() + Menu.clickManuscriptsAndAssertPageLoad() ManuscriptsPage.clickEvaluation() cy.url().should('contain', 'evaluation') SubmissionFormPage.getArticleUrl().should('have.value', '') @@ -92,7 +93,7 @@ describe('manuscripts page tests', () => { SubmissionFormPage.clickDropdown(-1) SubmissionFormPage.selectDropdownOption(0) SubmissionFormPage.clickTopicsCheckboxWithText(data.topic) - SubmissionFormPage.clickSubmitManuscript() + SubmissionFormPage.clickSubmitManuscriptAndWaitPageLoad() ManuscriptsPage.getStatus(0).should('eq', 'evaluated') ManuscriptsPage.getArticleTopic(0) .should('be.visible') @@ -104,7 +105,7 @@ describe('manuscripts page tests', () => { context('submitted and evaluated article tests', () => { beforeEach(() => { ManuscriptsPage.clickSubmit() - NewSubmissionPage.clickSubmitURL() + NewSubmissionPage.clickSubmitUrlAndVerifyLink() // fill the submit form and submit it // eslint-disable-next-line jest/valid-expect-in-promise cy.fixture('submission_form_data').then(data => { @@ -122,8 +123,8 @@ describe('manuscripts page tests', () => { SubmissionFormPage.selectDropdownOption(0) SubmissionFormPage.clickTopicsCheckboxWithText(data.topic) // eslint-disable-next-line - cy.wait(2000) - SubmissionFormPage.clickSubmitManuscript() + SubmissionFormPage.waitThreeSec() + SubmissionFormPage.clickSubmitManuscriptAndWaitPageLoad() }) }) it('manuscripts page should contain the correct details after submission', () => { @@ -149,7 +150,7 @@ describe('manuscripts page tests', () => { ManuscriptsPage.getStatus(0).should('eq', 'Submitted') ManuscriptsPage.clickEvaluation(0) - SubmissionFormPage.clickSubmitManuscript() + SubmissionFormPage.clickSubmitManuscriptAndWaitPageLoad() ManuscriptsPage.getStatus(0).should('eq', 'evaluated') }) @@ -161,8 +162,8 @@ describe('manuscripts page tests', () => { SubmissionFormPage.fillInValueAdded('Evaluated') SubmissionFormPage.clickTopicsCheckboxWithText('vaccines') // eslint-disable-next-line - cy.wait(2500) - SubmissionFormPage.clickSubmitManuscript() + SubmissionFormPage.waitThreeSec() + SubmissionFormPage.clickSubmitManuscriptAndWaitPageLoad() ManuscriptsPage.clickEvaluation() // eslint-disable-next-line SubmissionFormPage.getValueAddedField().should( @@ -176,7 +177,7 @@ describe('manuscripts page tests', () => { context('filter and sort articles', () => { beforeEach(() => { ManuscriptsPage.clickSubmit() - NewSubmissionPage.clickSubmitURL() + NewSubmissionPage.clickSubmitUrlAndVerifyLink() // eslint-disable-next-line jest/valid-expect-in-promise cy.fixture('form_option').then(data => { SubmissionFormPage.fillInArticleDescription('123') @@ -185,9 +186,9 @@ describe('manuscripts page tests', () => { SubmissionFormPage.clickTopicsCheckboxWithText( data.ncrc.topicTypes.vaccines, ) - Menu.clickManuscripts() + Menu.clickManuscriptsAndAssertPageLoad() ManuscriptsPage.clickSubmit() - NewSubmissionPage.clickSubmitURL() + NewSubmissionPage.clickSubmitUrlAndVerifyLink() SubmissionFormPage.fillInArticleDescription('abc') SubmissionFormPage.clickElementFromFormOptionList(9) SubmissionFormPage.selectDropdownOption(1) @@ -197,9 +198,9 @@ describe('manuscripts page tests', () => { SubmissionFormPage.clickTopicsCheckboxWithText( data.ncrc.topicTypes.diagnostics, ) - Menu.clickManuscripts() + Menu.clickManuscriptsAndAssertPageLoad() ManuscriptsPage.clickSubmit() - NewSubmissionPage.clickSubmitURL() + NewSubmissionPage.clickSubmitUrlAndVerifyLink() SubmissionFormPage.fillInArticleDescription('def') SubmissionFormPage.clickElementFromFormOptionList(9) SubmissionFormPage.selectDropdownOption(0) @@ -209,9 +210,8 @@ describe('manuscripts page tests', () => { SubmissionFormPage.clickTopicsCheckboxWithText( data.ncrc.topicTypes.diagnostics, ) - Menu.clickManuscripts() + Menu.clickManuscriptsAndAssertPageLoad() // eslint-disable-next-line - cy.wait(2000) }) }) it('filter article after topic and url contain that topic', () => { @@ -219,7 +219,7 @@ describe('manuscripts page tests', () => { ManuscriptsPage.getTableRows().should('eq', 1) cy.url().should('contain', 'vaccines') ManuscriptsPage.getArticleTopic(0).should('contain', 'vaccines') - Menu.clickManuscripts() + Menu.clickManuscriptsAndAssertPageLoad() ManuscriptsPage.clickArticleTopic(1) ManuscriptsPage.getTableRows().should('eq', 2) cy.url().should('contain', 'diagnostics') @@ -230,7 +230,7 @@ describe('manuscripts page tests', () => { 'ecology and spillover', ) ManuscriptsPage.getArticleTopic(3).should('contain', 'diagnostics') - Menu.clickManuscripts() + Menu.clickManuscriptsAndAssertPageLoad() ManuscriptsPage.clickArticleTopic(0) ManuscriptsPage.getTableRows().should('eq', 1) cy.url().should('contain', 'modeling') diff --git a/cypress/page-object/forms-page.js b/cypress/page-object/forms-page.js index 9bc8175e9a..9cdd4ea3e0 100644 --- a/cypress/page-object/forms-page.js +++ b/cypress/page-object/forms-page.js @@ -3,37 +3,41 @@ * Page object representing the second option from the left side menu, * which contains a number of options & fields to fill in / dropdowns. */ -const FORM_TITLE_TAB = '[data-test-id="tab-container"] > div'; -const FORM_OPTION_LIST = '[class*=FormBuilder__Element] > button:nth-child(1)'; -const NAME_FIELD = 'name'; +const FORM_TITLE_TAB = '[data-test-id="tab-container"] > div' +const FORM_OPTION_LIST = '[class*=FormBuilder__Element] > button:nth-child(1)' +const NAME_FIELD = 'name' const COMPONENT_TYPE = '[role=listbox]' const FIELD_VALIDATE = '[class*=react-select__value-container]' export const FormsPage = { - getFormTitleTab(nth) { - return cy.get(FORM_TITLE_TAB).eq(nth); - }, - getFormTitleText(nth) { - this.getFormTitleTab(nth).invoke('text'); - }, - getFormOptionList() { - return cy.get(FORM_OPTION_LIST); - }, - clickFormOption(nth) { - this.getFormOptionList().eq(nth).click(); - }, + verifyPageLoaded() { + return cy.get(FORM_TITLE_TAB, { timeout: 10000 }).eq(0).should('be.visible') + }, + getFormTitleTab(nth) { + return cy.get(FORM_TITLE_TAB).eq(nth) + }, + getFormTitleText(nth) { + this.getFormTitleTab(nth).invoke('text') + }, + getFormOptionList() { + return cy.get(FORM_OPTION_LIST) + }, + clickFormOption(nth) { + this.getFormOptionList().eq(nth).click() + }, - - getFormBuilderElementName(nth) { - return cy.get(FORM_OPTION_LIST).eq(nth) - }, - getNameField() { - return cy.getByName(NAME_FIELD); - }, - getComponentType() { - return cy.get(COMPONENT_TYPE); - }, - getFieldValidate() { - return cy.get(FIELD_VALIDATE) - } + getFormBuilderElementName(nth) { + return cy.get(FORM_OPTION_LIST).eq(nth) + }, + getNameField() { + return cy.getByName(NAME_FIELD) + }, + getComponentType() { + return cy.get(COMPONENT_TYPE) + }, + getFieldValidate() { + return cy.get(FIELD_VALIDATE) + }, } + +export default FormsPage diff --git a/cypress/page-object/manuscripts-page.js b/cypress/page-object/manuscripts-page.js index 5532db8432..01696914b4 100644 --- a/cypress/page-object/manuscripts-page.js +++ b/cypress/page-object/manuscripts-page.js @@ -12,6 +12,7 @@ const CONTROL_BUTTON = '[href*=control]' const CREATED_CARET = 'Carets__Caret' const AUTHOR_FIELD = 'UserCombo__Primary' const STATUS_FIELD = 'Badge__Status' +const TABLE_HEADER = '[class*=Table__Header]' const MANUSCRIPTS_TABLE_HEAD = '[class*=Table__Header] > tr >th' const ARTICLE_TITLE = '[class*=Table__Row]>td:nth-child(1)' const ARTICLE_LABEL = 'style__StyledTableLabel' @@ -86,5 +87,8 @@ export const ManuscriptsPage = { getLabelRow(nth) { return cy.get(LABEL).eq(nth) }, + getTableHeader() { + return cy.get(TABLE_HEADER, { timeout: 10000 }) + }, } export default ManuscriptsPage diff --git a/cypress/page-object/new-submission-page.js b/cypress/page-object/new-submission-page.js index 754e8c96ce..14382a20df 100644 --- a/cypress/page-object/new-submission-page.js +++ b/cypress/page-object/new-submission-page.js @@ -1,26 +1,34 @@ /// <reference types="Cypress" /> +import { submit } from '../support/routes' + /** * Page object representing the available submission options: * submission through uploading a manuscript or through using an URL. */ -const UPLOAD_MANUSCRIPT_BUTTON = 'UploadManuscript__Info'; -const SUBMIT_URL_BUTTON = 'button'; -const SUBMISSION_MESSAGE = 'body'; +const UPLOAD_MANUSCRIPT_BUTTON = 'UploadManuscript__Info' +const SUBMIT_URL_BUTTON = 'button' +const SUBMISSION_MESSAGE = 'body' export const NewSubmissionPage = { - getUploadManuscriptButton() { - return cy.getByContainsClass(UPLOAD_MANUSCRIPT_BUTTON); - }, - clickUploadManuscript() { - this.getUploadManuscriptButton().click(); - }, - getSubmitURLButton() { - return cy.get(SUBMIT_URL_BUTTON); - }, - clickSubmitURL() { - this.getSubmitURLButton().click(); - }, - getSubmissionMessage() { - return cy.get(SUBMISSION_MESSAGE).invoke('text'); - } -} \ No newline at end of file + getUploadManuscriptButton() { + return cy.getByContainsClass(UPLOAD_MANUSCRIPT_BUTTON) + }, + clickUploadManuscript() { + this.getUploadManuscriptButton().click() + }, + getSubmitURLButton() { + return cy.get(SUBMIT_URL_BUTTON) + }, + clickSubmitURL() { + this.getSubmitURLButton().click() + }, + clickSubmitUrlAndVerifyLink() { + this.clickSubmitURL() + cy.url({ timeout: 15000 }).should('contain', submit) + }, + getSubmissionMessage() { + return cy.get(SUBMISSION_MESSAGE).invoke('text') + }, +} + +export default NewSubmissionPage diff --git a/cypress/page-object/page-component/menu.js b/cypress/page-object/page-component/menu.js index da43dc0137..b4ae870e4b 100644 --- a/cypress/page-object/page-component/menu.js +++ b/cypress/page-object/page-component/menu.js @@ -1,4 +1,6 @@ /// <reference types="Cypress" /> +import { ManuscriptsPage } from '../manuscripts-page' + /** * Page component which represents the left side menu bar, * which contains the Logged User, Dashboard & My profile options (for non-admin users), @@ -34,6 +36,10 @@ export const Menu = { clickManuscripts() { this.getManuscriptsButton().click() }, + clickManuscriptsAndAssertPageLoad() { + this.clickManuscripts() + ManuscriptsPage.getTableHeader().should('be.visible') + }, getMyProfileButton() { return cy.getByContainsClass(MENU_BUTTON).contains('My profile') }, diff --git a/cypress/page-object/submission-form-page.js b/cypress/page-object/submission-form-page.js index 29e97db337..005dd4d453 100644 --- a/cypress/page-object/submission-form-page.js +++ b/cypress/page-object/submission-form-page.js @@ -1,4 +1,6 @@ /// <reference types="Cypress" /> +import { ManuscriptsPage } from './manuscripts-page' + /** * Page object representing the form which has * to be completed to correctly submit a research paper. @@ -217,6 +219,10 @@ export const SubmissionFormPage = { clickSubmitManuscript() { this.getSubmitManuscriptButton().click() }, + clickSubmitManuscriptAndWaitPageLoad() { + this.clickSubmitManuscript() + ManuscriptsPage.getTableHeader().should('be.visible') + }, getValidationErrorMessage(error) { return cy.getByContainsClass(VALIDATION_ERROR_MESSAGE).contains(error) }, @@ -336,5 +342,9 @@ export const SubmissionFormPage = { clickTopicsCheckboxWithText(value) { this.getTopicsCheckboxWithText(value).click() }, + waitThreeSec() { + // eslint-disable-next-line cypress/no-unnecessary-waiting + cy.wait(3000) + }, } export default SubmissionFormPage diff --git a/cypress/support/routes.js b/cypress/support/routes.js index 6cdab8f2e7..3080992947 100644 --- a/cypress/support/routes.js +++ b/cypress/support/routes.js @@ -4,3 +4,5 @@ export const manuscripts = '/kotahi/admin/manuscripts' export const formBuilder = '/kotahi/admin/form-builder' export const users = '/kotahi/admin/users' export const profile = '/kotahi/profile' +export const submit = '/submit' +export const evaluate = '/evaluate' -- GitLab