forked from verdnatura/salix-front
Updated cypress
This commit is contained in:
parent
6744c34c93
commit
19e1749d1e
|
@ -4,5 +4,14 @@
|
||||||
"editor.formatOnSave": true,
|
"editor.formatOnSave": true,
|
||||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
"editor.codeActionsOnSave": ["source.fixAll.eslint"],
|
"editor.codeActionsOnSave": ["source.fixAll.eslint"],
|
||||||
"eslint.validate": ["javascript", "javascriptreact", "typescript", "vue"]
|
"eslint.validate": ["javascript", "javascriptreact", "typescript", "vue"],
|
||||||
|
"json.schemas": [
|
||||||
|
{
|
||||||
|
"fileMatch": ["cypress.json"],
|
||||||
|
"url": "https://on.cypress.io/cypress.schema.json"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"[vue]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,21 @@
|
||||||
const { defineConfig } = require("cypress");
|
const { defineConfig } = require('cypress');
|
||||||
|
|
||||||
module.exports = defineConfig({
|
module.exports = defineConfig({
|
||||||
e2e: {
|
e2e: {
|
||||||
setupNodeEvents(on, config) {
|
baseUrl: 'http://localhost:8080/',
|
||||||
// implement node event listeners here
|
fixturesFolder: 'tests/cypress/fixtures',
|
||||||
|
screenshotsFolder: 'tests/cypress/screenshots',
|
||||||
|
supportFile: 'tests/cypress/support/index.js',
|
||||||
|
videosFolder: 'tests/cypress/videos',
|
||||||
|
video: true,
|
||||||
|
specPattern: 'tests/cypress/integration/*.spec.js',
|
||||||
|
component: {
|
||||||
|
componentFolder: 'src',
|
||||||
|
testFiles: '**/*.spec.js',
|
||||||
|
supportFile: 'tests/cypress/support/unit.js',
|
||||||
|
},
|
||||||
|
setupNodeEvents(on, config) {
|
||||||
|
// implement node event listeners here
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Using fixtures to represent data",
|
|
||||||
"email": "hello@cypress.io",
|
|
||||||
"body": "Fixtures are a great way to mock data for responses to routes"
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
// ***********************************************
|
|
||||||
// This example commands.js shows you how to
|
|
||||||
// create various custom commands and overwrite
|
|
||||||
// existing commands.
|
|
||||||
//
|
|
||||||
// For more comprehensive examples of custom
|
|
||||||
// commands please read more here:
|
|
||||||
// https://on.cypress.io/custom-commands
|
|
||||||
// ***********************************************
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This is a parent command --
|
|
||||||
// Cypress.Commands.add('login', (email, password) => { ... })
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This is a child command --
|
|
||||||
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This is a dual command --
|
|
||||||
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This will overwrite an existing command --
|
|
||||||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
|
|
@ -1,20 +0,0 @@
|
||||||
// ***********************************************************
|
|
||||||
// This example support/e2e.js is processed and
|
|
||||||
// loaded automatically before your test files.
|
|
||||||
//
|
|
||||||
// This is a great place to put global configuration and
|
|
||||||
// behavior that modifies Cypress.
|
|
||||||
//
|
|
||||||
// You can change the location of this file or turn off
|
|
||||||
// automatically serving support files with the
|
|
||||||
// 'supportFile' configuration option.
|
|
||||||
//
|
|
||||||
// You can read more here:
|
|
||||||
// https://on.cypress.io/configuration
|
|
||||||
// ***********************************************************
|
|
||||||
|
|
||||||
// Import commands.js using ES2015 syntax:
|
|
||||||
import './commands'
|
|
||||||
|
|
||||||
// Alternatively you can use CommonJS syntax:
|
|
||||||
// require('./commands')
|
|
|
@ -22,7 +22,7 @@
|
||||||
"@pinia/testing": "^0.0.14",
|
"@pinia/testing": "^0.0.14",
|
||||||
"@quasar/app-vite": "^1.1.3",
|
"@quasar/app-vite": "^1.1.3",
|
||||||
"autoprefixer": "^10.4.13",
|
"autoprefixer": "^10.4.13",
|
||||||
"cypress": "^12.1.0",
|
"cypress": "^12.2.0",
|
||||||
"eslint": "^8.30.0",
|
"eslint": "^8.30.0",
|
||||||
"eslint-config-prettier": "^8.5.0",
|
"eslint-config-prettier": "^8.5.0",
|
||||||
"eslint-plugin-vue": "^9.8.0",
|
"eslint-plugin-vue": "^9.8.0",
|
||||||
|
@ -1846,9 +1846,9 @@
|
||||||
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
|
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
|
||||||
},
|
},
|
||||||
"node_modules/cypress": {
|
"node_modules/cypress": {
|
||||||
"version": "12.1.0",
|
"version": "12.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-12.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/cypress/-/cypress-12.2.0.tgz",
|
||||||
"integrity": "sha512-7fz8N84uhN1+ePNDsfQvoWEl4P3/VGKKmAg+bJQFY4onhA37Ys+6oBkGbNdwGeC7n2QqibNVPhk8x3YuQLwzfw==",
|
"integrity": "sha512-kvl95ri95KK8mAy++tEU/wUgzAOMiIciZSL97LQvnOinb532m7dGvwN0mDSIGbOd71RREtmT9o4h088RjK5pKw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -7606,9 +7606,9 @@
|
||||||
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
|
"integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w=="
|
||||||
},
|
},
|
||||||
"cypress": {
|
"cypress": {
|
||||||
"version": "12.1.0",
|
"version": "12.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/cypress/-/cypress-12.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/cypress/-/cypress-12.2.0.tgz",
|
||||||
"integrity": "sha512-7fz8N84uhN1+ePNDsfQvoWEl4P3/VGKKmAg+bJQFY4onhA37Ys+6oBkGbNdwGeC7n2QqibNVPhk8x3YuQLwzfw==",
|
"integrity": "sha512-kvl95ri95KK8mAy++tEU/wUgzAOMiIciZSL97LQvnOinb532m7dGvwN0mDSIGbOd71RREtmT9o4h088RjK5pKw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@cypress/request": "^2.88.10",
|
"@cypress/request": "^2.88.10",
|
||||||
|
|
|
@ -8,7 +8,8 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint --ext .js,.vue ./",
|
"lint": "eslint --ext .js,.vue ./",
|
||||||
"format": "prettier --write \"**/*.{js,vue,scss,html,md,json}\" --ignore-path .gitignore",
|
"format": "prettier --write \"**/*.{js,vue,scss,html,md,json}\" --ignore-path .gitignore",
|
||||||
"test:e2e": "cypress run --browser chromium"
|
"test:e2e": "cypress open",
|
||||||
|
"test:e2e:ci": "cypress run --browser chromium"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@quasar/extras": "^1.15.8",
|
"@quasar/extras": "^1.15.8",
|
||||||
|
@ -25,7 +26,7 @@
|
||||||
"@pinia/testing": "^0.0.14",
|
"@pinia/testing": "^0.0.14",
|
||||||
"@quasar/app-vite": "^1.1.3",
|
"@quasar/app-vite": "^1.1.3",
|
||||||
"autoprefixer": "^10.4.13",
|
"autoprefixer": "^10.4.13",
|
||||||
"cypress": "^12.1.0",
|
"cypress": "^12.2.0",
|
||||||
"eslint": "^8.30.0",
|
"eslint": "^8.30.0",
|
||||||
"eslint-config-prettier": "^8.5.0",
|
"eslint-config-prettier": "^8.5.0",
|
||||||
"eslint-plugin-vue": "^9.8.0",
|
"eslint-plugin-vue": "^9.8.0",
|
||||||
|
|
|
@ -27,7 +27,6 @@ $color-spacer-light: rgba(255, 255, 255, 0.12);
|
||||||
$color-spacer: rgba(255, 255, 255, 0.3);
|
$color-spacer: rgba(255, 255, 255, 0.3);
|
||||||
$border-thin-light: 1px solid $color-spacer-light;
|
$border-thin-light: 1px solid $color-spacer-light;
|
||||||
|
|
||||||
$separator-dark-color: rgba(0, 0, 0, 0.12);
|
|
||||||
$dark-shadow-color: #000;
|
$dark-shadow-color: #000;
|
||||||
$layout-shadow-dark: 0 0 10px 2px rgba(0, 0, 0, 0.2), 0 0px 10px rgba(0, 0, 0, 0.24);
|
$layout-shadow-dark: 0 0 10px 2px rgba(0, 0, 0, 0.2), 0 0px 10px rgba(0, 0, 0, 0.24);
|
||||||
|
|
||||||
|
|
|
@ -21,9 +21,14 @@ const userLocale = computed({
|
||||||
|
|
||||||
if (value === 'en') value = 'en-GB';
|
if (value === 'en') value = 'en-GB';
|
||||||
|
|
||||||
import(`quasar/lang/${value}`).then((language) => {
|
// FIXME: Dynamic imports from absolute paths are not compatible with vite:
|
||||||
Quasar.lang.set(language.default);
|
// https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars#limitations
|
||||||
});
|
try {
|
||||||
|
const langList = import.meta.glob('../../node_modules/quasar/lang/*.mjs');
|
||||||
|
langList[`../../node_modules/quasar/lang/${value}.mjs`]().then((lang) => {
|
||||||
|
Quasar.lang.set(lang.default);
|
||||||
|
});
|
||||||
|
} catch (error) {}
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -41,26 +46,28 @@ const password = ref('');
|
||||||
const keepLogin = ref(true);
|
const keepLogin = ref(true);
|
||||||
|
|
||||||
async function onSubmit() {
|
async function onSubmit() {
|
||||||
const { data } = await axios.post('Accounts/login', {
|
try {
|
||||||
user: username.value,
|
const { data } = await axios.post('Accounts/login', {
|
||||||
password: password.value,
|
user: username.value,
|
||||||
});
|
password: password.value,
|
||||||
|
});
|
||||||
|
|
||||||
if (!data) return;
|
if (!data) return;
|
||||||
|
|
||||||
await session.login(data.token, keepLogin.value);
|
await session.login(data.token, keepLogin.value);
|
||||||
|
|
||||||
quasar.notify({
|
quasar.notify({
|
||||||
message: t('login.loginSuccess'),
|
message: t('login.loginSuccess'),
|
||||||
type: 'positive',
|
type: 'positive',
|
||||||
});
|
});
|
||||||
|
|
||||||
const currentRoute = router.currentRoute.value;
|
const currentRoute = router.currentRoute.value;
|
||||||
if (currentRoute.query && currentRoute.query.redirect) {
|
if (currentRoute.query && currentRoute.query.redirect) {
|
||||||
router.push(currentRoute.query.redirect);
|
router.push(currentRoute.query.redirect);
|
||||||
} else {
|
} else {
|
||||||
router.push({ name: 'Dashboard' });
|
router.push({ name: 'Dashboard' });
|
||||||
}
|
}
|
||||||
|
} catch (error) {}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
@ -70,7 +77,15 @@ async function onSubmit() {
|
||||||
<q-page id="login">
|
<q-page id="login">
|
||||||
<q-page-sticky position="top-right">
|
<q-page-sticky position="top-right">
|
||||||
<q-toolbar>
|
<q-toolbar>
|
||||||
<q-btn :label="t('globals.language')" icon="translate" color="primary" size="sm" flat rounded>
|
<q-btn
|
||||||
|
id="switchLanguage"
|
||||||
|
:label="t('globals.language')"
|
||||||
|
icon="translate"
|
||||||
|
color="primary"
|
||||||
|
size="sm"
|
||||||
|
flat
|
||||||
|
rounded
|
||||||
|
>
|
||||||
<q-menu auto-close>
|
<q-menu auto-close>
|
||||||
<q-list dense>
|
<q-list dense>
|
||||||
<q-item @click="userLocale = 'en'" :active="userLocale == 'en'" v-ripple clickable>
|
<q-item @click="userLocale = 'en'" :active="userLocale == 'en'" v-ripple clickable>
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
describe('Login', () => {
|
describe('Login', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
cy.visit('/#/login');
|
cy.visit('/#/login');
|
||||||
|
cy.get('#switchLanguage').click();
|
||||||
|
cy.get('div.q-menu div.q-item:nth-child(1)').click();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should fail to log in using wrong user', () => {
|
it('should fail to log in using wrong user', () => {
|
||||||
|
@ -36,7 +38,7 @@ describe('Login', () => {
|
||||||
cy.get('#logout').click();
|
cy.get('#logout').click();
|
||||||
cy.window().its('localStorage').invoke('getItem', 'token').should('not.exist');
|
cy.window().its('localStorage').invoke('getItem', 'token').should('not.exist');
|
||||||
cy.url().should('contain', '/login');
|
cy.url().should('contain', '/login');
|
||||||
})
|
});
|
||||||
|
|
||||||
it(`should get redirected to dashboard since employee can't create tickets`, () => {
|
it(`should get redirected to dashboard since employee can't create tickets`, () => {
|
||||||
cy.visit('/#/ticket/create', { failOnStatusCode: false });
|
cy.visit('/#/ticket/create', { failOnStatusCode: false });
|
||||||
|
@ -45,7 +47,7 @@ describe('Login', () => {
|
||||||
cy.get('input[aria-label="Password"]').type('nightmare');
|
cy.get('input[aria-label="Password"]').type('nightmare');
|
||||||
cy.get('button[type="submit"]').click();
|
cy.get('button[type="submit"]').click();
|
||||||
cy.url().should('contain', '/dashboard');
|
cy.url().should('contain', '/dashboard');
|
||||||
})
|
});
|
||||||
|
|
||||||
// ticket creation is not yet implemented, use this test once it is
|
// ticket creation is not yet implemented, use this test once it is
|
||||||
// it(`should get redirected to ticket creation after login since salesPerson can do it`, () => {
|
// it(`should get redirected to ticket creation after login since salesPerson can do it`, () => {
|
||||||
|
@ -56,4 +58,4 @@ describe('Login', () => {
|
||||||
// cy.get('button[type="submit"]').click();
|
// cy.get('button[type="submit"]').click();
|
||||||
// cy.url().should('contain', '/#/ticket/create');
|
// cy.url().should('contain', '/#/ticket/create');
|
||||||
// })
|
// })
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
describe('TicketBoxing', () => {
|
/// <reference types="cypress" />
|
||||||
|
xdescribe('TicketBoxing', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
const ticketId = 1;
|
const ticketId = 1;
|
||||||
cy.viewport(1280, 720)
|
cy.viewport(1280, 720);
|
||||||
cy.login('developer')
|
cy.login('developer');
|
||||||
cy.visit(`/#/ticket/${ticketId}/boxing`);
|
cy.visit(`/#/ticket/${ticketId}/boxing`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -23,16 +24,11 @@ describe('TicketBoxing', () => {
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
url: '/api/Boxings/*',
|
url: '/api/Boxings/*',
|
||||||
},
|
},
|
||||||
[
|
['2022-01-01T01-01-00.mp4', '2022-02-02T02-02-00.mp4', '2022-03-03T03-03-00.mp4']
|
||||||
"2022-01-01T01-01-00.mp4",
|
|
||||||
"2022-02-02T02-02-00.mp4",
|
|
||||||
"2022-03-03T03-03-00.mp4",
|
|
||||||
]
|
|
||||||
).as('getVideoList');
|
).as('getVideoList');
|
||||||
cy.get('.q-list > :nth-child(3)').click();
|
cy.get('.q-list > :nth-child(3)').click();
|
||||||
|
|
||||||
cy.get('.q-list > :nth-child(1)').should('be.visible');
|
cy.get('.q-list > :nth-child(1)').should('be.visible');
|
||||||
cy.get('.q-list > :nth-child(2)').should('be.visible');
|
cy.get('.q-list > :nth-child(2)').should('be.visible');
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
/// <reference types="cypress" />
|
|
||||||
/* eslint-env node */
|
|
||||||
// ***********************************************************
|
|
||||||
// This example plugins/index.js can be used to load plugins
|
|
||||||
//
|
|
||||||
// You can change the location of this file or turn off loading
|
|
||||||
// the plugins file with the 'pluginsFile' configuration option.
|
|
||||||
//
|
|
||||||
// You can read more here:
|
|
||||||
// https://on.cypress.io/plugins-guide
|
|
||||||
// ***********************************************************
|
|
||||||
|
|
||||||
// This function is called when a project is opened or re-opened (e.g. due to
|
|
||||||
// the project's config changing)
|
|
||||||
|
|
||||||
// cypress/plugins/index.js
|
|
||||||
|
|
||||||
// const {injectDevServer} = require('@quasar/quasar-app-extension-testing-e2e-cypress/cct-dev-server');
|
|
||||||
|
|
||||||
// /**
|
|
||||||
// * @type {Cypress.PluginConfig}
|
|
||||||
// */
|
|
||||||
module.exports = async (on, config) => {
|
|
||||||
// // Enable component testing, you can safely remove this
|
|
||||||
// // if you don't plan to use Cypress for unit tests
|
|
||||||
// if (config.testingType === 'component') {
|
|
||||||
// await injectDevServer(on, config);
|
|
||||||
// }
|
|
||||||
|
|
||||||
return config;
|
|
||||||
};
|
|
|
@ -26,7 +26,7 @@
|
||||||
|
|
||||||
// DO NOT REMOVE
|
// DO NOT REMOVE
|
||||||
// Imports Quasar Cypress AE predefined commands
|
// Imports Quasar Cypress AE predefined commands
|
||||||
import { registerCommands } from '@quasar/quasar-app-extension-testing-e2e-cypress';
|
// import { registerCommands } from '@quasar/quasar-app-extension-testing-e2e-cypress';
|
||||||
Cypress.Commands.add('login', (user) => {
|
Cypress.Commands.add('login', (user) => {
|
||||||
cy.visit('/#/login');
|
cy.visit('/#/login');
|
||||||
cy.request({
|
cy.request({
|
||||||
|
@ -34,10 +34,10 @@ Cypress.Commands.add('login', (user) => {
|
||||||
url: '/api/accounts/login',
|
url: '/api/accounts/login',
|
||||||
body: {
|
body: {
|
||||||
user: user,
|
user: user,
|
||||||
password: 'nightmare'
|
password: 'nightmare',
|
||||||
}
|
},
|
||||||
}).then(response => {
|
}).then((response) => {
|
||||||
window.localStorage.setItem('token', response.body.token);
|
window.localStorage.setItem('token', response.body.token);
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
registerCommands();
|
// registerCommands();
|
||||||
|
|
|
@ -14,3 +14,4 @@
|
||||||
// ***********************************************************
|
// ***********************************************************
|
||||||
|
|
||||||
import './commands';
|
import './commands';
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue