From 55a8b892e89089f45a3ab2b33d451c13873f25da Mon Sep 17 00:00:00 2001 From: Harvey Sanders Date: Fri, 2 Feb 2024 22:24:49 +0000 Subject: [PATCH] Update fakeHelpers for GitHub API --- package-lock.json | 37 ++----------------------------------- test/helpers/fakeHelpers.js | 36 +++++++++++++++++++++++++++++------- test/test-asd.js | 30 ++++++++++++++++++++---------- test/test-test.js | 37 +++++++++++++++++++++++++++---------- 4 files changed, 78 insertions(+), 62 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8adcf52..2215c2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2045,20 +2045,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -2899,17 +2885,6 @@ "npm": ">=6" } }, - "node_modules/jsonwebtoken/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jsonwebtoken/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -2929,11 +2904,6 @@ "node": ">=10" } }, - "node_modules/jsonwebtoken/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", @@ -3153,7 +3123,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", - "dev": true, "dependencies": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -3974,8 +3943,7 @@ "node_modules/pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "node_modules/psl": { "version": "1.1.29", @@ -5092,8 +5060,7 @@ "node_modules/yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" } } } diff --git a/test/helpers/fakeHelpers.js b/test/helpers/fakeHelpers.js index bbbb48b..8ccf80f 100644 --- a/test/helpers/fakeHelpers.js +++ b/test/helpers/fakeHelpers.js @@ -1,3 +1,4 @@ +const fs = require('node:fs/promises'); const { dummyUser, dummyAuth, @@ -6,6 +7,7 @@ const { dummyTestFail } = require('./dummyData'); +const { TEST_GITHUB_TOKEN } = process.env; module.exports.home = () => './test/files'; module.exports.createClient = () => dummyUser; @@ -24,7 +26,8 @@ module.exports.grabLocalLogin = () => `echo ${dummyUser.login}`; module.exports.grabLocalAuthID = () => `echo ${dummyAuth.id}`; -module.exports.grabLocalAuthToken = () => `echo ${dummyAuth.token}`; +module.exports.grabLocalAuthToken = () => + `${TEST_GITHUB_TOKEN || dummyAuth.token}`; module.exports.createGistHelper = () => `echo '${dummyGistGood}'`; @@ -35,12 +38,31 @@ module.exports.readGistHelper = () => `echo ${dummyUser}`; module.exports.downloadProject = (url, token, directory) => `mkdir ${directory} ${directory}/.git ${directory}/.svn ${directory}/.master ${directory}/test`; -module.exports.downloadProjectTests = (url, token, directory) => - `mkdir ${directory}/test ${directory}/node_modules`; - -// package.json must be parse-able, so echoing an empty object into it -module.exports.downloadProjectPackage = (url, token, directory) => - `echo {} > ${directory}/package.json`; +module.exports.getClient = () => ({ + /** + * Mocks the behavior real method, which fetches the project tests from github. + * @param {string} url + * @param {string} directory + * @returns + */ + async downloadProjectTests(url, directory) { + return Promise.all([ + fs.mkdir(`${directory}/test`, { recursive: true }), + fs.mkdir(`${directory}/node_modules`, { recursive: true }) + ]); + }, + + /** + * Mocks the behavior real method, which fetches the project's package.json file. + * @param {string} url + * @param {string} directory + * @returns + */ + async downloadProjectPackage(url, directory) { + // package.json must be parse-able JSON, so writing an empty object into it + return fs.writeFile(`${directory}/package.json`, '{}', 'utf-8'); + } +}); module.exports.makeTestPass = () => `echo '${dummyTestPass}'`; diff --git a/test/test-asd.js b/test/test-asd.js index e932bd7..12db2b1 100644 --- a/test/test-asd.js +++ b/test/test-asd.js @@ -22,13 +22,23 @@ const projects = proxyquire('../controller/projects', { } }); -const test = proxyquire('../controller/test', { +const testModuleMockRequires = { './helpers': fakeHelpers, './github': fakeHelpers, + './github-api': fakeHelpers, './env': { home: fakeHelpers.home } -}); +}; + +// If TEST_GITHUB_TOKEN is set, use the real github-api, +// otherwise use mock the behavior with fakeHelpers +if (process.env.TEST_GITHUB_TOKEN) { + // @ts-ignore (must be optional) + delete testModuleMockRequires['./github-api']; +} + +const test = proxyquire('../controller/test', testModuleMockRequires); const projectsDirectory = './test/files/environment/projects'; @@ -43,7 +53,7 @@ describe('test', function () { // Should install tests for the selected project describe('#grabTests()', function () { - dummySessionAsd.PROJECT.forEach((project) => { + dummySessionAsd.PROJECT.forEach(project => { it(`should install tests for ${project.name}`, function (done) { const name = changeCase.paramCase(project.name); const path = `${projectsDirectory}/${name}`; @@ -64,24 +74,24 @@ describe('test', function () { const project = dummySessionAsd.PROJECT[0]; const passTests = proxyquire('../controller/test', { './helpers': { - makeTestScript: fakeHelpers.makeTestPass, + makeTestScript: fakeHelpers.makeTestPass }, './github': fakeHelpers, './env': { - home: fakeHelpers.home, + home: fakeHelpers.home }, - './reporter': fakeHelpers.reportPass, + './reporter': fakeHelpers.reportPass }).runTests; const failTests = proxyquire('../controller/test', { './helpers': { - makeTestScript: fakeHelpers.makeTestFail, + makeTestScript: fakeHelpers.makeTestFail }, './github': fakeHelpers, './env': { - home: fakeHelpers.home, + home: fakeHelpers.home }, - './reporter': fakeHelpers.reportFail, + './reporter': fakeHelpers.reportFail }).runTests; it('should run tests and find pass', function (done) { @@ -113,7 +123,7 @@ describe('test', function () { it('should return error if a project is not valid', function (done) { const invalidProject = { name: 'not-a-project', - path: './test/files/environment/projects/not-a-project', + path: './test/files/environment/projects/not-a-project' }; test.runTests(invalidProject).catch(function (err) { expect(err).to.exist; diff --git a/test/test-test.js b/test/test-test.js index 04b02f0..778ce7d 100644 --- a/test/test-test.js +++ b/test/test-test.js @@ -10,6 +10,7 @@ const changeCase = require('change-case'); const fakeHelpers = require('./helpers/fakeHelpers'); +const { TEST_GITHUB_TOKEN } = process.env; const { dummySession, dummyTestPass, @@ -22,13 +23,23 @@ const projects = proxyquire('../controller/projects', { } }); -const test = proxyquire('../controller/test', { +const testModuleMockRequires = { './helpers': fakeHelpers, './github': fakeHelpers, + './github-api': fakeHelpers, './env': { home: fakeHelpers.home } -}); +}; + +// If TEST_GITHUB_TOKEN is set, use the real github-api, +// otherwise use mock the behavior with fakeHelpers +if (TEST_GITHUB_TOKEN) { + // @ts-ignore (must be optional) + delete testModuleMockRequires['./github-api']; +} + +const test = proxyquire('../controller/test', testModuleMockRequires); const projectsDirectory = './test/files/environment/projects'; @@ -73,26 +84,32 @@ describe('test', function () { describe('#runTests()', function () { const project = dummySession.PROJECT[1]; + const defaultMockRequires = { + './github': fakeHelpers, + './github-api': fakeHelpers, + './env': { + home: fakeHelpers.home + } + }; + + if (TEST_GITHUB_TOKEN) { + // @ts-ignore (must be optional) + delete defaultMockRequires['./github-api']; + } const passTests = proxyquire('../controller/test', { + ...defaultMockRequires, './helpers': { makeTestScript: fakeHelpers.makeTestPass }, - './github': fakeHelpers, - './env': { - home: fakeHelpers.home - }, './reporter': fakeHelpers.reportPass }).runTests; const failTests = proxyquire('../controller/test', { + ...defaultMockRequires, './helpers': { makeTestScript: fakeHelpers.makeTestFail }, - './github': fakeHelpers, - './env': { - home: fakeHelpers.home - }, './reporter': fakeHelpers.reportFail }).runTests;