mirror of
https://github.com/OneUptime/oneuptime.git
synced 2026-04-06 00:32:12 +02:00
Merge branch 'smoke-tests' into 'master'
Smoke tests See merge request fyipe-project/app!19
This commit is contained in:
328
.gitlab-ci.yml
328
.gitlab-ci.yml
@@ -7,190 +7,194 @@
|
||||
|
||||
# Define stages
|
||||
stages:
|
||||
# - BuildAndTest
|
||||
# - E2E
|
||||
- BuildAndTest
|
||||
- E2E
|
||||
- DeployStaging
|
||||
- DeployProduction
|
||||
- SmokeTest
|
||||
- Rollback
|
||||
|
||||
# ##BACKEND
|
||||
# lint_n_audit_backend:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd backend
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# # - npm run audit
|
||||
# - cd ..
|
||||
##BACKEND
|
||||
lint_n_audit_backend:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd backend
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
# - npm run audit
|
||||
- cd ..
|
||||
|
||||
# build_n_test_backend:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
# - sudo docker run --name fyipe --network container:mongo fyipe-project/backend:3.0.$CI_PIPELINE_IID npm test
|
||||
build_n_test_backend:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
- sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
- sudo docker run --name fyipe --network container:mongo fyipe-project/backend:3.0.$CI_PIPELINE_IID npm test
|
||||
|
||||
# ##DASHBOARD
|
||||
# lint_n_audit_dashboard:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd dashboard
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# # - npm run audit
|
||||
# - cd ..
|
||||
##DASHBOARD
|
||||
lint_n_audit_dashboard:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd dashboard
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
# - npm run audit
|
||||
- cd ..
|
||||
|
||||
# build_n_test_dashboard:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "Setup machine for running puppeteer tests"
|
||||
# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
# - sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts
|
||||
# - sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard
|
||||
# - sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker ps
|
||||
# - cd dashboard
|
||||
# - npm install
|
||||
# - npm run jest
|
||||
build_n_test_dashboard:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "Setup machine for running puppeteer tests"
|
||||
- sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
- sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
- sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts
|
||||
- sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard
|
||||
- sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker ps
|
||||
- cd dashboard
|
||||
- npm install
|
||||
- npm run jest
|
||||
|
||||
|
||||
# ##ZAPIER
|
||||
# lint_n_audit_zapier:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd zapier
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
##ZAPIER
|
||||
lint_n_audit_zapier:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd zapier
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
|
||||
# build_n_test_zapier:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "No test implemented"
|
||||
build_n_test_zapier:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "No test implemented"
|
||||
|
||||
# ## STATUS PAGE
|
||||
# lint_n_audit_statuspage:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd status-page
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
## STATUS PAGE
|
||||
lint_n_audit_statuspage:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd status-page
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
|
||||
# build_n_test_statuspage:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "Setup machine for running puppeteer tests"
|
||||
# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
# - sudo docker run --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/status-page:3.0.$CI_PIPELINE_IID ./status-page
|
||||
# - sudo docker run -p 3006:3006 -d fyipe-project/status-page:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker ps
|
||||
# - cd backend
|
||||
# - npm install
|
||||
# - cd ..
|
||||
# - cd status-page
|
||||
# - npm install
|
||||
# - curl localhost:3006
|
||||
# - npm run jest
|
||||
build_n_test_statuspage:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "Setup machine for running puppeteer tests"
|
||||
- sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
- sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
- sudo docker run --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/status-page:3.0.$CI_PIPELINE_IID ./status-page
|
||||
- sudo docker run -p 3006:3006 -d fyipe-project/status-page:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker ps
|
||||
- cd backend
|
||||
- npm install
|
||||
- cd ..
|
||||
- cd status-page
|
||||
- npm install
|
||||
- curl localhost:3006
|
||||
- npm run jest
|
||||
|
||||
|
||||
# ## ACCOUNTS
|
||||
# lint_n_audit_accounts:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd accounts
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
## ACCOUNTS
|
||||
lint_n_audit_accounts:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd accounts
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
|
||||
# build_n_test_accounts:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "Setup machine for running puppeteer tests"
|
||||
# - sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
# - sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
# - sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
# - sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts
|
||||
# - sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard
|
||||
# - sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
# - sudo docker ps
|
||||
# - cd accounts
|
||||
# - npm install
|
||||
# - npm run jest
|
||||
build_n_test_accounts:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "Setup machine for running puppeteer tests"
|
||||
- sudo docker stop $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker rm $(sudo docker ps -aq) || echo 'No docker containers'
|
||||
- sudo docker run --name mongo -p 27017:27017 -d mongo:3.4
|
||||
- sudo docker build -t fyipe-project/backend:3.0.$CI_PIPELINE_IID ./backend
|
||||
- sudo docker run --env-file ./backend/.env.development --net=host -d fyipe-project/backend:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/accounts:3.0.$CI_PIPELINE_IID ./accounts
|
||||
- sudo docker run -p 3003:3003 -d fyipe-project/accounts:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker build -t fyipe-project/dashboard:3.0.$CI_PIPELINE_IID ./dashboard
|
||||
- sudo docker run -p 3000:3000 -d fyipe-project/dashboard:3.0.$CI_PIPELINE_IID
|
||||
- sudo docker ps
|
||||
- cd accounts
|
||||
- npm install
|
||||
- npm run jest
|
||||
|
||||
# ## HOME
|
||||
# lint_n_audit_home:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd home
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
## HOME
|
||||
lint_n_audit_home:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd home
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
|
||||
# build_n_test_home:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "No test implemented"
|
||||
build_n_test_home:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "No test implemented"
|
||||
|
||||
# ## PROBE
|
||||
# lint_n_audit_probe:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - cd probe
|
||||
# - npm install --dev
|
||||
# - npm run lint
|
||||
# - npm run audit
|
||||
# - cd ..
|
||||
## PROBE
|
||||
lint_n_audit_probe:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- cd probe
|
||||
- npm install --dev
|
||||
- npm run lint
|
||||
- npm run audit
|
||||
- cd ..
|
||||
|
||||
# build_n_test_probe:
|
||||
# stage: BuildAndTest
|
||||
# script:
|
||||
# - echo "No test implemented"
|
||||
build_n_test_probe:
|
||||
stage: BuildAndTest
|
||||
script:
|
||||
- echo "No test implemented"
|
||||
|
||||
# ##E2E Stage.
|
||||
# e2e_test:
|
||||
# stage: E2E
|
||||
# script:
|
||||
# - chmod +x ./kubernetes/ci/setup-machine.sh
|
||||
# - ./kubernetes/ci/setup-machine.sh
|
||||
# - chmod +x ./kubernetes/ci/setup.sh
|
||||
# - ./kubernetes/ci/setup.sh
|
||||
# - export ACCOUNTS_URL=`sudo kubectl describe svc accounts | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export BACKEND_URL=`sudo kubectl describe svc backend | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export DASHBOARD_URL=`sudo kubectl describe svc dashboard | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export HOME_URL=`sudo kubectl describe svc home | grep Endpoints | cut -d ":" -f 2`
|
||||
# - export STATUSPAGE_URL=`sudo kubectl describe svc status-page | grep Endpoints | cut -d ":" -f 2`
|
||||
# - echo ACCOUNTS_URL=$ACCOUNTS_URL
|
||||
# - echo BACKEND_URL=$BACKEND_URL
|
||||
# - echo DASHBOARD_URL=$DASHBOARD_URL
|
||||
# - echo HOME_URL=$HOME_URL
|
||||
# - echo STATUSPAGE_URL=$STATUSPAGE_URL
|
||||
# - chmod +x ./kubernetes/ci/hosts-setup.sh
|
||||
# - ./kubernetes/ci/hosts-setup.sh
|
||||
##E2E Stage.
|
||||
e2e_test:
|
||||
stage: E2E
|
||||
script:
|
||||
- chmod +x ./kubernetes/ci/setup-machine.sh
|
||||
- ./kubernetes/ci/setup-machine.sh
|
||||
- chmod +x ./kubernetes/ci/setup.sh
|
||||
- ./kubernetes/ci/setup.sh
|
||||
- export ACCOUNTS_URL=`sudo kubectl describe svc accounts | grep Endpoints | cut -d ":" -f 2`
|
||||
- export BACKEND_URL=`sudo kubectl describe svc backend | grep Endpoints | cut -d ":" -f 2`
|
||||
- export DASHBOARD_URL=`sudo kubectl describe svc dashboard | grep Endpoints | cut -d ":" -f 2`
|
||||
- export HOME_URL=`sudo kubectl describe svc home | grep Endpoints | cut -d ":" -f 2`
|
||||
- export STATUSPAGE_URL=`sudo kubectl describe svc status-page | grep Endpoints | cut -d ":" -f 2`
|
||||
- export APIDOCS_URL=`sudo kubectl describe svc api-docs | grep Endpoints | cut -d ":" -f 2`
|
||||
- echo ACCOUNTS_URL=$ACCOUNTS_URL
|
||||
- echo BACKEND_URL=$BACKEND_URL
|
||||
- echo DASHBOARD_URL=$DASHBOARD_URL
|
||||
- echo HOME_URL=$HOME_URL
|
||||
- echo STATUSPAGE_URL=$STATUSPAGE_URL
|
||||
- chmod +x ./kubernetes/ci/hosts-setup.sh
|
||||
- ./kubernetes/ci/hosts-setup.sh
|
||||
- cd smoke-test
|
||||
- npm i
|
||||
- npm run test
|
||||
|
||||
# only:
|
||||
# refs:
|
||||
# - release
|
||||
# - master
|
||||
only:
|
||||
refs:
|
||||
- release
|
||||
- master
|
||||
|
||||
# DEPLOYMENT STAGE - BACKEND
|
||||
deploy_staging_backend:
|
||||
|
||||
@@ -1,10 +1,26 @@
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
const app = express();
|
||||
const envfile = require('envfile');
|
||||
const fs = require('fs');
|
||||
var child_process = require('child_process');
|
||||
|
||||
var env = {
|
||||
REACT_APP_FYIPE_HOSTED: process.env.FYIPE_HOSTED,
|
||||
REACT_APP_HOST: process.env.HOST,
|
||||
REACT_APP_DASHBOARD_HOST: process.env.DASHBOARD_HOST,
|
||||
REACT_APP_BACKEND_HOST: process.env.BACKEND_HOST
|
||||
}
|
||||
|
||||
fs.writeFileSync('.env', envfile.stringifySync(env));
|
||||
|
||||
child_process.execSync('react-env', {
|
||||
stdio: [0, 1, 2]
|
||||
});
|
||||
|
||||
app.use(express.static(path.join(__dirname, 'build')));
|
||||
|
||||
app.get('/*', function(req, res) {
|
||||
app.get('/*', function (req, res) {
|
||||
res.sendFile(path.join(__dirname, 'build', 'index.html'));
|
||||
});
|
||||
|
||||
|
||||
84
accounts/package-lock.json
generated
84
accounts/package-lock.json
generated
@@ -928,6 +928,29 @@
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@beam-australia/react-env": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@beam-australia/react-env/-/react-env-2.1.2.tgz",
|
||||
"integrity": "sha512-gXcCGGGb2oRM/oeqT861JXsSTJjOxGTBMkj7J5ujEBb6Vmv5I108NcALPYYdGdzFCV6ebdVP+E5k0W1xAbzA7w==",
|
||||
"requires": {
|
||||
"cross-spawn": "^6.0.5",
|
||||
"dotenv": "^8.0.0",
|
||||
"dotenv-expand": "^5.1.0",
|
||||
"minimist": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz",
|
||||
"integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA=="
|
||||
},
|
||||
"dotenv-expand": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
|
||||
"integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@cnakazawa/watch": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
|
||||
@@ -1782,6 +1805,15 @@
|
||||
"resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
|
||||
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
|
||||
},
|
||||
"ambi": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ambi/-/ambi-5.0.0.tgz",
|
||||
"integrity": "sha512-NYJzHMsZU7clGY2lH11U+2PEllFDW66qnUukXYbyF8ZJ0B0CXVNfKHUvkUp+gsaNPBW8FqEFX5l64LTlUvI2pw==",
|
||||
"requires": {
|
||||
"editions": "^2.1.0",
|
||||
"typechecker": "^4.3.0"
|
||||
}
|
||||
},
|
||||
"ansi-colors": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
|
||||
@@ -4834,6 +4866,22 @@
|
||||
"stream-shift": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"eachr": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eachr/-/eachr-3.2.0.tgz",
|
||||
"integrity": "sha1-LDXkPqCGUW95l8+At6pk1VpKRIQ=",
|
||||
"requires": {
|
||||
"editions": "^1.1.1",
|
||||
"typechecker": "^4.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"editions": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz",
|
||||
"integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
@@ -4843,6 +4891,15 @@
|
||||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"editions": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/editions/-/editions-2.1.3.tgz",
|
||||
"integrity": "sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw==",
|
||||
"requires": {
|
||||
"errlop": "^1.1.1",
|
||||
"semver": "^5.6.0"
|
||||
}
|
||||
},
|
||||
"ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
@@ -4922,6 +4979,25 @@
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
|
||||
"integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
|
||||
},
|
||||
"envfile": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/envfile/-/envfile-3.0.0.tgz",
|
||||
"integrity": "sha512-LdL/WLZutuZedarG3Knu4v4RC7kZpC+dSdv9tVj0B8q11K0T0pLczRYxhmyVpApRRXWQnz5Fldrtnu/RzbCHPA==",
|
||||
"requires": {
|
||||
"ambi": "^5.0.0",
|
||||
"eachr": "^3.1.0",
|
||||
"editions": "^2.1.3",
|
||||
"typechecker": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"errlop": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz",
|
||||
"integrity": "sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw==",
|
||||
"requires": {
|
||||
"editions": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"errno": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
|
||||
@@ -13445,6 +13521,14 @@
|
||||
"mime-types": "~2.1.24"
|
||||
}
|
||||
},
|
||||
"typechecker": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.7.0.tgz",
|
||||
"integrity": "sha512-4LHc1KMNJ6NDGO+dSM/yNfZQRtp8NN7psYrPHUblD62Dvkwsp3VShsbM78kOgpcmMkRTgvwdKOTjctS+uMllgQ==",
|
||||
"requires": {
|
||||
"editions": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"typedarray": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@beam-australia/react-env": "^2.1.2",
|
||||
"@trendmicro/react-dropdown": "^1.3.0",
|
||||
"axios": "^0.18.0",
|
||||
"browserslist": "^4.6.1",
|
||||
@@ -12,6 +13,7 @@
|
||||
"components": "^0.1.0",
|
||||
"connected-react-router": "^4.5.0",
|
||||
"creditcard-generator": "0.0.7",
|
||||
"envfile": "^3.0.0",
|
||||
"express": "^4.16.4",
|
||||
"faker": "^4.1.0",
|
||||
"file-saver": "^2.0.1",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
<link rel="preload" href="/assets/fonts/camphor/font3.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<link rel="preload" href="/assets/fonts/camphor/font4.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="%PUBLIC_URL%/env.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tipsy/1.0.3/jquery.tipsy.min.js" type="text/javascript"></script>
|
||||
<style type="text/css">
|
||||
/* Camphor */
|
||||
|
||||
@@ -11,25 +11,26 @@ let dashboardUrl = null;
|
||||
let domain = null;
|
||||
let adminDashboardUrl = null;
|
||||
|
||||
|
||||
function env(value) {
|
||||
var { _env } = window;
|
||||
return _env[`REACT_APP_${value}`];
|
||||
}
|
||||
|
||||
if (!isServer) {
|
||||
if (window.location.href.indexOf('localhost') > -1) {
|
||||
apiUrl = 'http://localhost:3002';
|
||||
dashboardUrl = 'http://localhost:3000';
|
||||
domain = 'localhost';
|
||||
adminDashboardUrl = 'http://localhost:3100';
|
||||
} else if (window.location.href.indexOf('staging') > -1) {
|
||||
apiUrl = 'https://staging-api.fyipe.com';
|
||||
dashboardUrl = 'http://staging-dashboard.fyipe.com';
|
||||
domain = 'fyipe.com';
|
||||
} else {
|
||||
apiUrl = 'https://api.fyipe.com';
|
||||
dashboardUrl = 'https://dashboard.fyipe.com';
|
||||
domain = 'fyipe.com';
|
||||
} else if (env('BACKEND_HOST')) {
|
||||
apiUrl = env('BACKEND_HOST');
|
||||
dashboardUrl = env('DASHBOARD_HOST');
|
||||
domain = 'host';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
export const API_URL = apiUrl;
|
||||
|
||||
export const DASHBOARD_URL = dashboardUrl;
|
||||
@@ -197,7 +198,7 @@ export const PricingPlan = {
|
||||
|
||||
getPlans() {
|
||||
|
||||
if (window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('staging') > -1) {
|
||||
if (window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('staging') > -1 || window.location.href.indexOf('accounts:3003') > -1) {
|
||||
return [
|
||||
{
|
||||
category: 'Basic',
|
||||
|
||||
@@ -1,10 +1,26 @@
|
||||
const express = require('express');
|
||||
const path = require('path');
|
||||
const app = express();
|
||||
const envfile = require('envfile');
|
||||
const fs = require('fs');
|
||||
var child_process = require('child_process');
|
||||
|
||||
var env = {
|
||||
REACT_APP_FYIPE_HOSTED: process.env.FYIPE_HOSTED,
|
||||
REACT_APP_HOST: process.env.HOST,
|
||||
REACT_APP_ACCOUNTS_HOST: process.env.ACCOUNTS_HOST,
|
||||
REACT_APP_BACKEND_HOST: process.env.BACKEND_HOST
|
||||
}
|
||||
|
||||
fs.writeFileSync('.env', envfile.stringifySync(env));
|
||||
|
||||
child_process.execSync('react-env', {
|
||||
stdio: [0, 1, 2]
|
||||
});
|
||||
|
||||
app.use(express.static(path.join(__dirname, 'build')));
|
||||
|
||||
app.get('/*', function(req, res) {
|
||||
app.get('/*', function (req, res) {
|
||||
res.sendFile(path.join(__dirname, 'build', 'index.html'));
|
||||
});
|
||||
|
||||
|
||||
119
dashboard/package-lock.json
generated
119
dashboard/package-lock.json
generated
@@ -928,6 +928,34 @@
|
||||
"to-fast-properties": "^2.0.0"
|
||||
}
|
||||
},
|
||||
"@beam-australia/react-env": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@beam-australia/react-env/-/react-env-2.1.2.tgz",
|
||||
"integrity": "sha512-gXcCGGGb2oRM/oeqT861JXsSTJjOxGTBMkj7J5ujEBb6Vmv5I108NcALPYYdGdzFCV6ebdVP+E5k0W1xAbzA7w==",
|
||||
"requires": {
|
||||
"cross-spawn": "^6.0.5",
|
||||
"dotenv": "^8.0.0",
|
||||
"dotenv-expand": "^5.1.0",
|
||||
"minimist": "^1.2.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"dotenv": {
|
||||
"version": "8.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.1.0.tgz",
|
||||
"integrity": "sha512-GUE3gqcDCaMltj2++g6bRQ5rBJWtkWTmqmD0fo1RnnMuUqHNCt2oTPeDnS9n6fKYvlhn7AeBkb38lymBtWBQdA=="
|
||||
},
|
||||
"dotenv-expand": {
|
||||
"version": "5.1.0",
|
||||
"resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz",
|
||||
"integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA=="
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
|
||||
"integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@cnakazawa/watch": {
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@cnakazawa/watch/-/watch-1.0.3.tgz",
|
||||
@@ -1829,6 +1857,15 @@
|
||||
"resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz",
|
||||
"integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM="
|
||||
},
|
||||
"ambi": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/ambi/-/ambi-5.0.0.tgz",
|
||||
"integrity": "sha512-NYJzHMsZU7clGY2lH11U+2PEllFDW66qnUukXYbyF8ZJ0B0CXVNfKHUvkUp+gsaNPBW8FqEFX5l64LTlUvI2pw==",
|
||||
"requires": {
|
||||
"editions": "^2.1.0",
|
||||
"typechecker": "^4.3.0"
|
||||
}
|
||||
},
|
||||
"ansi-colors": {
|
||||
"version": "3.2.4",
|
||||
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz",
|
||||
@@ -5571,6 +5608,22 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"eachr": {
|
||||
"version": "3.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eachr/-/eachr-3.2.0.tgz",
|
||||
"integrity": "sha1-LDXkPqCGUW95l8+At6pk1VpKRIQ=",
|
||||
"requires": {
|
||||
"editions": "^1.1.1",
|
||||
"typechecker": "^4.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"editions": {
|
||||
"version": "1.3.4",
|
||||
"resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz",
|
||||
"integrity": "sha512-gzao+mxnYDzIysXKMQi/+M1mjy/rjestjg6OPoYTtI+3Izp23oiGZitsl9lPDPiTGXbcSIk1iJWhliSaglxnUg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"ecc-jsbn": {
|
||||
"version": "0.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
|
||||
@@ -5580,6 +5633,15 @@
|
||||
"safer-buffer": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"editions": {
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/editions/-/editions-2.1.3.tgz",
|
||||
"integrity": "sha512-xDZyVm0A4nLgMNWVVLJvcwMjI80ShiH/27RyLiCnW1L273TcJIA25C4pwJ33AWV01OX6UriP35Xu+lH4S7HWQw==",
|
||||
"requires": {
|
||||
"errlop": "^1.1.1",
|
||||
"semver": "^5.6.0"
|
||||
}
|
||||
},
|
||||
"ee-first": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
||||
@@ -5706,6 +5768,25 @@
|
||||
"resolved": "https://registry.npmjs.org/entities/-/entities-1.0.0.tgz",
|
||||
"integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY="
|
||||
},
|
||||
"envfile": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/envfile/-/envfile-3.0.0.tgz",
|
||||
"integrity": "sha512-LdL/WLZutuZedarG3Knu4v4RC7kZpC+dSdv9tVj0B8q11K0T0pLczRYxhmyVpApRRXWQnz5Fldrtnu/RzbCHPA==",
|
||||
"requires": {
|
||||
"ambi": "^5.0.0",
|
||||
"eachr": "^3.1.0",
|
||||
"editions": "^2.1.3",
|
||||
"typechecker": "^4.0.1"
|
||||
}
|
||||
},
|
||||
"errlop": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/errlop/-/errlop-1.1.1.tgz",
|
||||
"integrity": "sha512-WX7QjiPHhsny7/PQvrhS5VMizXXKoKCS3udaBp8gjlARdbn+XmK300eKBAAN0hGyRaTCtRpOaxK+xFVPUJ3zkw==",
|
||||
"requires": {
|
||||
"editions": "^2.1.2"
|
||||
}
|
||||
},
|
||||
"errno": {
|
||||
"version": "0.1.7",
|
||||
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
|
||||
@@ -8486,8 +8567,7 @@
|
||||
},
|
||||
"ansi-regex": {
|
||||
"version": "2.1.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"aproba": {
|
||||
"version": "1.2.0",
|
||||
@@ -8524,8 +8604,7 @@
|
||||
},
|
||||
"code-point-at": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
@@ -8534,8 +8613,7 @@
|
||||
},
|
||||
"console-control-strings": {
|
||||
"version": "1.1.0",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"core-util-is": {
|
||||
"version": "1.0.2",
|
||||
@@ -8638,8 +8716,7 @@
|
||||
},
|
||||
"inherits": {
|
||||
"version": "2.0.3",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"ini": {
|
||||
"version": "1.3.5",
|
||||
@@ -8649,7 +8726,6 @@
|
||||
"is-fullwidth-code-point": {
|
||||
"version": "1.0.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
}
|
||||
@@ -8675,7 +8751,6 @@
|
||||
"minipass": {
|
||||
"version": "2.3.5",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"safe-buffer": "^5.1.2",
|
||||
"yallist": "^3.0.0"
|
||||
@@ -8692,7 +8767,6 @@
|
||||
"mkdirp": {
|
||||
"version": "0.5.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"minimist": "0.0.8"
|
||||
}
|
||||
@@ -8765,8 +8839,7 @@
|
||||
},
|
||||
"number-is-nan": {
|
||||
"version": "1.0.1",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
@@ -8776,7 +8849,6 @@
|
||||
"once": {
|
||||
"version": "1.4.0",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"wrappy": "1"
|
||||
}
|
||||
@@ -8852,8 +8924,7 @@
|
||||
},
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"safer-buffer": {
|
||||
"version": "2.1.2",
|
||||
@@ -8883,7 +8954,6 @@
|
||||
"string-width": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
@@ -8901,7 +8971,6 @@
|
||||
"strip-ansi": {
|
||||
"version": "3.0.1",
|
||||
"bundled": true,
|
||||
"optional": true,
|
||||
"requires": {
|
||||
"ansi-regex": "^2.0.0"
|
||||
}
|
||||
@@ -8940,13 +9009,11 @@
|
||||
},
|
||||
"wrappy": {
|
||||
"version": "1.0.2",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.0.3",
|
||||
"bundled": true,
|
||||
"optional": true
|
||||
"bundled": true
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -15006,6 +15073,14 @@
|
||||
"mime-types": "~2.1.24"
|
||||
}
|
||||
},
|
||||
"typechecker": {
|
||||
"version": "4.7.0",
|
||||
"resolved": "https://registry.npmjs.org/typechecker/-/typechecker-4.7.0.tgz",
|
||||
"integrity": "sha512-4LHc1KMNJ6NDGO+dSM/yNfZQRtp8NN7psYrPHUblD62Dvkwsp3VShsbM78kOgpcmMkRTgvwdKOTjctS+uMllgQ==",
|
||||
"requires": {
|
||||
"editions": "^2.1.0"
|
||||
}
|
||||
},
|
||||
"typedarray": {
|
||||
"version": "0.0.6",
|
||||
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@beam-australia/react-env": "^2.1.2",
|
||||
"@trendmicro/react-dropdown": "^1.3.0",
|
||||
"axios": "^0.18.0",
|
||||
"browserslist": "^4.6.1",
|
||||
@@ -12,6 +13,7 @@
|
||||
"cloudboost": "^6.6.6",
|
||||
"components": "^0.1.0",
|
||||
"connected-react-router": "^4.5.0",
|
||||
"envfile": "^3.0.0",
|
||||
"express": "^4.16.4",
|
||||
"faker": "^4.1.0",
|
||||
"file-saver": "^2.0.1",
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
<link rel="preload" href="/assets/fonts/camphor/font3.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<link rel="preload" href="/assets/fonts/camphor/font4.woff2" as="font" type="font/woff2" crossorigin="">
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js" type="text/javascript"></script>
|
||||
<script src="%PUBLIC_URL%/env.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.tipsy/1.0.3/jquery.tipsy.min.js" type="text/javascript"></script>
|
||||
<script src="https://js.stripe.com/v3/"></script>
|
||||
<style type="text/css">
|
||||
|
||||
@@ -3,32 +3,50 @@ import isEmail from 'sane-email-validation';
|
||||
import validUrl from 'valid-url';
|
||||
import valid from 'card-validator';
|
||||
import { isServer } from './store';
|
||||
import FileSaver from 'file-saver'
|
||||
import FileSaver from 'file-saver';
|
||||
|
||||
let apiUrl = 'http://localhost:3002';
|
||||
let dashboardUrl = null;
|
||||
let accountsUrl = null;
|
||||
let domain = null;
|
||||
|
||||
|
||||
// if (!isServer) {
|
||||
// if (window.location.href.indexOf('localhost') > -1) {
|
||||
// apiUrl = 'http://localhost:3002';
|
||||
// dashboardUrl = 'http://localhost:3000';
|
||||
// accountsUrl = 'http://localhost:3003';
|
||||
// domain = 'localhost';
|
||||
// } else if (window.location.href.indexOf('staging') > -1) {
|
||||
// apiUrl = 'https://staging-api.fyipe.com';
|
||||
// dashboardUrl = 'http://staging-dashboard.fyipe.com';
|
||||
// accountsUrl = 'http://staging-accounts.fyipe.com';
|
||||
// domain = 'fyipe.com';
|
||||
// } else {
|
||||
// apiUrl = 'https://api.fyipe.com';
|
||||
// dashboardUrl = 'https://fyipe.com';
|
||||
// accountsUrl = 'https://accounts.fyipe.com';
|
||||
// domain = 'fyipe.com';
|
||||
// }
|
||||
// }
|
||||
|
||||
function env(value) {
|
||||
var { _env } = window;
|
||||
return _env[`REACT_APP_${value}`];
|
||||
}
|
||||
|
||||
if (!isServer) {
|
||||
if (window.location.href.indexOf('localhost') > -1) {
|
||||
apiUrl = 'http://localhost:3002';
|
||||
dashboardUrl = 'http://localhost:3000';
|
||||
accountsUrl = 'http://localhost:3003';
|
||||
domain = 'localhost';
|
||||
} else if (window.location.href.indexOf('staging') > -1) {
|
||||
apiUrl = 'https://staging-api.fyipe.com';
|
||||
dashboardUrl = 'http://staging-dashboard.fyipe.com';
|
||||
accountsUrl = 'http://staging-accounts.fyipe.com';
|
||||
domain = 'fyipe.com';
|
||||
} else {
|
||||
apiUrl = 'https://api.fyipe.com';
|
||||
dashboardUrl = 'https://fyipe.com';
|
||||
accountsUrl = 'https://accounts.fyipe.com';
|
||||
domain = 'fyipe.com';
|
||||
} else if (env('BACKEND_HOST')) {
|
||||
apiUrl = env('BACKEND_HOST');
|
||||
dashboardUrl = env('HOST');
|
||||
accountsUrl = env('ACCOUNTS_HOST');
|
||||
domain = 'host';
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
export const API_URL = apiUrl;
|
||||
@@ -215,7 +233,7 @@ export const PricingPlan = {
|
||||
|
||||
getPlans() {
|
||||
|
||||
if (window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('staging') > -1) {
|
||||
if (window.location.href.indexOf('localhost') > -1 || window.location.href.indexOf('staging') > -1 || window.location.href.indexOf('dashboard:3003') > -1) {
|
||||
return [
|
||||
{
|
||||
category: 'Basic',
|
||||
|
||||
@@ -26,6 +26,12 @@ spec:
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "http://dashboard:3000"
|
||||
- name: ACCOUNTS_HOST
|
||||
value: "http://accounts:3003"
|
||||
- name: BACKEND_HOST
|
||||
value: "http://backend:3002"
|
||||
ports:
|
||||
- containerPort: 3000
|
||||
hostPort: 3000
|
||||
@@ -75,6 +81,12 @@ spec:
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "http://accounts:3003"
|
||||
- name: BACKEND_HOST
|
||||
value: "http://backend:3002"
|
||||
- name: DASHBOARD_HOST
|
||||
value: "http://dashboard:3000"
|
||||
ports:
|
||||
- containerPort: 3003
|
||||
hostPort: 3003
|
||||
@@ -100,6 +112,61 @@ spec:
|
||||
type: LoadBalancer
|
||||
---
|
||||
|
||||
# Fyipe API docs Deployment
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: api-docs
|
||||
labels:
|
||||
app: api-docs
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: api-docs
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: api-docs
|
||||
spec:
|
||||
containers:
|
||||
- image: localhost:32000/api-docs:master
|
||||
name: api-docs
|
||||
imagePullPolicy: Always
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "accounts"
|
||||
- name: BACKEND_HOST
|
||||
value: "backend"
|
||||
- name: DASHBOARD_HOST
|
||||
value: "dashboard"
|
||||
ports:
|
||||
- containerPort: 1445
|
||||
hostPort: 1445
|
||||
name: api-docs
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
- name: gitlabcredv2
|
||||
---
|
||||
# Fyipe API docs Service
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
labels:
|
||||
app: api-docs
|
||||
name: api-docs
|
||||
spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 1445
|
||||
selector:
|
||||
app: api-docs
|
||||
type: LoadBalancer
|
||||
---
|
||||
|
||||
# Fyipe Backend Deployment
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
@@ -133,7 +200,7 @@ spec:
|
||||
- name: STRIPE_PRIVATE_KEY
|
||||
value: "sk_test_YxwnzywggtAd8jDaHecNmHiN"
|
||||
- name: PORT
|
||||
value: "3001"
|
||||
value: "3002"
|
||||
- name: MAIL_USER
|
||||
value: "testmail@fyipe.com"
|
||||
- name: MAIL_PASSWORD
|
||||
@@ -150,9 +217,11 @@ spec:
|
||||
value: "testmail@fyipe.com"
|
||||
- name: EMAIL_VERIFY_TIME
|
||||
value: "3600"
|
||||
- name: MAIL_SECURE
|
||||
value: "false"
|
||||
ports:
|
||||
- containerPort: 3001
|
||||
hostPort: 3001
|
||||
- containerPort: 3002
|
||||
hostPort: 3002
|
||||
name: backend
|
||||
restartPolicy: Always
|
||||
imagePullSecrets:
|
||||
@@ -169,7 +238,7 @@ spec:
|
||||
ports:
|
||||
- port: 80
|
||||
protocol: TCP
|
||||
targetPort: 3001
|
||||
targetPort: 3002
|
||||
selector:
|
||||
app: backend
|
||||
type: LoadBalancer
|
||||
@@ -198,6 +267,14 @@ spec:
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "home"
|
||||
- name: BACKEND_HOST
|
||||
value: "backend"
|
||||
- name: ACCOUNTS_HOST
|
||||
value: "accounts"
|
||||
- name: DASHBOARD_HOST
|
||||
value: "dashboard"
|
||||
ports:
|
||||
- containerPort: 1444
|
||||
hostPort: 1444
|
||||
@@ -244,6 +321,14 @@ spec:
|
||||
env:
|
||||
- name: FYIPE_HOSTED
|
||||
value: "true"
|
||||
- name: HOST
|
||||
value: "statuspage"
|
||||
- name: BACKEND_HOST
|
||||
value: "backend"
|
||||
- name: ACCOUNTS_HOST
|
||||
value: "accounts"
|
||||
- name: DASHBOARD_HOST
|
||||
value: "dashboard"
|
||||
ports:
|
||||
- containerPort: 3006
|
||||
hostPort: 3006
|
||||
|
||||
@@ -6,5 +6,7 @@ sudo sed -i '/backend/c\' /etc/hosts
|
||||
echo $BACKEND_URL' backend' | sudo tee -a /etc/hosts
|
||||
sudo sed -i '/home/c\' /etc/hosts
|
||||
echo $HOME_URL' home' | sudo tee -a /etc/hosts
|
||||
sudo sed -i '/statuspage/c\' /etc/hosts
|
||||
echo $STATUSPAGE_URL' statuspage' | sudo tee -a /etc/hosts
|
||||
sudo sed -i '/status-page/c\' /etc/hosts
|
||||
echo $STATUSPAGE_URL' status-page' | sudo tee -a /etc/hosts
|
||||
sudo sed -i '/api-docs/c\' /etc/hosts
|
||||
echo $APIDOCS_URL' api-docs' | sudo tee -a /etc/hosts
|
||||
101
smoke-test/accounts.test.js
Normal file
101
smoke-test/accounts.test.js
Normal file
@@ -0,0 +1,101 @@
|
||||
const puppeteer = require('puppeteer');
|
||||
var should = require('should');
|
||||
var utils = require('./test-utils');
|
||||
|
||||
var browser, page, userCredentials;
|
||||
|
||||
describe('Login API', () => {
|
||||
|
||||
beforeAll(async () => {
|
||||
jest.setTimeout(15000);
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
|
||||
// intercept request and mock response for login
|
||||
await page.setRequestInterception(true);
|
||||
await page.on('request', async (request) => {
|
||||
if ((await request.url()).match(/user\/login/)) {
|
||||
request.respond({
|
||||
status: 200,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify(userCredentials)
|
||||
});
|
||||
} else {
|
||||
request.continue();
|
||||
}
|
||||
});
|
||||
await page.on('response', async (response) => {
|
||||
try {
|
||||
var res = await response.json();
|
||||
if (res && res.tokens) {
|
||||
userCredentials = res;
|
||||
}
|
||||
} catch (error) { }
|
||||
});
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
});
|
||||
|
||||
it('Should login valid User', async () => {
|
||||
await page.goto(utils.ACCOUNTS_URL + '/register', { waitUntil: 'networkidle2' });
|
||||
await page.waitForSelector('#email');
|
||||
await page.click('input[name=email]');
|
||||
await page.type('input[name=email]', utils.user.email);
|
||||
await page.click('input[name=name]');
|
||||
await page.type('input[name=name]', utils.user.name);
|
||||
await page.click('input[name=companyName]');
|
||||
await page.type('input[name=companyName]', utils.user.company.name);
|
||||
await page.click('input[name=companyPhoneNumber]');
|
||||
await page.type('input[name=companyPhoneNumber]', utils.user.phone);
|
||||
await page.click('input[name=password]');
|
||||
await page.type('input[name=password]', utils.user.password);
|
||||
await page.click('input[name=confirmPassword]');
|
||||
await page.type('input[name=confirmPassword]', utils.user.password);
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(10000);
|
||||
await page.waitForSelector('#cardName');
|
||||
await page.click('input[name=cardName]');
|
||||
await page.type('input[name=cardName]', utils.user.name);
|
||||
await page.click('input[name=cardNumber]');
|
||||
await page.type('input[name=cardNumber]', utils.user.card);
|
||||
await page.click('input[name=cvc]');
|
||||
await page.type('input[name=cvc]', utils.user.cvv);
|
||||
await page.click('input[name=expiry]');
|
||||
await page.type('input[name=expiry]', utils.user.expiryDate);
|
||||
await page.click('input[name=address1]');
|
||||
await page.type('input[name=address1]', utils.user.address.streetA);
|
||||
await page.click('input[name=address2]');
|
||||
await page.type('input[name=address2]', utils.user.address.streetB);
|
||||
await page.click('input[name=city]');
|
||||
await page.type('input[name=city]', utils.user.address.city);
|
||||
await page.click('input[name=state]');
|
||||
await page.type('input[name=state]', utils.user.address.state);
|
||||
await page.click('input[name=zipCode]');
|
||||
await page.type('input[name=zipCode]', utils.user.address.zipcode);
|
||||
await page.select('#country', 'India');
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(15000);
|
||||
await page.goto(utils.ACCOUNTS_URL + '/login');
|
||||
await page.waitForSelector('#login-button');
|
||||
await page.click('input[name=email]');
|
||||
await page.type('input[name=email]', utils.user.email);
|
||||
await page.click('input[name=password]');
|
||||
await page.type('input[name=password]', utils.user.password);
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(10000);
|
||||
var localStorageData = await page.evaluate(() => {
|
||||
var json = {};
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
const key = localStorage.key(i);
|
||||
json[key] = localStorage.getItem(key);
|
||||
}
|
||||
return json;
|
||||
});
|
||||
localStorageData.should.have.property('sessionID');
|
||||
localStorageData.should.have.property('access_token');
|
||||
localStorageData.should.have.property('email', utils.user.email);
|
||||
page.url().should.containEql(utils.DASHBOARD_URL);
|
||||
}, 160000);
|
||||
})
|
||||
25
smoke-test/api-docs.test.js
Normal file
25
smoke-test/api-docs.test.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const utils= require('./test-utils');
|
||||
const puppeteer = require('puppeteer');
|
||||
|
||||
var page, browser;
|
||||
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
})
|
||||
|
||||
describe('Check api-docs up', () => {
|
||||
test('should get title of api docs page', async () => {
|
||||
await page.goto(utils.APIDOCS_URL, {
|
||||
waitUntil: 'domcontentloaded'
|
||||
});
|
||||
const response = await page.$eval('head > title', (e) => {
|
||||
return e.innerHTML;
|
||||
});
|
||||
expect(response).toBe('Fyipe API Documentation');
|
||||
})
|
||||
})
|
||||
25
smoke-test/backend.test.js
Normal file
25
smoke-test/backend.test.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const utils = require('./test-utils');
|
||||
const puppeteer = require('puppeteer');
|
||||
|
||||
var page, browser;
|
||||
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
});
|
||||
|
||||
describe('Check Backend', () => {
|
||||
test('should get status ok from backend', async () => {
|
||||
await page.goto(utils.BACKEND_URL, {
|
||||
waitUntil: 'networkidle0'
|
||||
});
|
||||
const response = await page.$eval('body > pre', (e) => {
|
||||
return e.innerHTML;
|
||||
});
|
||||
expect(response).toBe('{"status":200,"message":"Service Status - OK"}');
|
||||
});
|
||||
});
|
||||
136
smoke-test/dashboard.test.js
Normal file
136
smoke-test/dashboard.test.js
Normal file
@@ -0,0 +1,136 @@
|
||||
const puppeteer = require('puppeteer');
|
||||
var should = require('should');
|
||||
var utils = require('./test-utils');
|
||||
|
||||
var browser, page, userCredentials;
|
||||
|
||||
describe('Monitor API', () => {
|
||||
const operationTimeOut = 50000;
|
||||
|
||||
beforeAll(async () => {
|
||||
jest.setTimeout(150000);
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
await page.setUserAgent('Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36');
|
||||
|
||||
// intercept request and mock response for login
|
||||
await page.setRequestInterception(true);
|
||||
await page.on('request', async (request)=>{
|
||||
if((await request.url()).match(/user\/login/)){
|
||||
request.respond({
|
||||
status: 200,
|
||||
contentType: 'application/json',
|
||||
body: JSON.stringify(userCredentials)
|
||||
});
|
||||
}else{
|
||||
request.continue();
|
||||
}
|
||||
});
|
||||
await page.on('response', async (response)=>{
|
||||
try{
|
||||
const res = await response.json();
|
||||
if(res && res.tokens){
|
||||
userCredentials = res;
|
||||
}
|
||||
}catch(error){}
|
||||
});
|
||||
});
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
|
||||
});
|
||||
|
||||
it('Should login valid User', async () => {
|
||||
await page.goto(utils.ACCOUNTS_URL + '/register', { waitUntil: 'networkidle2' });
|
||||
await page.waitForSelector('#email');
|
||||
await page.click('input[name=email]');
|
||||
await page.type('input[name=email]', utils.user.email);
|
||||
await page.click('input[name=name]');
|
||||
await page.type('input[name=name]', utils.user.name);
|
||||
await page.click('input[name=companyName]');
|
||||
await page.type('input[name=companyName]', utils.user.company.name);
|
||||
await page.click('input[name=companyPhoneNumber]');
|
||||
await page.type('input[name=companyPhoneNumber]', utils.user.phone);
|
||||
await page.click('input[name=password]');
|
||||
await page.type('input[name=password]', utils.user.password);
|
||||
await page.click('input[name=confirmPassword]');
|
||||
await page.type('input[name=confirmPassword]', utils.user.password);
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(10000);
|
||||
await page.waitForSelector('#cardName');
|
||||
await page.click('input[name=cardName]');
|
||||
await page.type('input[name=cardName]', utils.user.name);
|
||||
await page.click('input[name=cardNumber]');
|
||||
await page.type('input[name=cardNumber]', utils.user.card);
|
||||
await page.click('input[name=cvc]');
|
||||
await page.type('input[name=cvc]', utils.user.cvv);
|
||||
await page.click('input[name=expiry]');
|
||||
await page.type('input[name=expiry]', utils.user.expiryDate);
|
||||
await page.click('input[name=address1]');
|
||||
await page.type('input[name=address1]', utils.user.address.streetA);
|
||||
await page.click('input[name=address2]');
|
||||
await page.type('input[name=address2]', utils.user.address.streetB);
|
||||
await page.click('input[name=city]');
|
||||
await page.type('input[name=city]', utils.user.address.city);
|
||||
await page.click('input[name=state]');
|
||||
await page.type('input[name=state]', utils.user.address.state);
|
||||
await page.click('input[name=zipCode]');
|
||||
await page.type('input[name=zipCode]', utils.user.address.zipcode);
|
||||
await page.select('#country', 'India');
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(15000);
|
||||
await page.goto(utils.ACCOUNTS_URL + '/login');
|
||||
await page.waitForSelector('#login-button');
|
||||
await page.click('input[name=email]');
|
||||
await page.type('input[name=email]', utils.user.email);
|
||||
await page.click('input[name=password]');
|
||||
await page.type('input[name=password]', utils.user.password);
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(10000);
|
||||
var localStorageData = await page.evaluate(() => {
|
||||
var json = {};
|
||||
for (var i = 0; i < localStorage.length; i++) {
|
||||
const key = localStorage.key(i);
|
||||
json[key] = localStorage.getItem(key);
|
||||
}
|
||||
return json;
|
||||
});
|
||||
localStorageData.should.have.property('sessionID');
|
||||
localStorageData.should.have.property('access_token');
|
||||
localStorageData.should.have.property('email', utils.user.email);
|
||||
page.url().should.containEql(utils.DASHBOARD_URL);
|
||||
}, 160000);
|
||||
|
||||
it('Should create new monitor with correct details', async () => {
|
||||
let monitorName = utils.generateRandomString();
|
||||
await page.waitForSelector('#monitors');
|
||||
await page.click('#monitors');
|
||||
await page.waitForSelector('#frmNewMonitor');
|
||||
await page.click('input[id=name]');
|
||||
await page.type('input[id=name]', monitorName);
|
||||
await page.select('select[name=type_1000]','url');
|
||||
await page.waitForSelector('#url');
|
||||
await page.click('#url');
|
||||
await page.type('#url', 'https://google.com');
|
||||
await page.click('button[type=submit]');
|
||||
await page.waitFor(5000);
|
||||
let spanElement;
|
||||
spanElement = await page.$('span.ContentHeader-title.Text-color--dark.Text-display--inline.Text-fontSize--20.Text-fontWeight--regular.Text-lineHeight--28.Text-typeface--base.Text-wrap--wrap');
|
||||
spanElement = await spanElement.getProperty('innerText');
|
||||
spanElement = await spanElement.jsonValue();
|
||||
spanElement.should.be.exactly(monitorName);
|
||||
|
||||
}, operationTimeOut);
|
||||
|
||||
it('Should delete monitor', async () => {
|
||||
await page.waitForSelector('#name');
|
||||
await page.evaluate(() => {
|
||||
document.querySelector('div.Box-root div.db-Trends-header div.db-Trends-controls div button.bs-Button.bs-DeprecatedButton.db-Trends-editButton.bs-Button--icon.bs-Button--delete').click();
|
||||
});
|
||||
await page.evaluate(() => {
|
||||
document.querySelector('button.bs-DeprecatedButton:nth-child(2)').click();
|
||||
});
|
||||
|
||||
}, operationTimeOut);
|
||||
});
|
||||
129
smoke-test/home.test.js
Executable file
129
smoke-test/home.test.js
Executable file
@@ -0,0 +1,129 @@
|
||||
const puppeteer = require('puppeteer')
|
||||
const util = require('./test-utils')
|
||||
|
||||
|
||||
var page, browser;
|
||||
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch(util.puppeteerLaunchConfig)
|
||||
page = await browser.newPage()
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close()
|
||||
})
|
||||
|
||||
describe('Request demo', () => {
|
||||
test('user can submit request a demo form', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/demo`)
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.type('#message', util.user.message)
|
||||
await page.click('#request-demo-btn')
|
||||
await page.waitForSelector('#success')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
test('user can request for website monitoring resource', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/resources`)
|
||||
await page.waitForSelector('#website-monitoring')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#website-monitoring'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
test('user can request for speed equals revenue resource', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/resources`)
|
||||
await page.waitForSelector('#speed-revenue')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#speed-revenue'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
test('user can request for best practices resource', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/resources`)
|
||||
await page.waitForSelector('#best-practices')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#best-practices'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
test('user can request for peak performance resource', async () => {
|
||||
await page.goto(`${util.HOME_URL}/enterprise/resources`)
|
||||
await page.waitForSelector('#peak-performance')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#peak-performance'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', util.user.name)
|
||||
await page.type('#email', util.user.email)
|
||||
await page.type('#Phone', util.user.phone)
|
||||
await page.type('#website', util.user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(util.user.email)
|
||||
}, 30000)
|
||||
})
|
||||
@@ -1,3 +0,0 @@
|
||||
const smoketest = require('./smokeTest.test')
|
||||
|
||||
smoketest.smokeTest()
|
||||
4475
smoke-test/package-lock.json
generated
Normal file
4475
smoke-test/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
18
smoke-test/package.json
Normal file
18
smoke-test/package.json
Normal file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"name": "smoke-test",
|
||||
"version": "1.0.0",
|
||||
"description": "Smoke tests for fyipe",
|
||||
"main": "index.test.js",
|
||||
"scripts": {
|
||||
"test": "jest --runInBand ."
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"faker": "^4.1.0",
|
||||
"jest": "^24.7.1",
|
||||
"puppeteer": "^1.17.0",
|
||||
"should": "^13.2.3"
|
||||
}
|
||||
}
|
||||
@@ -1,215 +0,0 @@
|
||||
module.exports = {
|
||||
smokeTest: () => {
|
||||
const faker = require('faker')
|
||||
const puppeteer = require('puppeteer')
|
||||
|
||||
const user = {
|
||||
name: faker.name.findName(),
|
||||
email: faker.internet.email(),
|
||||
website: 'www.testcompanyfyipe.com',
|
||||
company: faker.company.companyName(),
|
||||
companySize: 8,
|
||||
message: faker.company.catchPhraseDescriptor(),
|
||||
}
|
||||
|
||||
let page
|
||||
let browser
|
||||
const baseURL = 'http://localhost:1444'
|
||||
|
||||
// Enable for live viewing of tests.
|
||||
/* beforeAll(async () => {
|
||||
const width = 1200
|
||||
const height = 720
|
||||
browser = await puppeteer.launch(
|
||||
{
|
||||
headless: false,
|
||||
slowMo: 60,
|
||||
arg: [`--window-size=${width},${height}`],
|
||||
},
|
||||
)
|
||||
page = await browser.newPage()
|
||||
await page.setViewport({ width, height })
|
||||
}) */
|
||||
|
||||
// Run this for headless testing with puppeteer.
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch()
|
||||
page = await browser.newPage()
|
||||
})
|
||||
|
||||
afterAll(() => {
|
||||
browser.close()
|
||||
})
|
||||
|
||||
describe('Request demo', () => {
|
||||
test('user can submit request a demo form', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/demo`)
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.type('#message', user.message)
|
||||
await page.click('#request-demo-btn')
|
||||
await page.waitForSelector('#success')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can request for website monitoring resource', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/resources`)
|
||||
await page.waitForSelector('#website-monitoring')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#website-monitoring'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can request for speed equals revenue resource', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/resources`)
|
||||
await page.waitForSelector('#speed-revenue')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#speed-revenue'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can request for best practices resource', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/resources`)
|
||||
await page.waitForSelector('#best-practices')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#best-practices'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can request for peak performance resource', async () => {
|
||||
await page.goto(`${baseURL}/enterprise/resources`)
|
||||
await page.waitForSelector('#peak-performance')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#peak-performance'),
|
||||
])
|
||||
await page.waitForSelector('#form-section')
|
||||
await page.type('#fullname', user.name)
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#website', user.website)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#volume')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#request-resource-btn')
|
||||
// Check if user's email is submitted successfully
|
||||
const emailSubmitted = await page.evaluate(() => document.querySelector('.submitted-email').innerText)
|
||||
expect(emailSubmitted).toBe(user.email)
|
||||
}, 30000)
|
||||
test('user can signup for a fyipe account and logout', async () => {
|
||||
await page.goto(baseURL)
|
||||
await page.waitForSelector('#create-account-top')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#create-account-top'),
|
||||
])
|
||||
await page.waitForSelector('#main-body')
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#name', user.name)
|
||||
await page.type('#password', user.password)
|
||||
await page.type('#confirmPassword', user.password)
|
||||
await page.click('#create-account-button')
|
||||
await page.waitForSelector('#card-form')
|
||||
await page.type('#cardName', user.name)
|
||||
await page.type('#cardNumber', user.cardNumber)
|
||||
await page.type('#cvv', user.cvv)
|
||||
await page.type('#expiry', user.expiry)
|
||||
await page.type('#address1', user.address1)
|
||||
await page.type('#address2', user.address2)
|
||||
await page.type('#city', user.city)
|
||||
await page.type('#state', user.state)
|
||||
await page.type('#zipCode', user.zipCode)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#create-account-button')
|
||||
await page.waitForSelector('#companyName')
|
||||
await page.type('#companyName', user.company)
|
||||
await page.type('#companyRole', user.companyRole)
|
||||
await page.click('#country')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.click('#companySize')
|
||||
await page.keyboard.press('ArrowDown')
|
||||
await page.keyboard.down('Enter')
|
||||
await page.type('#companyPhoneNumber', user.companyPhoneNumber)
|
||||
await page.type('#reference', user.reference)
|
||||
await page.click('#create-account-button')
|
||||
await page.waitForNavigation()
|
||||
await page.click('#profile-menu')
|
||||
await page.click('#logout-button')
|
||||
await page.waitForSelector('#login')
|
||||
}, 60000)
|
||||
test('user can login to and logout of fyipe', async () => {
|
||||
await page.goto(baseURL)
|
||||
await page.waitForSelector('#sign-in')
|
||||
await Promise.all([
|
||||
page.waitForNavigation(),
|
||||
page.click('#sign-in'),
|
||||
])
|
||||
await page.waitFor(5000)
|
||||
await page.waitForSelector('#login')
|
||||
await page.type('#email', user.email)
|
||||
await page.type('#password', user.password)
|
||||
await page.click('#login-button')
|
||||
await page.waitForNavigation()
|
||||
await page.click('#profile-menu')
|
||||
await page.click('#logout-button')
|
||||
await page.waitForSelector('#login')
|
||||
}, 30000)
|
||||
})
|
||||
},
|
||||
}
|
||||
25
smoke-test/status-page.test.js
Normal file
25
smoke-test/status-page.test.js
Normal file
@@ -0,0 +1,25 @@
|
||||
const utils= require('./test-utils');
|
||||
const puppeteer = require('puppeteer');
|
||||
|
||||
var page, browser;
|
||||
|
||||
beforeAll(async () => {
|
||||
browser = await puppeteer.launch(utils.puppeteerLaunchConfig);
|
||||
page = await browser.newPage();
|
||||
})
|
||||
|
||||
afterAll(async () => {
|
||||
await browser.close();
|
||||
})
|
||||
|
||||
describe('Check status-page up', () => {
|
||||
test('should load status page and show login screen', async () => {
|
||||
await page.goto(utils.STATUSPAGE_URL, {
|
||||
waitUntil: 'domcontentloaded'
|
||||
});
|
||||
const response = await page.$eval('#login-button > span', (e) => {
|
||||
return e.innerHTML;
|
||||
});
|
||||
expect(response).toBe('Sign in to your account');
|
||||
})
|
||||
})
|
||||
47
smoke-test/test-utils.js
Normal file
47
smoke-test/test-utils.js
Normal file
@@ -0,0 +1,47 @@
|
||||
const faker = require('faker')
|
||||
|
||||
var user = faker.helpers.createCard();
|
||||
user.email = generateRandomBusinessEmail();
|
||||
user.password = generatePassword();
|
||||
user.card = '4111111111111111';
|
||||
user.cvv = '100';
|
||||
user.expiryDate = '12/23';
|
||||
user.message = 'Test message'
|
||||
|
||||
const puppeteerLaunchConfig = {
|
||||
headless: true,
|
||||
args: [
|
||||
'--no-sandbox',
|
||||
'--disable-setuid-sandbox',
|
||||
]
|
||||
}
|
||||
|
||||
const HOME_URL = process.env.HOME_URL ? 'http://home:1444' : 'http://localhost:1444';
|
||||
const ACCOUNTS_URL = process.env.ACCOUNTS_URL ? 'http://accounts:3003' : 'http://localhost:3003';
|
||||
const DASHBOARD_URL = process.env.DASHBOARD_URL ? 'http://dashboard:3000' : 'http://localhost:3000';
|
||||
const BACKEND_URL = process.env.BACKEND_URL ? 'http://backend:3002' : 'http://localhost:3002';
|
||||
const STATUSPAGE_URL = process.env.STATUSPAGE_URL ? 'http://status-page:3006' : 'http://localhost:3006';
|
||||
const APIDOCS_URL = process.env.APIDOCS_URL ? 'http://api-docs:1445' : 'http://localhost:1445';
|
||||
|
||||
|
||||
function generateRandomBusinessEmail() {
|
||||
return Math.random().toString(36).substring(8) + '@' + Math.random().toString(24).substring(8) + '.com'
|
||||
}
|
||||
function generatePassword() {
|
||||
return Math.random().toString(36).substring(7);
|
||||
}
|
||||
function generateRandomString() {
|
||||
return faker.lorem.word();
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
HOME_URL,
|
||||
ACCOUNTS_URL,
|
||||
DASHBOARD_URL,
|
||||
BACKEND_URL,
|
||||
STATUSPAGE_URL,
|
||||
APIDOCS_URL,
|
||||
user,
|
||||
puppeteerLaunchConfig,
|
||||
generateRandomString
|
||||
}
|
||||
Reference in New Issue
Block a user