From 33290c32e0ad25d390fc1800850c274ceeea47fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Thu, 6 Dec 2018 14:54:39 +0100 Subject: [PATCH 1/6] Add Nitro-Web and Nitro-Backend as submodules --- .gitmodules | 6 ++++++ API | 2 +- Nitro-Backend | 1 + Nitro-Web | 1 + WebApp | 2 +- 5 files changed, 10 insertions(+), 2 deletions(-) create mode 160000 Nitro-Backend create mode 160000 Nitro-Web diff --git a/.gitmodules b/.gitmodules index 8161c1c4e..51e69c525 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,3 +4,9 @@ [submodule "API"] path = API url = https://github.com/Human-Connection/API.git +[submodule "Nitro-Web"] + path = Nitro-Web + url = git@github.com:Human-Connection/Nitro-Web.git +[submodule "Nitro-Backend"] + path = Nitro-Backend + url = git@github.com:Human-Connection/Nitro-Backend.git diff --git a/API b/API index 8ea42b5b4..02dcc2285 160000 --- a/API +++ b/API @@ -1 +1 @@ -Subproject commit 8ea42b5b40dd16958b0887eb7bb9a70ec76909e6 +Subproject commit 02dcc2285c71ce8010ec0952a303e9a9f5e05798 diff --git a/Nitro-Backend b/Nitro-Backend new file mode 160000 index 000000000..4a8d3a67a --- /dev/null +++ b/Nitro-Backend @@ -0,0 +1 @@ +Subproject commit 4a8d3a67ad2cd57a3e37027a65be38c9896689bf diff --git a/Nitro-Web b/Nitro-Web new file mode 160000 index 000000000..8f42a1872 --- /dev/null +++ b/Nitro-Web @@ -0,0 +1 @@ +Subproject commit 8f42a1872993f9bfc9c47610d251889fdeb6a65e diff --git a/WebApp b/WebApp index 6f88ca733..fa26d7c65 160000 --- a/WebApp +++ b/WebApp @@ -1 +1 @@ -Subproject commit 6f88ca733fb09a4506fe12bb89c4557ce501e98d +Subproject commit fa26d7c65406220dcd617275d89f4a804911874c From 579cc3492c40d8453865e3fda08971961b277580 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Thu, 6 Dec 2018 15:24:49 +0100 Subject: [PATCH 2/6] Coyp over files from webapp repository --- .gitignore | 3 + .gitmodules | 4 +- .travis.yml | 28 ++++++++++ Nitro-Backend | 2 +- Nitro-Web | 2 +- cypress.json | 1 + cypress/fixtures/example.json | 5 ++ cypress/integration/login/login.spec.js | 73 +++++++++++++++++++++++++ cypress/plugins/index.js | 17 ++++++ cypress/support/commands.js | 25 +++++++++ cypress/support/index.js | 20 +++++++ 11 files changed, 176 insertions(+), 4 deletions(-) create mode 100644 .travis.yml create mode 100644 cypress.json create mode 100644 cypress/fixtures/example.json create mode 100644 cypress/integration/login/login.spec.js create mode 100644 cypress/plugins/index.js create mode 100644 cypress/support/commands.js create mode 100644 cypress/support/index.js 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/.gitmodules b/.gitmodules index 51e69c525..b2bde5a9f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -6,7 +6,7 @@ url = https://github.com/Human-Connection/API.git [submodule "Nitro-Web"] path = Nitro-Web - url = git@github.com:Human-Connection/Nitro-Web.git + url = https://github.com/Human-Connection/Nitro-Web.git [submodule "Nitro-Backend"] path = Nitro-Backend - url = git@github.com:Human-Connection/Nitro-Backend.git + url = https://github.com/Human-Connection/Nitro-Backend.git diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..95cce90b5 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,28 @@ +language: node_js +node_js: + - "10" +cache: + yarn: true + directories: + - node_modules +services: + - docker + +env: + - DOCKER_COMPOSE_VERSION=1.23.2 + +before_install: + - sudo rm /usr/local/bin/docker-compose + - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose + - chmod +x docker-compose + - sudo mv docker-compose /usr/local/bin + +install: + - docker-compose -f Nitro-Backend/docker-compose.yml up -d + - docker-compose -f Nitro-Web/docker-compose.yml up -d + - yarn global add cypress wait-on + +script: + - docker-compose -f Nitro-Backend/docker-compose.yml exec backend yarn run db:seed > /dev/null + - wait-on http://localhost:3000 + - cypress run diff --git a/Nitro-Backend b/Nitro-Backend index 4a8d3a67a..99a9d5159 160000 --- a/Nitro-Backend +++ b/Nitro-Backend @@ -1 +1 @@ -Subproject commit 4a8d3a67ad2cd57a3e37027a65be38c9896689bf +Subproject commit 99a9d51596a8f3575d8637754af45a01992a37a0 diff --git a/Nitro-Web b/Nitro-Web index 8f42a1872..64abd767e 160000 --- a/Nitro-Web +++ b/Nitro-Web @@ -1 +1 @@ -Subproject commit 8f42a1872993f9bfc9c47610d251889fdeb6a65e +Subproject commit 64abd767e2bae0579ae776dba70d23db4b978c10 diff --git a/cypress.json b/cypress.json new file mode 100644 index 000000000..0967ef424 --- /dev/null +++ b/cypress.json @@ -0,0 +1 @@ +{} 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') From f43458ba3d42eceb6d9c2c7c0243a2c90849020d Mon Sep 17 00:00:00 2001 From: Grzegorz Leoniec Date: Sun, 9 Dec 2018 18:02:00 +0100 Subject: [PATCH 3/6] record test runs to https://dashboard.cypress.io/#/projects/qa7fe2/runs --- .travis.yml | 2 +- cypress.json | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 95cce90b5..25e9ad58c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,4 +25,4 @@ install: script: - docker-compose -f Nitro-Backend/docker-compose.yml exec backend yarn run db:seed > /dev/null - wait-on http://localhost:3000 - - cypress run + - cypress run --record --key $CYPRESS_TOKEN diff --git a/cypress.json b/cypress.json index 0967ef424..1f453389b 100644 --- a/cypress.json +++ b/cypress.json @@ -1 +1,3 @@ -{} +{ + "projectId": "qa7fe2" +} From 0a8aadbb2dae438de0c2692d11efeaa8019db1b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Sun, 9 Dec 2018 23:23:36 +0100 Subject: [PATCH 4/6] Check out a common branch through environment var This will be useful if we trigger the build through the Travis CI API where we can alter the environment variables in the request. --- .travis.yml | 5 ++++- scripts/trigger.sh | 28 ++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) create mode 100755 scripts/trigger.sh diff --git a/.travis.yml b/.travis.yml index 25e9ad58c..489d0cc75 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,7 +9,9 @@ services: - docker env: - - DOCKER_COMPOSE_VERSION=1.23.2 + global: + - DOCKER_COMPOSE_VERSION=1.23.2 + - COMMON_BRANCH=master before_install: - sudo rm /usr/local/bin/docker-compose @@ -18,6 +20,7 @@ before_install: - sudo mv docker-compose /usr/local/bin install: + - git submodule foreach "git checkout $COMMON_BRANCH || echo 'Branch \`$COMMON_BRANCH\` does not exist, falling back to master.'" - docker-compose -f Nitro-Backend/docker-compose.yml up -d - docker-compose -f Nitro-Web/docker-compose.yml up -d - yarn global add cypress wait-on diff --git a/scripts/trigger.sh b/scripts/trigger.sh new file mode 100755 index 000000000..ef430dc2c --- /dev/null +++ b/scripts/trigger.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +body=$(cat<< EOF +{ + "request": { + "branch":"e2e", + "message": "Triggered by \`$TRAVIS_REPO_SLUG\` on \`$TRAVIS_BRANCH\`", + "config": { + "merge_mode": "deep_merge", + "env": { + "global": { + "DOCKER_COMPOSE_VERSION":"1.23.2", + "COMMON_BRANCH": "$TRAVIS_BRANCH" + } + } + } + } +} +EOF +) + +curl -s -X POST \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + -H "Travis-API-Version: 3" \ + -H "Authorization: token $TRAVIS_TOKEN" \ + -d "$body" \ + https://api.travis-ci.com/repo/Human-Connection%2FHuman-Connection/requests From 4489bbe662c2caf3e5be06d425d3a147c05fd57b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 10 Dec 2018 00:27:55 +0100 Subject: [PATCH 5/6] Use `export` for Travis variable for convenience This way, we don't need to set the environment variable in the `trigger_build.sh` script. --- .travis.yml | 5 ++--- scripts/{trigger.sh => trigger_build.sh} | 5 +---- 2 files changed, 3 insertions(+), 7 deletions(-) rename scripts/{trigger.sh => trigger_build.sh} (81%) mode change 100755 => 100644 diff --git a/.travis.yml b/.travis.yml index 489d0cc75..de984cc66 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,11 +9,10 @@ services: - docker env: - global: - - DOCKER_COMPOSE_VERSION=1.23.2 - - COMMON_BRANCH=master + - COMMON_BRANCH=master before_install: + - export DOCKER_COMPOSE_VERSION=1.23.2 - sudo rm /usr/local/bin/docker-compose - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose - chmod +x docker-compose diff --git a/scripts/trigger.sh b/scripts/trigger_build.sh old mode 100755 new mode 100644 similarity index 81% rename from scripts/trigger.sh rename to scripts/trigger_build.sh index ef430dc2c..bac40e3a0 --- a/scripts/trigger.sh +++ b/scripts/trigger_build.sh @@ -8,10 +8,7 @@ body=$(cat<< EOF "config": { "merge_mode": "deep_merge", "env": { - "global": { - "DOCKER_COMPOSE_VERSION":"1.23.2", - "COMMON_BRANCH": "$TRAVIS_BRANCH" - } + "COMMON_BRANCH": "$TRAVIS_BRANCH" } } } From 6e9348a6d3580afff8051e4228fa9551606c058c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 10 Dec 2018 00:30:31 +0100 Subject: [PATCH 6/6] Set executable permission on `trigger_build.sh` --- scripts/trigger_build.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/trigger_build.sh diff --git a/scripts/trigger_build.sh b/scripts/trigger_build.sh old mode 100644 new mode 100755