From 5dc68f997395fc2e976cf16eab50f488c003e179 Mon Sep 17 00:00:00 2001 From: saw-jan Date: Mon, 10 Jan 2022 14:45:28 +0545 Subject: [PATCH 01/11] update docker --- .dockerignore | 2 ++ Dockerfile | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.dockerignore b/.dockerignore index 859204d..7386798 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,4 @@ node_modules .gitignore +README.md +build \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 47f563a..8f16134 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,7 @@ FROM node:14 +ENV REACT_APP_SERVER_URI=http://localhost:3001 + WORKDIR /app/waveentry COPY . . From f40d67935d6870217868abd3fb28b7ec59b2982e Mon Sep 17 00:00:00 2001 From: saw-jan Date: Mon, 10 Jan 2022 17:04:22 +0545 Subject: [PATCH 02/11] add drone config --- .drone.yml | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..23d4436 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,47 @@ +kind: pipeline +type: docker +name: webUITest + +platform: + os: linux + arch: amd64 + +steps: + - name: server + image: node:14 + environment: + DB_HOST: mongodb + DB_PORT: 27017 + DB_NAME: waveentry + SERVER_PORT: 3001 + JWT_SECRET: very-secret + commands: + - git clone --single-branch -b master --depth 1 https://github.com/saw-jan/wave-entry-server.git /tmp/server + - cd /tmp/server + - ls + - npm ci + - npm run db:seed + - npm start + + - name: web-client + image: node:14 + environment: + REACT_APP_SERVER_URI: http://server:3001 + commands: + - npm ci + - BROWSER=none npm start + + - name: acceptance-tests + image: node:14 + environment: + SERVER_URL: http://server:3001 + WEB_URL: http://web-client:3000 + commands: + - npm run test:e2e tests/acceptance/features + +services: + - name: mongodb + - image: mongo:focal + +trigger: + branch: master From 58ef075f04020164d04048a9590951b672985cd8 Mon Sep 17 00:00:00 2001 From: saw-jan Date: Mon, 10 Jan 2022 17:12:47 +0545 Subject: [PATCH 03/11] DRY base url --- .drone.yml | 4 +++- tests/acceptance/pageObjects/loginPage.js | 5 ++++- tests/acceptance/stepDefinitions/loginCheck.js | 3 ++- tests/acceptance/testHelper/pageHelper.js | 3 +++ 4 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 tests/acceptance/testHelper/pageHelper.js diff --git a/.drone.yml b/.drone.yml index 23d4436..3fb708d 100644 --- a/.drone.yml +++ b/.drone.yml @@ -9,6 +9,7 @@ platform: steps: - name: server image: node:14 + detach: true environment: DB_HOST: mongodb DB_PORT: 27017 @@ -25,6 +26,7 @@ steps: - name: web-client image: node:14 + detach: true environment: REACT_APP_SERVER_URI: http://server:3001 commands: @@ -41,7 +43,7 @@ steps: services: - name: mongodb - - image: mongo:focal + image: mongo:focal trigger: branch: master diff --git a/tests/acceptance/pageObjects/loginPage.js b/tests/acceptance/pageObjects/loginPage.js index 6fdabe0..0c0c753 100644 --- a/tests/acceptance/pageObjects/loginPage.js +++ b/tests/acceptance/pageObjects/loginPage.js @@ -1,3 +1,5 @@ +const { baseUrl } = require("../testHelper/pageHelper"); + class LoginPage { constructor() { this.loginlogo = ".loginlogo"; @@ -5,10 +7,11 @@ class LoginPage { this.password = ".password"; this.submitbutton = ".submitbutton"; this.serverMessage = ".modaldiv > p"; + this.url = "/"; } async browseToLoginPage() { - await page.goto("http://localhost:3000/"); + await page.goto(`${baseUrl}/`); const locator = page.locator(this.loginlogo); await expect(locator).toBeVisible(); } diff --git a/tests/acceptance/stepDefinitions/loginCheck.js b/tests/acceptance/stepDefinitions/loginCheck.js index 5ba1c78..8052f0b 100644 --- a/tests/acceptance/stepDefinitions/loginCheck.js +++ b/tests/acceptance/stepDefinitions/loginCheck.js @@ -1,7 +1,8 @@ const { Given, When, Then } = require("@cucumber/cucumber"); +const { baseUrl } = require("../testHelper/pageHelper"); Given("the user has browsed to the loginpage", async function () { - await page.goto("http://localhost:3000/"); + await page.goto(`${baseUrl}/`); const locator = page.locator(".loginlogo"); await expect(locator).toBeVisible(); }); diff --git a/tests/acceptance/testHelper/pageHelper.js b/tests/acceptance/testHelper/pageHelper.js new file mode 100644 index 0000000..6052f0e --- /dev/null +++ b/tests/acceptance/testHelper/pageHelper.js @@ -0,0 +1,3 @@ +module.exports = { + baseUrl: process.env.WEB_URL || "http://localhost:3000", +}; From 406d896c56996ca2b7ce69b22d2b16d3bb603be7 Mon Sep 17 00:00:00 2001 From: saw-jan Date: Tue, 11 Jan 2022 09:29:53 +0545 Subject: [PATCH 04/11] add wait-for servers --- .drone.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.drone.yml b/.drone.yml index 3fb708d..ad09911 100644 --- a/.drone.yml +++ b/.drone.yml @@ -33,6 +33,12 @@ steps: - npm ci - BROWSER=none npm start + - name: wait-for-servers + image: owncloudci/wait-for:latest + commands: + - wait-for -it server:3001 -t 300 + - wait-for -it web-client:3000 -t 300 + - name: acceptance-tests image: node:14 environment: From e74f745c8e8854ba421a4471175b35f0218726a6 Mon Sep 17 00:00:00 2001 From: saw-jan Date: Tue, 11 Jan 2022 10:39:50 +0545 Subject: [PATCH 05/11] install test browser --- .drone.yml | 4 ++-- package.json | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.drone.yml b/.drone.yml index ad09911..9f3ed3f 100644 --- a/.drone.yml +++ b/.drone.yml @@ -19,7 +19,6 @@ steps: commands: - git clone --single-branch -b master --depth 1 https://github.com/saw-jan/wave-entry-server.git /tmp/server - cd /tmp/server - - ls - npm ci - npm run db:seed - npm start @@ -45,7 +44,8 @@ steps: SERVER_URL: http://server:3001 WEB_URL: http://web-client:3000 commands: - - npm run test:e2e tests/acceptance/features + - npm run setup:e2e + - npm run test:e2e tests/acceptance/features/login.feature services: - name: mongodb diff --git a/package.json b/package.json index a944e90..29ded4d 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "build": "react-scripts build", "test": "react-scripts test", "eject": "react-scripts eject", - "test:e2e": "cucumber-js --require cucumber.config.js --require tests/acceptance/stepDefinitions/**/*.js --format @cucumber/pretty-formatter" + "test:e2e": "cucumber-js --require cucumber.config.js --require tests/acceptance/stepDefinitions/**/*.js --format @cucumber/pretty-formatter", + "setup:e2e": "npx playwright install chromium && npx playwright install-deps" }, "eslintConfig": { "extends": [ From 61da54e2ea6ac5c5163e4457da6ad60c9dd491ac Mon Sep 17 00:00:00 2001 From: sushmita56 Date: Tue, 11 Jan 2022 15:11:36 +0545 Subject: [PATCH 06/11] created docker image --- .dockerignore | 4 ++++ Dockerfile | 11 +++++++++++ docker-compose.yml | 29 +++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..116cfa4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.gitignore +node_modules +.env.example +docker-compose.yml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..22562e1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +FROM node:14 + +WORKDIR /srv/app + +COPY . . + +EXPOSE 3000 + +RUN npm i + +CMD ["npm", "start"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..f349d7b --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,29 @@ +services: + db: + image: mongo + # container_name: mongodb + ports: + - "2700:27017" + + server: + image: waveentryserver2 + environment: + DB_HOST: db + DB_PORT: 27017 + SERVER_PORT: 3002 + JWT_SECRET: abcd1234 + # command: npm run db:seed + ports: + - "3030:3002" + depends_on: + - db + + web: + image: wave-entry-web + ports: + - "3000:3000" + environment: + - REACT_APP_SERVER_URI=http://localhost:3005 + depends_on: + - server + - db From 07260be044aff5497f34bcf615a8ebd79027d016 Mon Sep 17 00:00:00 2001 From: sushmita56 Date: Tue, 11 Jan 2022 16:13:37 +0545 Subject: [PATCH 07/11] added drone config file --- .drone.yml | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .drone.yml diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..60fec31 --- /dev/null +++ b/.drone.yml @@ -0,0 +1,38 @@ +kind: pipeline +type: docker +name: DroneCITest + +steps: + - name: waveentry-server + image: node:14 + environment: + DB_HOST: mongodatabase + DB_PORT: 27017 + DB_NAME: waveentrydatabase + SERVER_PORT: 3001 + JWT_SECRET: abcd1234 + commands: + - git clone https://github.com/SagarGi/wave-entry-server.git /waveentryserver + - cd /waveentryserver + - npm ci + - npm start + + - name: waveentryUI + image: node:14 + environment: + REACT_APP_SERVER_URI: http://waveentry-server:3001 + commands: + - npm ci + - npm start + + - name: acceptanceTest + image: node:14 + commands: + - npm run test:e2e ./tests/acceptance/features/ + +services: + - name: mongodatabase + image: mongo + +trigger: + branch: master From b9fd5e88fd0c07e5e07629404c38955b82f423d7 Mon Sep 17 00:00:00 2001 From: saw-jan Date: Wed, 12 Jan 2022 09:30:04 +0545 Subject: [PATCH 08/11] fxi test pipeline --- .drone.yml | 9 +++++---- cucumber.config.js | 5 ++++- package.json | 2 +- tests/acceptance/{testHelper/pageHelper.js => config.js} | 2 ++ tests/acceptance/pageObjects/loginPage.js | 4 ++-- tests/acceptance/stepDefinitions/loginCheck.js | 4 ++-- 6 files changed, 16 insertions(+), 10 deletions(-) rename tests/acceptance/{testHelper/pageHelper.js => config.js} (57%) diff --git a/.drone.yml b/.drone.yml index 9f3ed3f..e467898 100644 --- a/.drone.yml +++ b/.drone.yml @@ -8,7 +8,7 @@ platform: steps: - name: server - image: node:14 + image: owncloudci/nodejs:14 detach: true environment: DB_HOST: mongodb @@ -24,7 +24,7 @@ steps: - npm start - name: web-client - image: node:14 + image: owncloudci/nodejs:14 detach: true environment: REACT_APP_SERVER_URI: http://server:3001 @@ -39,12 +39,13 @@ steps: - wait-for -it web-client:3000 -t 300 - name: acceptance-tests - image: node:14 + image: owncloudci/nodejs:14 environment: SERVER_URL: http://server:3001 WEB_URL: http://web-client:3000 + HEADLESS: true commands: - - npm run setup:e2e + - sleep 10 && - npm run test:e2e tests/acceptance/features/login.feature services: diff --git a/cucumber.config.js b/cucumber.config.js index 8a4f057..83c4548 100644 --- a/cucumber.config.js +++ b/cucumber.config.js @@ -7,6 +7,7 @@ const { } = require("@cucumber/cucumber"); const { chromium } = require("playwright"); const { expect } = require("@playwright/test"); +const config = require("./tests/acceptance/config"); const { deleteAllStudents, @@ -19,7 +20,9 @@ setDefaultTimeout(60 * 1000); BeforeAll(async function () { global.browser = await chromium.launch({ - headless: false, + slowMo: config.slowMo, + headless: config.headless, + channel: "chrome", }); // console.log("This is before all hooks"); diff --git a/package.json b/package.json index 29ded4d..5ca3c29 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "test": "react-scripts test", "eject": "react-scripts eject", "test:e2e": "cucumber-js --require cucumber.config.js --require tests/acceptance/stepDefinitions/**/*.js --format @cucumber/pretty-formatter", - "setup:e2e": "npx playwright install chromium && npx playwright install-deps" + "setup:browsers": "npx playwright install-deps && npx playwright install chromium" }, "eslintConfig": { "extends": [ diff --git a/tests/acceptance/testHelper/pageHelper.js b/tests/acceptance/config.js similarity index 57% rename from tests/acceptance/testHelper/pageHelper.js rename to tests/acceptance/config.js index 6052f0e..e12d6a1 100644 --- a/tests/acceptance/testHelper/pageHelper.js +++ b/tests/acceptance/config.js @@ -1,3 +1,5 @@ module.exports = { baseUrl: process.env.WEB_URL || "http://localhost:3000", + headless: process.env.HEADLESS === "true", + slowMo: 10, }; diff --git a/tests/acceptance/pageObjects/loginPage.js b/tests/acceptance/pageObjects/loginPage.js index 0c0c753..1cbe749 100644 --- a/tests/acceptance/pageObjects/loginPage.js +++ b/tests/acceptance/pageObjects/loginPage.js @@ -1,4 +1,4 @@ -const { baseUrl } = require("../testHelper/pageHelper"); +const config = require("../config"); class LoginPage { constructor() { @@ -11,7 +11,7 @@ class LoginPage { } async browseToLoginPage() { - await page.goto(`${baseUrl}/`); + await page.goto(`${config.baseUrl}/`); const locator = page.locator(this.loginlogo); await expect(locator).toBeVisible(); } diff --git a/tests/acceptance/stepDefinitions/loginCheck.js b/tests/acceptance/stepDefinitions/loginCheck.js index 8052f0b..2f1a8bb 100644 --- a/tests/acceptance/stepDefinitions/loginCheck.js +++ b/tests/acceptance/stepDefinitions/loginCheck.js @@ -1,8 +1,8 @@ const { Given, When, Then } = require("@cucumber/cucumber"); -const { baseUrl } = require("../testHelper/pageHelper"); +const config = require("../config"); Given("the user has browsed to the loginpage", async function () { - await page.goto(`${baseUrl}/`); + await page.goto(`${config.baseUrl}/`); const locator = page.locator(".loginlogo"); await expect(locator).toBeVisible(); }); From 828c5fcc78064329d4a777322c90849ee4dd96b6 Mon Sep 17 00:00:00 2001 From: sushmita56 Date: Wed, 12 Jan 2022 11:52:07 +0545 Subject: [PATCH 09/11] Added an environment variable in acceptanceTest drone yml file --- .drone.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.drone.yml b/.drone.yml index 60fec31..322547a 100644 --- a/.drone.yml +++ b/.drone.yml @@ -5,8 +5,9 @@ name: DroneCITest steps: - name: waveentry-server image: node:14 + detach: true environment: - DB_HOST: mongodatabase + DB_HOST: mongodatabased DB_PORT: 27017 DB_NAME: waveentrydatabase SERVER_PORT: 3001 @@ -19,14 +20,20 @@ steps: - name: waveentryUI image: node:14 + detach: true environment: REACT_APP_SERVER_URI: http://waveentry-server:3001 commands: - npm ci - npm start + -name: wait + - name: acceptanceTest image: node:14 + environment: + server: http://waveentry-server:3001 + web: http://waveentry:3000 commands: - npm run test:e2e ./tests/acceptance/features/ From 872fe8c8a35883124994a2c507c40515c3fd88b4 Mon Sep 17 00:00:00 2001 From: sushmita56 Date: Wed, 12 Jan 2022 12:17:33 +0545 Subject: [PATCH 10/11] Fixed drone cofiguration file --- .drone.yml | 23 ++++++++++++++--------- cucumber.config.js | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/.drone.yml b/.drone.yml index 322547a..4d124ec 100644 --- a/.drone.yml +++ b/.drone.yml @@ -4,10 +4,10 @@ name: DroneCITest steps: - name: waveentry-server - image: node:14 + image: owncloudci/nodejs:14 detach: true environment: - DB_HOST: mongodatabased + DB_HOST: mongodatabase DB_PORT: 27017 DB_NAME: waveentrydatabase SERVER_PORT: 3001 @@ -19,21 +19,25 @@ steps: - npm start - name: waveentryUI - image: node:14 + image: owncloudci/nodejs:14 detach: true environment: REACT_APP_SERVER_URI: http://waveentry-server:3001 commands: - npm ci - - npm start + - BROWSER=none npm start - -name: wait + - name: wait + image: owncloudci/wait-for:latest + commands: + - wait-for -it waveentry-server:3001 -t 300 + - wait-for -it waveentryUI:3000 -t 300 - name: acceptanceTest - image: node:14 + image: owncloudci/nodejs:14 environment: - server: http://waveentry-server:3001 - web: http://waveentry:3000 + SERVER_URL: http://waveentry-server:3001 + WEB_URL: http://waveentryUI:3000 commands: - npm run test:e2e ./tests/acceptance/features/ @@ -42,4 +46,5 @@ services: image: mongo trigger: - branch: master + branch: + - master diff --git a/cucumber.config.js b/cucumber.config.js index 8a4f057..f10f085 100644 --- a/cucumber.config.js +++ b/cucumber.config.js @@ -19,7 +19,7 @@ setDefaultTimeout(60 * 1000); BeforeAll(async function () { global.browser = await chromium.launch({ - headless: false, + // headless: false, }); // console.log("This is before all hooks"); From 513cfc00a5dae717de59d311fdf30b91a4510c9b Mon Sep 17 00:00:00 2001 From: sushmita56 Date: Wed, 12 Jan 2022 12:53:20 +0545 Subject: [PATCH 11/11] Updated cucumber.config file --- cucumber.config.js | 1 + 1 file changed, 1 insertion(+) diff --git a/cucumber.config.js b/cucumber.config.js index f10f085..67fae8d 100644 --- a/cucumber.config.js +++ b/cucumber.config.js @@ -20,6 +20,7 @@ setDefaultTimeout(60 * 1000); BeforeAll(async function () { global.browser = await chromium.launch({ // headless: false, + channel: "chrome", }); // console.log("This is before all hooks");