Skip to content

Commit

Permalink
Merge branch 'update-node-on-redesign' into main-ar-redesign
Browse files Browse the repository at this point in the history
  • Loading branch information
kryswisnaskas committed Oct 10, 2022
2 parents e3b3601 + 9ab7a34 commit da5095f
Show file tree
Hide file tree
Showing 14 changed files with 2,263 additions and 1,763 deletions.
14 changes: 10 additions & 4 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -254,12 +254,18 @@ jobs:
command: yarn db:seed:ci
- run:
name: Test backend
command: yarn test:ci
- store_test_results:
path: reports/
command: |
chmod 744 ./bin/test-backend-ci
./bin/test-backend-ci
- run:
name: Compress coverage artifacts
command: tar -cvzf backend-coverage-artifacts.tar coverage/
- store_artifacts:
path: coverage/

- store_artifacts:
path: backend-coverage-artifacts.tar
- store_test_results:
path: reports/
test_frontend:
executor: docker-executor
steps:
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ junit.xml
reports
yarn-error.log
docs/circleci/test_report.md
lcov.info

# Ignore /doc => /docs symbolic link created for adr-tools
/doc
Expand Down
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
FROM node:16.17.0
WORKDIR /app
RUN apt-get update && apt-get install lcov -y
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@ You may run into some issues running the docker commands on Windows:
* If you run into `Permission Denied` errors see [this issue](https://github.com/docker/for-win/issues/3385#issuecomment-501931980)
* You can try to speed up execution time on windows with solutions posted to [this issue](https://github.com/docker/for-win/issues/1936)

### Coverage reports

On the frontend, the lcov and HTML files are generated as normal, however on the backend, the folders are tested separately. The command `yarn coverage:backend` will concatenate the lcov files and also generate an HTML file. However, this provess requires `lcov` to be installed on a user's computer. On Apple, you can use Homebrew - `brew install lcov`. On a Windows machine, your path may vary, but two options include WSL and [this chocolatey package](https://community.chocolatey.org/packages/lcov).

## Yarn Commands

| Docker Command | Description| Host Command | Local only Command |
Expand All @@ -118,6 +122,7 @@ You may run into some issues running the docker commands on Windows:
| | Run `yarn lint:ci` for both the frontend and backend | `yarn lint:all`| |
| | Host the open api 3 spec using [redoc](https://github.com/Redocly/redoc) at `localhost:5003` | `yarn docs:serve` | |
| | Run cucumber tests | `yarn cucumber` | |
| | Collect backend coverage report | `yarn coverage:backend` ||

## Infrastructure

Expand Down
27 changes: 27 additions & 0 deletions bin/build-coverage-report
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/bash

main(){
# start collecting our coverage files
coverage_files=("coverage/src/root/lcov.info")

# then list through the folders and run the tests
targets=("lib" "middleware" "models" "policies" "routes" "scopes" "services" "tools" "widgets")

for target in "${targets[@]}"; do
coverage_files+=("coverage/src/$target/lcov.info")
done

# concatenate all the coverage files into one
for f in "${coverage_files[@]}"; do
cat "$f" >> lcov.info
done

# generate the html report
if lcov -v; then
genhtml lcov.info --output-directory coverage
else
echo "lcov not found. Please install lcov to generate coverage report"
fi
}

main
91 changes: 78 additions & 13 deletions bin/run-tests
Original file line number Diff line number Diff line change
Expand Up @@ -80,19 +80,84 @@ main() {
fi

if [[ "$opt" == "backend" || -z "$opt" ]]; then
# Test backend
command="yarn test:ci --colors"
if [ $verbose == "false" ]; then
command="yarn test:ci --silent --colors"
fi
echo
log "Running backend tests"
if [[ $docker == "true" ]]; then
docker exec test-backend bash -c "$command"
else
$command
fi
check_exit "$?"
# Test backend
echo
log "Running backend tests"

# remove existing coverage folder, since we are changing how things are structured
rm -rf coverage

# first get the tests in the root directory
node_modules/.bin/cross-env \
JEST_JUNIT_OUTPUT_DIR=reports \
JEST_JUNIT_OUTPUT_NAME=unit.xml \
POSTGRES_USERNAME=postgres \
POSTGRES_DB=ttasmarthub \
CURRENT_USER_ID=5 \
CI=true \
node \
--expose-gc \
./node_modules/.bin/jest \
src/*.js \
--coverage \
--colors \
--reporters=jest-junit \
--reporters=default \
--runInBand \
--silent \
--colors \
--logHeapUsage \
--coverageDirectory="$(pwd)"/coverage/src/root \
--collectCoverageFrom=src/*.js \
--forceExit

if [[ $docker == "true" ]]; then
docker exec test-backend bash -c "$command"
else
$command
fi

check_exit "$?"

# then list through the folders and run the tests
targets=("lib" "middleware" "models" "policies" "routes" "scopes" "services" "tools" "widgets")

for target in "${targets[@]}"; do
# jest command to
# - run tests in the target folder
# - collect coverage from the target folder
# - output coverage relative to the target folder
# - some other useful flags
node_modules/.bin/cross-env \
JEST_JUNIT_OUTPUT_DIR=reports \
JEST_JUNIT_OUTPUT_NAME=unit.xml \
POSTGRES_USERNAME=postgres \
POSTGRES_DB=ttasmarthub \
CURRENT_USER_ID=5 \
CI=true \
node \
--expose-gc \
./node_modules/.bin/jest \
src/"$target" \
--coverage \
--colors \
--reporters=jest-junit \
--reporters=default \
--runInBand \
--silent \
--colors \
--logHeapUsage \
--coverageDirectory="$(pwd)"/coverage/src/"$target" \
--collectCoverageFrom=src/"$target"/**/*.js \
--forceExit

if [[ $docker == "true" ]]; then
docker exec test-backend bash -c "$command"
else
$command
fi
check_exit "$?"
done
fi

if [[ "$opt" == "frontend" || -z "$opt" ]]; then
Expand Down
63 changes: 63 additions & 0 deletions bin/test-backend-ci
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
#!/bin/bash

main(){
# first get the tests in the root directory
node_modules/.bin/cross-env \
JEST_JUNIT_OUTPUT_DIR=reports \
JEST_JUNIT_OUTPUT_NAME=root.xml \
POSTGRES_USERNAME=postgres \
POSTGRES_DB=ttasmarthub \
CURRENT_USER_ID=5 \
CI=true \
node \
--expose-gc \
./node_modules/.bin/jest \
src/*.js \
--coverage \
--colors \
--reporters=jest-junit \
--reporters=default \
--runInBand \
--silent \
--colors \
--logHeapUsage \
--coverageDirectory="$(pwd)"/coverage/src/root \
--collectCoverageFrom=src/*.js \
--forceExit

# then list through the folders and run the tests
targets=("lib" "middleware" "models" "policies" "routes" "scopes" "services" "tools" "widgets")

for target in "${targets[@]}"; do
# jest command to
# - run tests in the target folder
# - collect coverage from the target folder
# - output coverage relative to the target folder
# - some other useful flags

node_modules/.bin/cross-env \
JEST_JUNIT_OUTPUT_DIR=reports \
JEST_JUNIT_OUTPUT_NAME="$target".xml \
POSTGRES_USERNAME=postgres \
POSTGRES_DB=ttasmarthub \
CURRENT_USER_ID=5 \
CI=true \
node \
--expose-gc \
./node_modules/.bin/jest \
src/"$target" \
--coverage \
--colors \
--reporters=jest-junit \
--reporters=default \
--runInBand \
--silent \
--colors \
--logHeapUsage \
--coverageDirectory="$(pwd)"/coverage/src/"$target" \
--collectCoverageFrom=src/"$target"/**/*.js \
--forceExit
done
}

main
8 changes: 4 additions & 4 deletions frontend/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1709,7 +1709,7 @@
hoist-non-react-statics "^3.3.2"
popper.js "1.16.1-lts"
prop-types "^15.7.2"
react-is "^16.8.0 || ^16.17.0"
react-is "^16.8.0 || ^17.0.0"
react-transition-group "^4.4.0"

"@material-ui/icons@^4.11.2":
Expand Down Expand Up @@ -1763,7 +1763,7 @@
dependencies:
"@babel/runtime" "^7.4.4"
prop-types "^15.7.2"
react-is "^16.8.0 || ^16.17.0"
react-is "^16.8.0 || ^17.0.0"

"@nodelib/fs.scandir@2.1.5":
version "2.1.5"
Expand Down Expand Up @@ -9661,12 +9661,12 @@ react-input-autosize@^3.0.0:
dependencies:
prop-types "^15.5.8"

react-is@^16.13.1, react-is@^16.5.2, react-is@^16.6.0, react-is@^16.7.0, "react-is@^16.8.0 || ^16.17.0":
react-is@^16.13.1, react-is@^16.5.2, react-is@^16.6.0, react-is@^16.7.0:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==

react-is@^17.0.1, react-is@^17.0.2:
"react-is@^16.8.0 || ^17.0.0", react-is@^17.0.1, react-is@^17.0.2:
version "17.0.2"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
Expand Down
40 changes: 30 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
"server:debug": "nodemon --inspect=0.0.0.0:9229 src/index.js --exec babel-node",
"client": "yarn --cwd frontend start",
"test": "jest src --runInBand",
"test:ci": "cross-env JEST_JUNIT_OUTPUT_DIR=reports JEST_JUNIT_OUTPUT_NAME=unit.xml POSTGRES_USERNAME=postgres POSTGRES_DB=ttasmarthub CURRENT_USER_ID=5 CI=true jest src --coverage --reporters=default --reporters=jest-junit --runInBand",
"test:ci": "./bin/test-backend-ci",
"test:all": "yarn test:ci && yarn --cwd frontend test:ci",
"lint": "eslint src",
"lint:ci": "eslint -f eslint-formatter-multiple src",
Expand Down Expand Up @@ -81,7 +81,9 @@
"changeReportStatus:local": "./node_modules/.bin/babel-node ./src/tools/changeReportStatusCLI.js",
"makecolors": "node ./src/makecolors.js",
"restoreTopics": "node ./build/server/tools/restoreTopicsCLI.js",
"restoreTopics:local": "./node_modules/.bin/babel-node ./src/tools/restoreTopicsCLI.js"
"restoreTopics:local": "./node_modules/.bin/babel-node ./src/tools/restoreTopicsCLI.js",
"coverage:backend": "./bin/build-coverage-report",
"docker:coverage:backend": "docker compose run --rm backend chmod 744 ./bin/build-coverage-report && ./bin/build-coverage-report"
},
"repository": {
"type": "git",
Expand All @@ -101,7 +103,8 @@
"node-fetch": "^2.6.7",
"protobufjs": "^6.11.3",
"got": "^11.8.5",
"undici": "^5.8.0"
"undici": "^5.8.0",
"selenium-webdriver": "4.3.0"
},
"eslintConfig": {
"extends": [
Expand Down Expand Up @@ -130,18 +133,35 @@
},
"jest": {
"testPathIgnorePatterns": [
"<rootDir>/frontend/"
"<rootDir>/frontend/",
"<rootDir>node_modules/",
"<rootDir>/build/",
"<rootDir>/src/makecolors.js",
"<rootDir>/src/newrelic.js",
"<rootDir>/src/testUtils.js",
"<rootDir>/src/logger.js",
"<rootDir>/src/*/coverage/",
"<rootDir>/src/coverage/"
],
"testTimeout": 30000,
"coveragePathIgnorePatterns": [
"<rootDir>/src/middleware/newRelicMiddleware.js"
"<rootDir>/src/middleware/newRelicMiddleware.js",
"<rootDir>/frontend/",
"<rootDir>node_modules",
"<rootDir>/build/",
"<rootDir>/src/makecolors.js",
"<rootDir>/src/newrelic.js",
"<rootDir>/src/testUtils.js",
"<rootDir>/src/logger.js",
"<rootDir>/src/*/coverage/",
"<rootDir>/src/coverage/"
],
"coverageThreshold": {
"global": {
"statements": 85,
"functions": 70,
"branches": 70,
"lines": 85
"statements": 39,
"functions": 12,
"branches": 29,
"lines": 40
}
}
},
Expand Down Expand Up @@ -184,7 +204,7 @@
"puppeteer": "^13.1.1",
"puppeteer-select": "^1.0.3",
"redoc-cli": "^0.13.2",
"selenium-webdriver": "4.0.0",
"selenium-webdriver": "4.3.0",
"supertest": "^6.1.3"
},
"dependencies": {
Expand Down
14 changes: 6 additions & 8 deletions src/models/tests/auditModelGenerator.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -189,14 +189,12 @@ describe('Audit System', () => {
throw (err);
}

expect(routines)
.toEqual([
{ name: 'ZALFTests' },
{ name: 'ZALNoDeleteFTests' },
{ name: 'ZALNoTruncateFTests' },
{ name: 'ZALNoUpdateFTests' },
{ name: 'ZALTruncateFTests' },
]);
const routineNames = routines.map((routine) => routine.name);
expect(routineNames).toContain('ZALFTests');
expect(routineNames).toContain('ZALNoDeleteFTests');
expect(routineNames).toContain('ZALNoTruncateFTests');
expect(routineNames).toContain('ZALNoUpdateFTests');
expect(routineNames).toContain('ZALTruncateFTests');

const hooks = [
'beforeBulkCreate',
Expand Down
3 changes: 3 additions & 0 deletions src/routes/activityReports/handlers.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,9 @@ jest.mock('../../services/activityReports', () => ({
jest.mock('../../services/objectives', () => ({
saveObjectivesForReport: jest.fn(),
getObjectivesByReportId: jest.fn(),
}));

jest.mock('../../services/userSettings', () => ({
userSettingOverridesById: jest.fn(),
}));

Expand Down
2 changes: 1 addition & 1 deletion src/scopes/goals/index.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -575,7 +575,7 @@ describe('goal filtersToScopes', () => {
});

expect(found.length).toBe(6);
expect(found[0].name).toContain('Goal 1');
expect(found.map((f) => f.name)).toContain('Goal 1');
});

it('filters out by region', async () => {
Expand Down

0 comments on commit da5095f

Please sign in to comment.