From d91dfca05e2f1144edf1a63342d31aaea5c73d9b Mon Sep 17 00:00:00 2001 From: Joe D'Amore Date: Thu, 29 Jun 2023 17:43:05 -0400 Subject: [PATCH 1/3] Wait for landing page to update before deleting next Linode --- .../cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts b/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts index a75361836b0..2ac3ebfb6ab 100644 --- a/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts @@ -56,7 +56,9 @@ const deleteLinodeFromActionMenu = (linodeLabel) => { .should('be.enabled') .click(); }); + cy.wait('@deleteLinode').its('response.statusCode').should('eq', 200); + cy.findByText(linodeLabel).should('not.exist'); }; const preferenceOverrides = { From c9765c13cd306be8bda0373be360c6ab7b99e058 Mon Sep 17 00:00:00 2001 From: Joe D'Amore Date: Thu, 29 Jun 2023 17:44:40 -0400 Subject: [PATCH 2/3] Use Linode API SDK to create Linodes for test --- .../smoke-linode-landing-table.spec.ts | 51 ++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts b/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts index 2ac3ebfb6ab..2741b55479d 100644 --- a/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts @@ -1,19 +1,24 @@ /* eslint-disable sonarjs/no-duplicate-string */ +import { createLinode } from '@linode/api-v4'; import { Linode } from '@linode/api-v4/types'; -import { createLinode } from 'support/api/linodes'; +import { accountSettingsFactory } from '@src/factories/accountSettings'; +import { + createLinodeRequestFactory, + linodeFactory, +} from '@src/factories/linodes'; +import { makeResourcePage } from '@src/mocks/serverHandlers'; import { containsVisible, fbtVisible, getClick, getVisible, } from 'support/helpers'; -import { linodeFactory } from '@src/factories/linodes'; -import { makeResourcePage } from '@src/mocks/serverHandlers'; -import { accountSettingsFactory } from '@src/factories/accountSettings'; -import { routes } from 'support/ui/constants'; import { ui } from 'support/ui'; +import { routes } from 'support/ui/constants'; import { apiMatcher } from 'support/util/intercepts'; +import { randomLabel } from 'support/util/random'; import { chooseRegion, getRegionById } from 'support/util/regions'; +import { authenticate } from 'support/api/authentication'; const mockLinodes = new Array(5).fill(null).map( (_item: null, index: number): Linode => { @@ -72,6 +77,7 @@ const preferenceOverrides = { }, }; +authenticate(); describe('linode landing checks', () => { beforeEach(() => { const mockAccountSettings = accountSettingsFactory.build({ @@ -289,28 +295,37 @@ describe('linode landing checks', () => { }); describe('linode landing actions', () => { - it('deleting multiple linodes with action menu', () => { + it.only('deleting multiple linodes with action menu', () => { const mockAccountSettings = accountSettingsFactory.build({ managed: false, }); + const createTwoLinodes = async (): Promise<[Linode, Linode]> => { + return Promise.all([ + createLinode( + createLinodeRequestFactory.build({ label: randomLabel() }) + ), + createLinode( + createLinodeRequestFactory.build({ label: randomLabel() }) + ), + ]); + }; + cy.intercept('GET', apiMatcher('account/settings'), (req) => { req.reply(mockAccountSettings); }).as('getAccountSettings'); cy.intercept('DELETE', apiMatcher('linode/instances/*')).as('deleteLinode'); - createLinode().then((linodeA) => { - createLinode().then((linodeB) => { - cy.visitWithLogin('/linodes', { preferenceOverrides }); - cy.wait('@getAccountSettings'); - getVisible('[data-qa-header="Linodes"]'); - if (!cy.get('[data-qa-sort-label="asc"]')) { - getClick('[aria-label="Sort by label"]'); - } - deleteLinodeFromActionMenu(linodeA.label); - deleteLinodeFromActionMenu(linodeB.label); - cy.findByText('Oh Snap!', { timeout: 1000 }).should('not.exist'); - }); + cy.defer(createTwoLinodes()).then(([linodeA, linodeB]) => { + cy.visitWithLogin('/linodes', { preferenceOverrides }); + cy.wait('@getAccountSettings'); + getVisible('[data-qa-header="Linodes"]'); + if (!cy.get('[data-qa-sort-label="asc"]')) { + getClick('[aria-label="Sort by label"]'); + } + deleteLinodeFromActionMenu(linodeA.label); + deleteLinodeFromActionMenu(linodeB.label); + cy.findByText('Oh Snap!', { timeout: 1000 }).should('not.exist'); }); }); }); From e581537aa6ce9de0827f920ad2c096c4e6ff9de5 Mon Sep 17 00:00:00 2001 From: Joe D'Amore Date: Thu, 29 Jun 2023 17:49:19 -0400 Subject: [PATCH 3/3] Remove '.only' --- .../cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts b/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts index 2741b55479d..074a93d0bfe 100644 --- a/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts +++ b/packages/manager/cypress/e2e/core/linodes/smoke-linode-landing-table.spec.ts @@ -295,7 +295,7 @@ describe('linode landing checks', () => { }); describe('linode landing actions', () => { - it.only('deleting multiple linodes with action menu', () => { + it('deleting multiple linodes with action menu', () => { const mockAccountSettings = accountSettingsFactory.build({ managed: false, });