From ee80f56c7970554680625c631789f037d00ca67d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 10 Dec 2018 17:33:00 +0100 Subject: [PATCH 1/9] Run lint from the docker container We want to run everything, including eslint, from the docker container. As a next step we would run software tests from the docker container. Installing the correct version of docker-compose is required, the default version docker-compose on Travis is older than 3.7. --- .travis.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index bbd211c18..ebe56cfed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,18 +1,28 @@ language: node_js node_js: - "10" -services: - - docker 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 build --build-arg BUILD_COMMIT=$TRAVIS_COMMIT -t humanconnection/nitro-web . + - docker-compose up -d script: - - docker run humanconnection/nitro-web yarn run lint + - docker-compose exec webapp yarn run lint after_success: # - wget https://raw.githubusercontent.com/DiscordHooks/travis-ci-discord-webhook/master/send.sh From 7a517131e3459187d2e1f421b6b5c018901f103d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 10 Dec 2018 17:35:04 +0100 Subject: [PATCH 2/9] Re-add success notifications Those success notifications were just fine. --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index ebe56cfed..76b4b532f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -25,9 +25,9 @@ script: - docker-compose exec webapp yarn run lint after_success: - # - wget https://raw.githubusercontent.com/DiscordHooks/travis-ci-discord-webhook/master/send.sh - # - chmod +x send.sh - # - ./send.sh success $WEBHOOK_URL + - wget https://raw.githubusercontent.com/DiscordHooks/travis-ci-discord-webhook/master/send.sh + - chmod +x send.sh + - ./send.sh success $WEBHOOK_URL - if [ $TRAVIS_BRANCH == "master" ] && [ $TRAVIS_EVENT_TYPE == "push" ]; then docker login -u "$DOCKER_USERNAME" -p "$DOCKER_PASSWORD"; docker tag humanconnection/nitro-web humanconnection/nitro-web:latest; From 31b017f7f6234ed9c5abf5e3ad5a1b1bf909069e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 10 Dec 2018 17:35:41 +0100 Subject: [PATCH 3/9] Trigger fullstack tests from this repository --- .travis.yml | 1 + scripts/run_fullstack_tests.sh | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100755 scripts/run_fullstack_tests.sh diff --git a/.travis.yml b/.travis.yml index 76b4b532f..333fae013 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,6 +12,7 @@ env: - DOCKER_COMPOSE_VERSION=1.23.2 before_install: + - scripts/run_fullstack_tests.sh # trigger full stack testing in a different repository - 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/run_fullstack_tests.sh b/scripts/run_fullstack_tests.sh new file mode 100755 index 000000000..c99bd84a2 --- /dev/null +++ b/scripts/run_fullstack_tests.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +if [[ -v TRAVIS_TOKEN ]]; then + # You need a Travis token to trigger the build on our meta repository. + # This token will not be available on forks of this repo. + curl -L https://raw.githubusercontent.com/Human-Connection/Human-Connection/master/scripts/trigger_build.sh > trigger_build.sh + chmod +x trigger_build.sh + ./trigger_build.sh +fi From 8b324fc8dd0860c864838546b53cdd92a684b441 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 10 Dec 2018 17:39:47 +0100 Subject: [PATCH 4/9] Download trigger_build in folder scripts/ This way, it does not get added to our docker images which we upload to docker hub. --- .dockerignore | 1 + scripts/run_fullstack_tests.sh | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.dockerignore b/.dockerignore index f363d4044..fa06a985d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -6,5 +6,6 @@ npm-debug.log Dockerfile docker-compose*.yml +scripts/ .env diff --git a/scripts/run_fullstack_tests.sh b/scripts/run_fullstack_tests.sh index c99bd84a2..5176c493c 100755 --- a/scripts/run_fullstack_tests.sh +++ b/scripts/run_fullstack_tests.sh @@ -3,7 +3,7 @@ if [[ -v TRAVIS_TOKEN ]]; then # You need a Travis token to trigger the build on our meta repository. # This token will not be available on forks of this repo. - curl -L https://raw.githubusercontent.com/Human-Connection/Human-Connection/master/scripts/trigger_build.sh > trigger_build.sh - chmod +x trigger_build.sh - ./trigger_build.sh + curl -L https://raw.githubusercontent.com/Human-Connection/Human-Connection/master/scripts/trigger_build.sh > scripts/trigger_build.sh + chmod +x scripts/trigger_build.sh + ./scripts/trigger_build.sh fi From 33e61532730ce001ca81d9239d76ea0cfa07b716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Tue, 11 Dec 2018 14:50:19 +0100 Subject: [PATCH 5/9] Remove full_stack_test build It's better to have cypress in this repository as @appinteractive said. There is no additional value in having it in a separate repo. --- .travis.yml | 1 - scripts/run_fullstack_tests.sh | 9 --------- 2 files changed, 10 deletions(-) delete mode 100755 scripts/run_fullstack_tests.sh diff --git a/.travis.yml b/.travis.yml index 333fae013..76b4b532f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,6 @@ env: - DOCKER_COMPOSE_VERSION=1.23.2 before_install: - - scripts/run_fullstack_tests.sh # trigger full stack testing in a different repository - 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/run_fullstack_tests.sh b/scripts/run_fullstack_tests.sh deleted file mode 100755 index 5176c493c..000000000 --- a/scripts/run_fullstack_tests.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -if [[ -v TRAVIS_TOKEN ]]; then - # You need a Travis token to trigger the build on our meta repository. - # This token will not be available on forks of this repo. - curl -L https://raw.githubusercontent.com/Human-Connection/Human-Connection/master/scripts/trigger_build.sh > scripts/trigger_build.sh - chmod +x scripts/trigger_build.sh - ./scripts/trigger_build.sh -fi From 0922e0cfda8637a156fd573cf110b3cefd2fbd8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Tue, 11 Dec 2018 18:26:35 +0100 Subject: [PATCH 6/9] Clone+install backend at $TRAVIS_BRANCH in build --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 76b4b532f..30629f6d7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,10 @@ before_install: install: - docker build --build-arg BUILD_COMMIT=$TRAVIS_COMMIT -t humanconnection/nitro-web . - - docker-compose up -d + - docker-compose -f docker-compose.yml up -d + - git clone --depth=50 https://github.com/Human-Connection/Nitro-Backend.git ../Nitro-Backend + - git --work-tree=../Nitro-Backend checkout $TRAVIS_BRANCH || echo "Branch \`$TRAVIS_BRANCH\` does not exist, falling back to \`master\`" + - docker-compose -f ../Nitro-Backend/docker-compose.yml up -d script: - docker-compose exec webapp yarn run lint From 437337b7aa6cb3e54d9273084678b3cbf26aac76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Tue, 11 Dec 2018 18:29:18 +0100 Subject: [PATCH 7/9] Copy cypress files back --- .dockerignore | 2 + .gitignore | 3 + cypress.json | 3 + 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 +++++++ 8 files changed, 148 insertions(+) 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/.dockerignore b/.dockerignore index fa06a985d..9f734654d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -9,3 +9,5 @@ docker-compose*.yml scripts/ .env + +cypress/ diff --git a/.gitignore b/.gitignore index af1dfbaa0..b743c6d12 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,6 @@ dist # TEMORIRY static/uploads + +cypress/videos +cypress/screenshots/ diff --git a/cypress.json b/cypress.json new file mode 100644 index 000000000..1f453389b --- /dev/null +++ b/cypress.json @@ -0,0 +1,3 @@ +{ + "projectId": "qa7fe2" +} 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 7d5c7f421aae2fddb93bd3027af6965db4f5ae30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Tue, 11 Dec 2018 18:31:24 +0100 Subject: [PATCH 8/9] Run cypress on Travis CI --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 30629f6d7..12b309bae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,9 +23,13 @@ install: - git clone --depth=50 https://github.com/Human-Connection/Nitro-Backend.git ../Nitro-Backend - git --work-tree=../Nitro-Backend checkout $TRAVIS_BRANCH || echo "Branch \`$TRAVIS_BRANCH\` does not exist, falling back to \`master\`" - docker-compose -f ../Nitro-Backend/docker-compose.yml up -d + - yarn global add cypress wait-on script: - docker-compose exec webapp yarn run lint + - docker-compose -f ../Nitro-Backend/docker-compose.yml exec backend yarn run db:seed > /dev/null + - wait-on http://localhost:3000 + - cypress run --record --key $CYPRESS_TOKEN after_success: - wget https://raw.githubusercontent.com/DiscordHooks/travis-ci-discord-webhook/master/send.sh From 6f9015bb8f3155373a48125cefc0baf6f7c4e9dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Wed, 12 Dec 2018 01:07:17 +0100 Subject: [PATCH 9/9] Follow CodeFactors suggestions --- cypress/plugins/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cypress/plugins/index.js b/cypress/plugins/index.js index fd170fba6..f7ef6e6ac 100644 --- a/cypress/plugins/index.js +++ b/cypress/plugins/index.js @@ -11,7 +11,7 @@ // 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) => { +module.exports = () => { // (on, config) => { // `on` is used to hook into various events Cypress emits // `config` is the resolved Cypress config }