From 176e7de2112ef479681715353b9e825ea2cf99db Mon Sep 17 00:00:00 2001 From: Jo-9m-n1 Date: Sat, 10 Oct 2026 23:13:33 -0400 Subject: [PATCH] fix(hacker): stats 500 and resume auth; fix(test): Windows Mocha env - fix getStats age bug, reviewer buckets, cache and field aggregations - fix ensureAccountLinkedToHacker account ID comparison for resume routes - run tests with cross-env and NODE_ENV=test on npm test / test-windows - use account credentials in resume upload integration test --- middlewares/hacker.middleware.js | 3 +- package.json | 5 +-- services/hacker.service.js | 57 +++++++++++++++++++++++++++----- tests/hacker.test.js | 2 +- 4 files changed, 53 insertions(+), 14 deletions(-) diff --git a/middlewares/hacker.middleware.js b/middlewares/hacker.middleware.js index 1b288421..e31e408c 100644 --- a/middlewares/hacker.middleware.js +++ b/middlewares/hacker.middleware.js @@ -304,8 +304,7 @@ function ensureAccountLinkedToHacker(req, res, next) { if ( hacker && req.user && - String.toString(hacker.accountId) === - String.toString(req.user.id) + String(hacker.accountId) === String(req.user.id) ) { return next(); } else { diff --git a/package.json b/package.json index a74d424d..20c1a3c9 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,8 @@ "start-windows": "set DEBUG=hackboard:* && set NODE_ENV=test && nodemon --ignore gcp_creds.json ./bin/www.js", "deploy": "NODE_ENV=deployment node ./bin/www.js", "debug": "DEBUG=hackboard:* NODE_ENV=development nodemon --ignore gcp_creds.json ./bin/www.js", - "test": "DEBUG=hackboard:* NODE_ENV=development mocha -r dotenv/config --reporter spec tests/**.js --exit", - "test-windows": "DEBUG=hackboard:* SET NODE_ENV=development & mocha -r dotenv/config --reporter spec tests/**.js --exit", + "test": "cross-env DEBUG=hackboard:* NODE_ENV=test mocha -r dotenv/config --reporter spec tests/**.js --exit", + "test-windows": "cross-env DEBUG=hackboard:* NODE_ENV=test mocha -r dotenv/config --reporter spec tests/**.js --exit", "seed": "NODE_ENV=development node ./seed/index.js", "docs": "apidoc -i ./routes -o ./docs/api/", "format": "prettier --write '**/*.js'", @@ -49,6 +49,7 @@ "apidoc": "^1.2.0", "chai": "^4.4.1", "chai-http": "^4.4.0", + "cross-env": "^7.0.3", "eslint": "8.56.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-prettier": "5.1.3", diff --git a/services/hacker.service.js b/services/hacker.service.js index d63e0bc4..8bd67723 100644 --- a/services/hacker.service.js +++ b/services/hacker.service.js @@ -129,8 +129,9 @@ async function getStatsAllHackersCached() { .populate({ path: "accountId", }); + const stats = getStats(allHackers); cache.put(Constants.CACHE_KEY_STATS, stats, Constants.CACHE_TIMEOUT_STATS); //set a time-out of 5 minutes - return getStats(allHackers); + return stats; } /** @@ -160,6 +161,12 @@ function getStats(hackers) { const stats = { total: 0, status: {}, + reviewerStatus: {}, + reviewerStatus2: {}, + reviewerName: {}, + reviewerName2: {}, + reviewerComments: {}, + reviewerComments2: {}, school: {}, degree: {}, gender: {}, @@ -184,6 +191,35 @@ function getStats(hackers) { stats.status[hacker.status] = stats.status[hacker.status] ? stats.status[hacker.status] + 1 : 1; + stats.reviewerStatus[hacker.reviewerStatus] = stats.reviewerStatus[ + hacker.reviewerStatus + ] + ? stats.reviewerStatus[hacker.reviewerStatus] + 1 + : 1; + stats.reviewerStatus2[hacker.reviewerStatus2] = stats.reviewerStatus2[ + hacker.reviewerStatus2 + ] + ? stats.reviewerStatus2[hacker.reviewerStatus2] + 1 + : 1; + stats.reviewerName[hacker.reviewerName] = stats.reviewerName[ + hacker.reviewerName + ] + ? stats.reviewerName[hacker.reviewerName] + 1 + : 1; + stats.reviewerName2[hacker.reviewerName2] = stats.reviewerName2[ + hacker.reviewerName2 + ] + ? stats.reviewerName2[hacker.reviewerName2] + 1 + : 1; + stats.reviewerComments[hacker.reviewerComments] = stats.reviewerComments[ + hacker.reviewerComments + ] + ? stats.reviewerComments[hacker.reviewerComments] + 1 + : 1; + stats.reviewerComments2[hacker.reviewerComments2] = stats + .reviewerComments2[hacker.reviewerComments2] + ? stats.reviewerComments2[hacker.reviewerComments2] + 1 + : 1; stats.school[hacker.application.general.school] = stats.school[ hacker.application.general.school ] @@ -221,17 +257,19 @@ function getStats(hackers) { .jobInterest[hacker.application.general.jobInterest] ? stats.jobInterest[hacker.application.general.jobInterest] + 1 : 1; - stats.fieldOfStudy[hacker.application.general.fieldOfStudy] = stats - .fieldOfStudy[hacker.application.general.fieldOfStudy] - ? stats.fieldOfStudy[hacker.application.general.fieldOfStudy] + 1 - : 1; + for (const field of hacker.application.general.fieldOfStudy) { + stats.fieldOfStudy[field] = stats.fieldOfStudy[field] + ? stats.fieldOfStudy[field] + 1 + : 1; + } stats.graduationYear[hacker.application.general.graduationYear] = stats .graduationYear[hacker.application.general.graduationYear] ? stats.graduationYear[hacker.application.general.graduationYear] + 1 : 1; - for (const dietaryRestrictions of hacker.accountId - .dietaryRestrictions) { + const dietaryRestrictionsList = + hacker.accountId.dietaryRestrictions || []; + for (const dietaryRestrictions of dietaryRestrictionsList) { stats.dietaryRestrictions[dietaryRestrictions] = stats .dietaryRestrictions[dietaryRestrictions] ? stats.dietaryRestrictions[dietaryRestrictions] + 1 @@ -246,8 +284,9 @@ function getStats(hackers) { // const age = hacker.accountId.getAge(); // stats.age[age] = stats.age[age] ? stats.age[age] + 1 : 1; - stats.age[hacker.accountId.age] = stats.age[hacker.accountId.age] - ? stats.age[age] + 1 + const hackerAge = hacker.accountId.age; + stats.age[hackerAge] = stats.age[hackerAge] + ? stats.age[hackerAge] + 1 : 1; const applicationDate = hacker._id diff --git a/tests/hacker.test.js b/tests/hacker.test.js index 08b59fdb..1daf6948 100644 --- a/tests/hacker.test.js +++ b/tests/hacker.test.js @@ -1637,7 +1637,7 @@ describe("POST add a hacker resume", function() { }); it("It should SUCCEED and upload a resume for a hacker", function(done) { //this takes a lot of time for some reason - util.auth.login(agent, noTeamHacker0, (error) => { + util.auth.login(agent, noTeamHackerAccount0, (error) => { if (error) { return done(error); }