diff --git a/cypress/integration/admin.spec.js b/cypress/integration/admin.spec.js --- a/cypress/integration/admin.spec.js +++ b/cypress/integration/admin.spec.js @@ -7,21 +7,10 @@ const $ = Cypress.$; -const username = 'admin'; -const password = 'admin'; const defaultRedirect = '/admin/origin/save/'; let url; -function login(username, password) { - cy.get('input[name="username"]') - .type(username) - .get('input[name="password"]') - .type(password) - .get('form') - .submit(); -} - function logout() { cy.contains('a', 'logout') .click(); @@ -33,8 +22,13 @@ }); it('should redirect to default page', function() { - cy.visit(url); - login(username, password); + cy.visit(url) + .get('input[name="username"]') + .type('admin') + .get('input[name="password"]') + .type('admin') + .get('form') + .submit(); cy.location('pathname') .should('be.equal', defaultRedirect); @@ -43,8 +37,8 @@ }); it('should display admin-origin-save and deposit in sidebar', function() { + cy.adminLogin(); cy.visit(url); - login(username, password); cy.get(`.sidebar a[href="${this.Urls.admin_origin_save()}"]`) .should('be.visible'); @@ -56,11 +50,11 @@ }); it('should display username on top-right', function() { + cy.adminLogin(); cy.visit(url); - login(username, password); cy.get('.swh-position-right') - .should('contain', username); + .should('contain', 'admin'); logout(); }); @@ -93,7 +87,8 @@ .location('search') .should('contain', `next=${this.Urls.admin_deposit()}`); - login(username, password); + cy.adminLogin(); + cy.visit(this.Urls.admin_deposit()); cy.location('pathname') .should('be.equal', this.Urls.admin_deposit()); @@ -122,10 +117,9 @@ describe('Test Admin Origin Save Urls Filtering', function() { beforeEach(function() { + cy.adminLogin(); cy.visit(this.Urls.admin_origin_save()); - login(username, password); - cy.contains('a', 'Origin urls filtering') .click() .wait(500); diff --git a/cypress/integration/deposit-admin.spec.js b/cypress/integration/deposit-admin.spec.js --- a/cypress/integration/deposit-admin.spec.js +++ b/cypress/integration/deposit-admin.spec.js @@ -5,18 +5,6 @@ * See top-level LICENSE file for more information */ -const username = 'admin'; -const password = 'admin'; - -function login(username, password) { - cy.get('input[name="username"]') - .type(username) - .get('input[name="password"]') - .type(password) - .get('form') - .submit(); -} - // data to use as request query response let responseDeposits; let expectedOrigins; @@ -62,10 +50,8 @@ }); it('Should filter out deposits matching excluding pattern from display', function() { + cy.adminLogin(); cy.visit(this.Urls.admin_deposit()); - // FIXME: cypress anti-pattern, do not use ui to log ¯\_(ツ)_/¯ - // https://docs.cypress.io/guides/getting-started/testing-your-app.html#Logging-in - login(username, password); cy.server(); @@ -209,10 +195,8 @@ }); it('Should display properly entries', function() { + cy.adminLogin(); cy.visit(this.Urls.admin_deposit()); - // FIXME: cypress anti-pattern, do not use ui to log ¯\_(ツ)_/¯ - // https://docs.cypress.io/guides/getting-started/testing-your-app.html#Logging-in - login(username, password); let testDeposits = responseDeposits; diff --git a/cypress/integration/vault.spec.js b/cypress/integration/vault.spec.js --- a/cypress/integration/vault.spec.js +++ b/cypress/integration/vault.spec.js @@ -13,16 +13,6 @@ 'done': 'rgb(92, 184, 92)' }; -function adminLogin() { - cy.visit('/admin/') - .get('input[name="username"]') - .type('admin') - .get('input[name="password"]') - .type('admin') - .get('form') - .submit(); -} - function checkVaultCookingTask(objectType) { cy.contains('button', 'Download') .click(); @@ -197,7 +187,7 @@ }); it('should create a revision cooking task and report its status', function() { - adminLogin(); + cy.adminLogin(); // Browse a revision cy.visit(this.revisionUrl); @@ -380,7 +370,7 @@ }); it('should offer to immediately download a revision gitfast archive if already cooked', function() { - adminLogin(); + cy.adminLogin(); // Browse a directory cy.visit(this.revisionUrl); diff --git a/cypress/support/index.js b/cypress/support/index.js --- a/cypress/support/index.js +++ b/cypress/support/index.js @@ -20,6 +20,32 @@ ).to.have.length(timesCalled); }); +Cypress.Commands.add('adminLogin', () => { + const url = '/admin/login/'; + return cy.request({ + url: url, + method: 'GET' + }).then(() => { + cy.getCookie('sessionid').should('not.exist'); + cy.getCookie('csrftoken').its('value').then((token) => { + cy.request({ + url: url, + method: 'POST', + form: true, + followRedirect: false, + body: { + username: 'admin', + password: 'admin', + csrfmiddlewaretoken: token + } + }).then(() => { + cy.getCookie('sessionid').should('exist'); + return cy.getCookie('csrftoken').its('value'); + }); + }); + }); +}); + before(function() { this.unarchivedRepo = { url: 'https://github.com/SoftwareHeritage/swh-web',