diff --git a/.gitignore b/.gitignore index 1d0565198..85e3cf3f7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,4 @@ /.github + +cypress/videos +cypress/screenshots/ diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 000000000..da18d9352 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} \ No newline at end of file diff --git a/cypress/integration/login/login.spec.js b/cypress/integration/login/login.spec.js new file mode 100644 index 000000000..33054bb7d --- /dev/null +++ b/cypress/integration/login/login.spec.js @@ -0,0 +1,73 @@ +/// + +const loginTestUser = function () { + // Visiting our app before each test removes any state build up from + cy.visit('http://localhost:3000/') + .get('.layout-blank') + .should('be.visible') + + cy.location('pathname') + .should('contain', '/login') + + cy.get('input[name=email]') + .as('inputEmail') + .should('be.empty') + .and('have.attr', 'placeholder', 'Deine E-Mail') + .trigger('focus') + .type('user@example.org') + + cy.get('input[name=password]') + .as('inputPassword') + .should('be.empty') + // .and('have.attr', 'placeholder', 'Dein Passwort') + .trigger('focus') + .type('1234') + + cy.get('button[name=submit]') + .as('submitButton') + .should('be.visible') + .and('not.be.disabled') + .click() + + cy.get('@submitButton') + .should('be.disabled') + // .next('.snackbar') + + cy.get('.layout-default') + + cy.location('pathname') + .should('eq', '/') +} + +const logout = function () { + cy.visit('http://localhost:3000/logout') + + cy.location('pathname') + .should('contain', '/login') + + cy.get('.layout-blank') + .should('be.visible') +} + +context('Authentication', () => { + it('Login Testuser', loginTestUser) + + it('Login & Logout', function () { + // login + loginTestUser() + + // logout + logout() + }) + + it('Still logged in after page-reload', function () { + // login + loginTestUser() + + cy.reload() + .get('.layout-default') + + // logout + // logout() + }) +}) diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js new file mode 100644 index 000000000..fd170fba6 --- /dev/null +++ b/cypress/plugins/index.js @@ -0,0 +1,17 @@ +// *********************************************************** +// 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) + +module.exports = (on, config) => { + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config +} diff --git a/cypress/support/commands.js b/cypress/support/commands.js new file mode 100644 index 000000000..c1f5a772e --- /dev/null +++ b/cypress/support/commands.js @@ -0,0 +1,25 @@ +// *********************************************** +// 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 is will overwrite an existing command -- +// Cypress.Commands.overwrite("visit", (originalFn, url, options) => { ... }) diff --git a/cypress/support/index.js b/cypress/support/index.js new file mode 100644 index 000000000..d68db96df --- /dev/null +++ b/cypress/support/index.js @@ -0,0 +1,20 @@ +// *********************************************************** +// This example support/index.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')