From 4043ab4e285f08e9d56ffd8f8a401b68816fc841 Mon Sep 17 00:00:00 2001 From: Lucas Di Pentima Date: Tue, 20 Apr 2021 15:26:51 -0300 Subject: [PATCH] 17500: Cleans up previously created objects before running each test. This is intended to avoid making wb2 tests increasingly slow by objects accumulation after every test. Also may avoid hard to debug issues making tests see UI elements they shouldn't be there. Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima --- cypress/support/commands.js | 38 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/cypress/support/commands.js b/cypress/support/commands.js index 929ffb83..36358991 100644 --- a/cypress/support/commands.js +++ b/cypress/support/commands.js @@ -30,28 +30,35 @@ const controllerURL = Cypress.env('controller_url'); const systemToken = Cypress.env('system_token'); +let createdResources = []; + +// Clean up on a 'before' hook to allow post-mortem analysis on individual tests. +beforeEach(function () { + if (createdResources.length === 0) { + return; + } + cy.log(`Cleaning ${createdResources.length} previously created resource(s)`); + createdResources.forEach(function({suffix, uuid}) { + // Don't fail when a resource isn't already there, some objects may have + // been removed, directly or indirectly, from the test that created them. + cy.deleteResource(systemToken, suffix, uuid, false); + }); + createdResources = []; +}); Cypress.Commands.add( "doRequest", (method = 'GET', path = '', data = null, qs = null, - token = systemToken, auth = false, followRedirect = true) => { + token = systemToken, auth = false, followRedirect = true, failOnStatusCode = true) => { return cy.request({ method: method, url: `${controllerURL.replace(/\/+$/, '')}/${path.replace(/^\/+/, '')}`, body: data, qs: auth ? qs : Object.assign({ api_token: token }, qs), auth: auth ? { bearer: `${token}` } : undefined, - followRedirect: followRedirect - }) -} -) - -// This resets the DB removing all content and seeding it with the fixtures. -// TODO: Maybe we can add an optional param to avoid the loading part? -Cypress.Commands.add( - "resetDB", () => { - cy.request('POST', `${controllerURL}/database/reset?api_token=${systemToken}`); - } -) + followRedirect: followRedirect, + failOnStatusCode: failOnStatusCode + }); +}); Cypress.Commands.add( "getUser", (username, first_name = '', last_name = '', is_admin = false, is_active = true) => { @@ -148,14 +155,15 @@ Cypress.Commands.add( return cy.doRequest('POST', '/arvados/v1/' + suffix, data, null, token, true) .its('body').as('resource') .then(function () { + createdResources.push({suffix, uuid: this.resource.uuid}); return this.resource; }) } ) Cypress.Commands.add( - "deleteResource", (token, suffix, uuid) => { - return cy.doRequest('DELETE', '/arvados/v1/' + suffix + '/' + uuid) + "deleteResource", (token, suffix, uuid, failOnStatusCode = true) => { + return cy.doRequest('DELETE', '/arvados/v1/' + suffix + '/' + uuid, null, null, token, false, true, failOnStatusCode) .its('body').as('resource') .then(function () { return this.resource; -- 2.30.2