Skip to content

Commit bf058ee

Browse files
authored
Merge pull request #51 from Pythagora-io/paths
refactor paths to support monorepos
2 parents 1d73001 + 86a1e08 commit bf058ee

File tree

13 files changed

+59
-42
lines changed

13 files changed

+59
-42
lines changed

src/Pythagora.js

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ let { BatchInterceptor } = require('@mswjs/interceptors');
1818
let nodeInterceptors = require('@mswjs/interceptors/lib/presets/node.js');
1919
let fs = require("fs");
2020
let _ = require("lodash");
21+
const path = require('path');
2122
let { AsyncLocalStorage } = require('node:async_hooks');
2223
// const duplexify = require('duplexify');
2324

@@ -36,6 +37,7 @@ class Pythagora {
3637
this.ignore = args.ignore;
3738
this.fullCodeCoverageReport = args.full_code_coverage_report;
3839
this.initCommand = args.init_command.join(' ');
40+
this.pythagora_root = args.pythagora_root
3941

4042
this.idSeq = 0;
4143
this.requests = {};
@@ -77,7 +79,7 @@ class Pythagora {
7779
if (!result) {
7880
failedRequests.push(request.endpoint);
7981
console.log(`Capture is not valid for endpoint ${request.endpoint} (${request.method}). Erasing...`)
80-
let reqFileName = `./${PYTHAGORA_TESTS_DIR}/${request.endpoint.replace(/\//g, PYTHAGORA_DELIMITER)}.json`;
82+
let reqFileName = path.resolve(this.pythagora_root, PYTHAGORA_TESTS_DIR, `${request.endpoint.replace(/\//g, PYTHAGORA_DELIMITER)}.json`);
8183
if (!fs.existsSync(reqFileName)) continue;
8284
let fileContent = JSON.parse(fs.readFileSync(reqFileName));
8385
if (fileContent.length === 1) {
@@ -101,7 +103,7 @@ class Pythagora {
101103
logCaptureFinished(savedRequests.length, failedRequests.length);
102104
}
103105

104-
fs.writeFileSync(`./${PYTHAGORA_METADATA_DIR}/finishingup`, 'done');
106+
fs.writeFileSync(path.resolve(this.pythagora_root, PYTHAGORA_METADATA_DIR, 'finishingup'), 'done');
105107
process.exit();
106108
}
107109

@@ -128,7 +130,7 @@ class Pythagora {
128130
}]);
129131
this.metadata.runs = this.metadata.runs.slice(-10);
130132
this.metadata.initCommand = this.initCommand;
131-
fs.writeFileSync(`./${PYTHAGORA_METADATA_DIR}/${METADATA_FILENAME}`, JSON.stringify(this.metadata, getCircularReplacer(), 2));
133+
fs.writeFileSync(path.resolve(this.pythagora_root, PYTHAGORA_METADATA_DIR, METADATA_FILENAME), JSON.stringify(this.metadata, getCircularReplacer(), 2));
132134
console.log('Test run metadata saved.');
133135
}
134136

@@ -234,9 +236,9 @@ class Pythagora {
234236
}
235237

236238
async getRequestMockDataById(req) {
237-
let path = `./${PYTHAGORA_TESTS_DIR}/${req.path.replace(/\//g, PYTHAGORA_DELIMITER)}.json`;
238-
if (!fs.existsSync(path)) return;
239-
let capturedRequests = JSON.parse(await fs.promises.readFile(path, 'utf8'));
239+
let reqPath = path.resolve(this.pythagora_root, PYTHAGORA_TESTS_DIR, `${req.path.replace(/\//g, PYTHAGORA_DELIMITER)}.json`);
240+
if (!fs.existsSync(reqPath)) return;
241+
let capturedRequests = JSON.parse(await fs.promises.readFile(reqPath, 'utf8'));
240242
return capturedRequests.find(request => request.id === req.headers['pythagora-req-id']);
241243
}
242244

src/RunPythagoraTests.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ const { getCircularReplacer } = require('./utils/common.js')
44
const { PYTHAGORA_METADATA_DIR, REVIEW_DATA_FILENAME, PYTHAGORA_DELIMITER, PYTHAGORA_TESTS_DIR } = require('./const/common.js');
55

66
const fs = require('fs');
7+
const path = require('path');
78
const { exec } = require('child_process');
89
const {getAllGeneratedTests} = require("./utils/common");
910

@@ -39,7 +40,7 @@ async function runTests(tests, testsToExecute) {
3940
}
4041

4142
function updateReviewFile(testsToExecute, reviewData) {
42-
let reviewFilePath = `./${PYTHAGORA_METADATA_DIR}/${REVIEW_DATA_FILENAME}`;
43+
let reviewFilePath = path.resolve(Pythagora.pythagora_root, PYTHAGORA_METADATA_DIR, REVIEW_DATA_FILENAME);
4344
let oldReviewData = [];
4445

4546
if (testsToExecute && fs.existsSync(reviewFilePath)) {
@@ -58,7 +59,7 @@ function updateReviewFile(testsToExecute, reviewData) {
5859
let testsToExecute = Pythagora.getTestsToExecute();
5960
if (testsToExecute && !testsToExecute.length) throw new Error('There are no tests to execute. Check if you put arguments in Pythagora command correctly.');
6061

61-
Pythagora.testId ? logTestStarting(Pythagora.testId) : logTestsStarting(fs.readdirSync(`./${PYTHAGORA_TESTS_DIR}/`));
62+
Pythagora.testId ? logTestStarting(Pythagora.testId) : logTestsStarting(fs.readdirSync(path.resolve(Pythagora.pythagora_root, PYTHAGORA_TESTS_DIR)));
6263
pythagoraTests = pythagoraTests.filter(t => !testsToExecute || testsToExecute.includes(t.id));
6364
let { results, reviewData } = await runTests(pythagoraTests);
6465

src/bin/run.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ yellow=$(tput setaf 3)
99
green=$(tput setaf 2)
1010
reset=$(tput sgr0)
1111
bold=$(tput bold)
12-
pythagora_dir="$1"
12+
pythagora_dir="$2"
1313

1414
function exit_handler {
1515
while [ ! -f "./.pythagora/finishingup" ]

src/bin/run.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,11 @@ exec(bashCommand, (error, stdout, stderr) => {
4040
const bashScript = winOS ? process.argv[1].replace('run.js', 'run.bash') : path.join(__dirname, 'run.bash');
4141
const scriptDir = path.dirname(bashScript); // Get the directory of the bash script
4242
const pythagoraDir = path.dirname(path.dirname(scriptDir)); // Get the pythagora directory
43+
const pythagoraRoot = process.argv[1].split('node_modules')[0];
4344
const args = process.argv.slice(2);
4445

4546
// Run the bash script and forward all arguments
46-
const child = spawn(bashPath, [bashScript, pythagoraDir, ...args], { stdio: 'inherit' });
47+
const child = spawn(bashPath, [bashScript, ...['--pythagora-dir', pythagoraDir, '--pythagora-root', pythagoraRoot, ...args]], { stdio: 'inherit' });
4748

4849
child.on('error', (error) => {
4950
console.error(`Error running the bash script: ${error.message}`);

src/commands/export.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const fs = require('fs');
2+
const path = require('path');
23
const {
34
EXPORTED_TESTS_DIR,
45
PYTHAGORA_METADATA_DIR,
@@ -27,7 +28,7 @@ async function runExport() {
2728
checkForAPIKey();
2829
setUpPythagoraDirs();
2930
cleanupDataFolder();
30-
let exportsMetadata = JSON.parse(fs.readFileSync(`./${PYTHAGORA_METADATA_DIR}/${EXPORT_METADATA_FILENAME}`));
31+
let exportsMetadata = JSON.parse(fs.readFileSync(path.resolve(args.pythagora_root, PYTHAGORA_METADATA_DIR, EXPORT_METADATA_FILENAME)));
3132
let generatedTests = getAllGeneratedTests();
3233
await createDefaultFiles(generatedTests);
3334

@@ -62,4 +63,4 @@ async function runExport() {
6263

6364
module.exports = {
6465
runExport
65-
};
66+
};

src/helpers/exports.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,16 @@ async function configureAuthFile(generatedTests) {
6666
let loginData = pythagoraMetadata.exportRequirements.login;
6767
let code = await getJestAuthFunction(loginData.mongoQueriesArray, loginData.requestBody, loginData.endpointPath);
6868

69-
fs.writeFileSync(`./${EXPORTED_TESTS_DIR}/auth.js`, code);
69+
fs.writeFileSync(path.resolve(args.pythagora_root, EXPORTED_TESTS_DIR, 'auth.js'), code);
7070
}
7171

7272
function configurePrepareDbFile() {
7373
// TODO
7474
}
7575

7676
function cleanupDataFolder() {
77-
const pythagoraTestsFolderPath = `./${EXPORTED_TESTS_DIR}`;
78-
const dataFolderPath = `./${EXPORTED_TESTS_DATA_DIR}`;
77+
const pythagoraTestsFolderPath = path.resolve(args.pythagora_root, EXPORTED_TESTS_DIR);
78+
const dataFolderPath = path.resolve(args.pythagora_root, EXPORTED_TESTS_DATA_DIR);
7979

8080
try {
8181
// Read the files in the ./pythagora_tests/data folder
@@ -120,7 +120,7 @@ function saveExportJson(exportsMetadata, test, testName) {
120120
endpoint: test.endpoint,
121121
testName
122122
};
123-
fs.writeFileSync(`./${PYTHAGORA_METADATA_DIR}/${EXPORT_METADATA_FILENAME}`, JSON.stringify(exportsMetadata));
123+
fs.writeFileSync(path.resolve(args.pythagora_root, PYTHAGORA_METADATA_DIR, EXPORT_METADATA_FILENAME), JSON.stringify(exportsMetadata));
124124
}
125125

126126
module.exports = {

src/helpers/middlewares.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ const _ = require("lodash");
1111
let { executionAsyncId } = require('node:async_hooks');
1212
const fs = require('fs');
1313
const {logLoginEndpointCaptured} = require("../utils/cmdPrint");
14-
14+
const path = require('path');
1515

1616
function setUpExpressMiddlewares(app) {
1717

@@ -358,7 +358,7 @@ function saveCaptureToFile(reqData, pythagora) {
358358
reqData.pythagoraVersion = pythagora.version;
359359
reqData.pythagoraDevVersion = pythagora.devVersion;
360360
reqData.createdAt = new Date().toISOString();
361-
let endpointFileName = `./${PYTHAGORA_TESTS_DIR}/${reqData.endpoint.replace(/\//g, PYTHAGORA_DELIMITER)}.json`;
361+
let endpointFileName = path.resolve(pythagora.pythagora_root, PYTHAGORA_TESTS_DIR, `${reqData.endpoint.replace(/\//g, PYTHAGORA_DELIMITER)}.json`);
362362
if (!fs.existsSync(endpointFileName)) fs.writeFileSync(endpointFileName, JSON.stringify([reqData], getCircularReplacer(), 2));
363363
else {
364364
let fileContent = JSON.parse(fs.readFileSync(endpointFileName));

src/helpers/starting.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const {
99
METADATA_FILENAME,
1010
EXPORT_METADATA_FILENAME
1111
} = require("../const/common");
12+
let args = require('../utils/getArgs.js');
1213

1314

1415
function checkDependencies() {
@@ -48,6 +49,7 @@ function getPythagoraVersion(pythagora) {
4849
const filePath = path.resolve(dir, file);
4950
const fileStat = fs.statSync(filePath);
5051

52+
if (filePath.indexOf('pythagora') > -1 || filePath.indexOf('@pythagora.io') > -1 || filePath.indexOf('@types') > -1) return;
5153
if (fileStat.isDirectory() && file[0] !== '.' && file !== 'node_modules') {
5254
findPackageJson(filePath);
5355
} else if (file === "package.json") {
@@ -88,12 +90,13 @@ function startPythagora(args, app) {
8890
}
8991

9092
function setUpPythagoraDirs() {
91-
if (!fs.existsSync(`./${PYTHAGORA_TESTS_DIR}/`)) fs.mkdirSync(`./${PYTHAGORA_TESTS_DIR}/`);
92-
if (!fs.existsSync(`./${EXPORTED_TESTS_DIR}`)) fs.mkdirSync(`./${EXPORTED_TESTS_DIR}`);
93-
if (!fs.existsSync(`./${EXPORTED_TESTS_DATA_DIR}`)) fs.mkdirSync(`./${EXPORTED_TESTS_DATA_DIR}`);
94-
if (!fs.existsSync(`./${PYTHAGORA_METADATA_DIR}/`)) fs.mkdirSync(`./${PYTHAGORA_METADATA_DIR}/`);
95-
if (!fs.existsSync(`./${PYTHAGORA_METADATA_DIR}/${METADATA_FILENAME}`)) fs.writeFileSync(`./${PYTHAGORA_METADATA_DIR}/${METADATA_FILENAME}`, '{}');
96-
if (!fs.existsSync(`./${PYTHAGORA_METADATA_DIR}/${EXPORT_METADATA_FILENAME}`)) fs.writeFileSync(`./${PYTHAGORA_METADATA_DIR}/${EXPORT_METADATA_FILENAME}`, '{}');
93+
let root = args.pythagora_root;
94+
if (!fs.existsSync(path.resolve(root, PYTHAGORA_TESTS_DIR))) fs.mkdirSync(path.resolve(root, PYTHAGORA_TESTS_DIR));
95+
if (!fs.existsSync(path.resolve(root, EXPORTED_TESTS_DIR))) fs.mkdirSync(path.resolve(root, EXPORTED_TESTS_DIR));
96+
if (!fs.existsSync(path.resolve(root, EXPORTED_TESTS_DATA_DIR))) fs.mkdirSync(path.resolve(root, EXPORTED_TESTS_DATA_DIR));
97+
if (!fs.existsSync(path.resolve(root, PYTHAGORA_METADATA_DIR))) fs.mkdirSync(path.resolve(root, PYTHAGORA_METADATA_DIR));
98+
if (!fs.existsSync(path.resolve(root, PYTHAGORA_METADATA_DIR, METADATA_FILENAME))) fs.writeFileSync(path.resolve(root, PYTHAGORA_METADATA_DIR, METADATA_FILENAME), '{}');
99+
if (!fs.existsSync(path.resolve(root, PYTHAGORA_METADATA_DIR, EXPORT_METADATA_FILENAME))) fs.writeFileSync(path.resolve(root, PYTHAGORA_METADATA_DIR, EXPORT_METADATA_FILENAME), '{}');
97100
}
98101

99102
module.exports = {

src/scripts/deleteAllFailed.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
11
const fs = require('fs');
2+
const path = require('path');
23
const { REVIEW_DATA_FILENAME, PYTHAGORA_METADATA_DIR, PYTHAGORA_TESTS_DIR, METADATA_FILENAME, PYTHAGORA_DELIMITER } = require('../const/common.js');
34
const { getCircularReplacer } = require('../utils/common.js');
45
const { logAndExit } = require('../utils/cmdPrint.js');
6+
let args = require('../utils/getArgs.js');
57

6-
let metadata = fs.readFileSync(`./${PYTHAGORA_METADATA_DIR}/${METADATA_FILENAME}`);
8+
let metadata = fs.readFileSync(path.resolve(args.pythagora_root, PYTHAGORA_METADATA_DIR, METADATA_FILENAME));
79
metadata = JSON.parse(metadata);
810
if (!metadata || !metadata.runs || !metadata.runs.length ||
911
!metadata.runs[metadata.runs.length - 1].failed.length) return logAndExit('Previous test run had no failed tests. Nothing to delete, exiting...', 'log');
1012

1113
let deleteTests = metadata.runs[metadata.runs.length - 1].failed;
12-
let files = fs.readdirSync(`./${PYTHAGORA_TESTS_DIR}/`);
14+
let files = fs.readdirSync(path.resolve(args.pythagora_root, PYTHAGORA_TESTS_DIR));
1315

1416
try {
1517
files = files.filter(f => f[0] !== '.');
1618
for (let file of files) {
1719
if (file.indexOf(PYTHAGORA_DELIMITER) !== 0) continue;
18-
let tests = JSON.parse(fs.readFileSync(`./${PYTHAGORA_TESTS_DIR}/${file}`));
20+
let tests = JSON.parse(fs.readFileSync(path.resolve(args.pythagora_root, PYTHAGORA_TESTS_DIR, file)));
1921
let newTests = tests.filter((t) => !deleteTests.includes(t.id));
2022

21-
if (tests.length !== newTests.length) fs.writeFileSync(`./${PYTHAGORA_TESTS_DIR}/${file}`, JSON.stringify(newTests, getCircularReplacer(), 2));
23+
if (tests.length !== newTests.length) fs.writeFileSync(path.resolve(args.pythagora_root, PYTHAGORA_TESTS_DIR, file), JSON.stringify(newTests, getCircularReplacer(), 2));
2224
}
2325

2426
//cleanup review.json if all failed tests are deleted
25-
fs.writeFileSync(`./${PYTHAGORA_METADATA_DIR}/${REVIEW_DATA_FILENAME}`, '[]');
27+
fs.writeFileSync(path.resolve(args.pythagora_root, PYTHAGORA_METADATA_DIR, REVIEW_DATA_FILENAME), '[]');
2628

2729
logAndExit('Successfully deleted all failed tests!', 'log');
2830
} catch (e) {

src/scripts/deleteTest.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const fs = require('fs');
2+
const path = require('path');
23
const { PYTHAGORA_TESTS_DIR, PYTHAGORA_DELIMITER } = require('../const/common.js');
34
const { getCircularReplacer } = require('../utils/common.js');
45
const { logAndExit } = require('../utils/cmdPrint.js');
@@ -9,17 +10,18 @@ try {
910
let deleted = false;
1011

1112
if (typeof id !== 'string') logAndExit(`When using --delete flag with Pythagora you have to give test ID (of test you want to delete). Eg. --delete 390ca171-1d12-449c-b847-e215b07755e8`);
12-
let files = fs.readdirSync(`./${PYTHAGORA_TESTS_DIR}/`);
13+
let files = fs.readdirSync(path.resolve(args.pythagora_root, PYTHAGORA_TESTS_DIR));
1314

1415
files = files.filter(f => f[0] !== '.');
1516
for (let file of files) {
1617
if (file.indexOf(PYTHAGORA_DELIMITER) !== 0) continue;
17-
let tests = JSON.parse(fs.readFileSync(`./${PYTHAGORA_TESTS_DIR}/${file}`));
18+
let filePath =path.resolve(args.pythagora_root, PYTHAGORA_TESTS_DIR, file);
19+
let tests = JSON.parse(fs.readFileSync(filePath));
1820
let newTests = tests.filter((t) => t.id !== id);
1921

2022
if (tests.length !== newTests.length) {
2123
deleted = true;
22-
fs.writeFileSync(`./${PYTHAGORA_TESTS_DIR}/${file}`, JSON.stringify(newTests, getCircularReplacer(), 2));
24+
fs.writeFileSync(filePath, JSON.stringify(newTests, getCircularReplacer(), 2));
2325
}
2426
}
2527

0 commit comments

Comments
 (0)