focalboard/webapp/cypress/support/commands.ts
kamre a498149a76
[GH-42] Cypress tests for login actions (#1679)
* Testing API added to server:
 - registered only if `enableTestingAPI` is set to `true` in the config file
 - has only one route `test/reset`
 - reset clears the tables in db for blocks, users, sessions
 - functions `DeleteAllBlocks` and `DeleteAllUsers` added to `Store` interface
 - new functions implemented for `SQLStore`

* Cypress tests (initial version) for login actions added:

  - redirect to login page,
  - register user,
  - test for loading home page deleted,
  - allow js in `tsconfig.json` for cypress tests.

* Cypress tests for login actions:

  - check that main page with workspace is visible after registration,
  - initial version of test for login of register user.

* Cypress tests for login actions:

  - function for checking that workspace is available added,
  - functions for login and logout added,
  - test for password change added,
  - session parameters added to server config for cypress testing.

* Switch Cypress tests to typescript.

* Use ids for inputs instead of placeholder text.

* Use cypress request for login without loading login page.

* Cypress custom command for login added.

* Cypress tests fixed:
 - new cypress commands for server reset, register/login user
 - single test for "create and delete board/card"
 - fixes for `BoardPage` component useEffect callbacks
 - npm script `runserver-test` doesn't use single user mode

* Deletion of all blocks changed:
 - also deletes blocks from history
 - public function renamed to DeleteAllBlocksPermanently
 - code for mocks and public methods generated

* Server tests for files fixed on windows.

* Cypress tests for the registration of second user via invite link added.

* Added `baseUrl` in main `tsconfig.json` (required by cypress configuration).

* Cypress test fixed. Comments as well as log messages added.

* Log a message if testing API is enabled.

* Single cypress test for register/login actions.

* Revert changes to server.

* More convenient cypress commands:
  - all API calls made as separate commands
  - declarations for commands moved to separate global.d.ts file
  - utility functions moved after test actions in 'Login actions' test
2021-11-22 16:59:01 +01:00

68 lines
1.9 KiB
TypeScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
Cypress.Commands.add('apiRegisterUser', (data: Cypress.UserData, token?: string, failOnError?: boolean) => {
return cy.request({
method: 'POST',
url: '/api/v1/register',
body: {
...data,
token,
},
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
failOnStatusCode: failOnError,
})
})
Cypress.Commands.add('apiLoginUser', (data: Cypress.LoginData) => {
return cy.request({
method: 'POST',
url: '/api/v1/login',
body: {
...data,
type: 'normal',
},
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
}).then((response) => {
expect(response.body).to.have.property('token')
localStorage.setItem('focalboardSessionId', response.body.token)
})
})
Cypress.Commands.add('apiInitServer', () => {
const data: Cypress.UserData = {
username: Cypress.env('username'),
password: Cypress.env('password'),
email: Cypress.env('email'),
}
return cy.apiRegisterUser(data, '', false).apiLoginUser(data)
})
const headers = () => ({
headers: {
'X-Requested-With': 'XMLHttpRequest',
Authorization: `Bearer ${localStorage.getItem('focalboardSessionId')}`,
},
})
Cypress.Commands.add('apiGetMe', () => {
return cy.request({
method: 'GET',
url: '/api/v1/users/me',
...headers(),
}).then((response) => response.body.id)
})
Cypress.Commands.add('apiChangePassword', (userId: string, oldPassword: string, newPassword: string) => {
const body = {oldPassword, newPassword}
return cy.request({
method: 'POST',
url: `/api/v1/users/${encodeURIComponent(userId)}/changepassword`,
...headers(),
body,
})
})