Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
fix: cypress login with new session feature
Use the new session feature to create and reuse sessions:
https://docs.cypress.io/api/commands/session

The first time `login` with a given name is called
the steps described in the login function are performed
and cookies and localstorage are cached.

The next time `login` is called with the same name
cookies and localStorage are restored and used again.

This allows us to keep fast test runs
while still separating the tests more cleanly.

The old logout command was broken because of the way
we used `Cypress.Cookies.defaults({ preserve })` before:

Cypress runs all the `cy.*` commands during initialization
and builds a list of commands that are then executed during the tests.
However `Cypress.Cookies.defaults` is evaluated when preparing the list
not while performing the actual steps.

Signed-off-by: Azul <[email protected]>
  • Loading branch information
azul authored and backportbot[bot] committed Jan 3, 2022
commit f7d57e9abb146301a91cea1ea48231c2b9c0f05b
3 changes: 2 additions & 1 deletion cypress.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@
"baseUrl": "https://localhost:8081/index.php/",
"projectId": "hx9gqy",
"viewportWidth": 1280,
"viewportHeight": 720
"viewportHeight": 720,
"experimentalSessionSupport": true
}
5 changes: 1 addition & 4 deletions cypress/integration/files.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,9 @@
*/

describe('Files default view', function() {
before(function() {
beforeEach(function() {
cy.login('admin', 'admin')
})
after(function() {
cy.logout()
})

it('See the default files list', function() {
cy.get('#fileList tr').should('contain', 'welcome.txt')
Expand Down
8 changes: 2 additions & 6 deletions cypress/integration/share.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -51,12 +51,8 @@ describe('Open test.md in viewer', function() {
cy.get('#fileList tr[data-file="test.md"]', {timeout: 10000})
.should('contain', 'test.md')
})
after(function () {
cy.on('uncaught:exception', (err, runnable) => {
return false
})
cy.visit('/apps/files')
cy.logout()
beforeEach(function() {
cy.login(randUser, 'password')
})

it('Shares the file as a public read only link', function () {
Expand Down
10 changes: 3 additions & 7 deletions cypress/integration/viewer.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,10 @@ describe('Open test.md in viewer', function() {

// Upload test files
cy.uploadFile('test.md', 'text/markdown')
cy.visit('/apps/files')

// wait a bit for things to be settled
cy.wait(1000)
})
after(function() {
cy.logout()

beforeEach(function() {
cy.login(randUser, 'password')
})

it('See test.md in the list', function() {
Expand All @@ -47,7 +44,6 @@ describe('Open test.md in viewer', function() {
})

it('Open the viewer on file click', function() {
cy.visit('/apps/files')
cy.openFile('test.md')
cy.get('#viewer').should('be.visible')
cy.get('#viewer .modal-title').should('contain', 'test.md')
Expand Down
26 changes: 9 additions & 17 deletions cypress/support/commands.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,27 +26,19 @@ const url = Cypress.config('baseUrl').replace(/\/index.php\/?$/g, '')
Cypress.env('baseUrl', url)

Cypress.Commands.add('login', (user, password, route = '/apps/files') => {
cy.clearCookies()
Cypress.Cookies.defaults({
preserve: /^(oc|nc)/
cy.session(user, function () {
cy.visit(route)
cy.get('input[name=user]').type(user)
cy.get('input[name=password]').type(password)
cy.get('#submit-wrapper input[type=submit]').click()
cy.url().should('include', route)
})
// in case the session already existed but we are on a different route...
cy.visit(route)
cy.get('input[name=user]').type(user)
cy.get('input[name=password]').type(password)
cy.get('#submit-wrapper input[type=submit]').click()
cy.url().should('include', route)
})

Cypress.Commands.add('logout', () => {
Cypress.Cookies.defaults({
preserve: []
})

cy.clearLocalStorage()
cy.clearCookies()

Cypress.Cookies.defaults({
preserve: /^(oc|nc)/
Cypress.Commands.add('logout', (route = '/') => {
cy.session('_guest', function () {
})
})

Expand Down