Skip to content

Commit

Permalink
Update fakeHelpers for GitHub API
Browse files Browse the repository at this point in the history
  • Loading branch information
harveysanders committed Feb 2, 2024
1 parent d145136 commit 55a8b89
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 62 deletions.
37 changes: 2 additions & 35 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

36 changes: 29 additions & 7 deletions test/helpers/fakeHelpers.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const fs = require('node:fs/promises');
const {
dummyUser,
dummyAuth,
Expand All @@ -6,6 +7,7 @@ const {
dummyTestFail
} = require('./dummyData');

const { TEST_GITHUB_TOKEN } = process.env;
module.exports.home = () => './test/files';

module.exports.createClient = () => dummyUser;
Expand All @@ -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}'`;

Expand All @@ -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}'`;

Expand Down
30 changes: 20 additions & 10 deletions test/test-asd.js
Original file line number Diff line number Diff line change
Expand Up @@ -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';

Expand All @@ -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}`;
Expand All @@ -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) {
Expand Down Expand Up @@ -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;
Expand Down
37 changes: 27 additions & 10 deletions test/test-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ const changeCase = require('change-case');

const fakeHelpers = require('./helpers/fakeHelpers');

const { TEST_GITHUB_TOKEN } = process.env;
const {
dummySession,
dummyTestPass,
Expand All @@ -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';

Expand Down Expand Up @@ -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;

Expand Down

0 comments on commit 55a8b89

Please sign in to comment.