Skip to content

Commit e6c6b3e

Browse files
authored
Merge pull request #45 from Pythagora-io/refactoring-export
Refactoring export
2 parents 2bdefc1 + 07297e6 commit e6c6b3e

File tree

3 files changed

+149
-116
lines changed

3 files changed

+149
-116
lines changed

src/bin/run.bash

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ do
109109
exit 0
110110
elif [[ "${args[$i]}" == "--export" ]]
111111
then
112-
PYTHAGORA_CONFIG="$@" node "./node_modules/${pythagora_dir}/src/commands/export.js"
112+
PYTHAGORA_CONFIG="$@" node -e "require('./node_modules/${pythagora_dir}/src/commands/export.js').runExport()"
113113
exit 0
114114
elif [[ "${args[$i]}" == "--mode" ]]
115115
then

src/commands/export.js

Lines changed: 15 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -1,133 +1,29 @@
11
const fs = require('fs');
2-
const path = require('path');
32
const {
43
EXPORTED_TESTS_DIR,
5-
EXPORTED_TESTS_DATA_DIR,
64
PYTHAGORA_METADATA_DIR,
7-
METADATA_FILENAME,
85
EXPORT_METADATA_FILENAME,
9-
SRC_TO_ROOT
106
} = require('../const/common');
11-
const {getAllGeneratedTests, updateMetadata} = require("../utils/common");
12-
const {convertOldTestForGPT} = require("../utils/legacy");
13-
const {setUpPythagoraDirs} = require("../helpers/starting");
7+
const { getAllGeneratedTests } = require("../utils/common");
8+
const { convertOldTestForGPT } = require("../utils/legacy");
9+
const { setUpPythagoraDirs } = require("../helpers/starting");
1410
const {
1511
logAndExit,
16-
testExported,
17-
pleaseCaptureLoginTestLog,
18-
enterLoginRouteLog,
1912
testEligibleForExportLog,
20-
testExportStartedLog
2113
} = require("../utils/cmdPrint");
2214
const {
23-
getJestAuthFunction,
24-
getJestTest,
25-
getJestTestName,
2615
isEligibleForExport,
2716
checkForAPIKey
2817
} = require("../helpers/api");
29-
const _ = require('lodash');
3018
const args = require('../utils/getArgs.js');
19+
const {
20+
createDefaultFiles,
21+
cleanupDataFolder,
22+
exportTest,
23+
testExists,
24+
} = require('../helpers/exports');
3125

32-
async function createDefaultFiles(generatedTests) {
33-
if (!fs.existsSync('jest.config.js')) {
34-
fs.copyFileSync(path.join(__dirname, '../templates/jest-config.js'), './jest.config.js');
35-
}
36-
37-
if (!fs.existsSync(`./${EXPORTED_TESTS_DIR}/jest-global-setup.js`)) {
38-
fs.copyFileSync(path.join(__dirname, '../templates/jest-global-setup.js'), `./${EXPORTED_TESTS_DIR}/global-setup.js`);
39-
}
40-
41-
if (!fs.existsSync(`./${EXPORTED_TESTS_DIR}/auth.js`)) {
42-
await configureAuthFile(generatedTests);
43-
}
44-
}
45-
46-
async function configureAuthFile(generatedTests) {
47-
// TODO make require path better
48-
let pythagoraMetadata = require(`../${SRC_TO_ROOT}.pythagora/${METADATA_FILENAME}`);
49-
let loginPath = _.get(pythagoraMetadata, 'exportRequirements.login.endpointPath');
50-
let loginRequestBody = _.get(pythagoraMetadata, 'exportRequirements.login.requestBody');
51-
let loginMongoQueries = _.get(pythagoraMetadata, 'exportRequirements.login.mongoQueriesArray');
52-
53-
if (!loginPath) {
54-
enterLoginRouteLog();
55-
process.exit(1);
56-
}
57-
58-
if (!loginRequestBody || !loginMongoQueries) {
59-
let loginTest = generatedTests.find(t => t.endpoint === loginPath && t.method !== 'OPTIONS');
60-
if (loginTest) {
61-
_.set(pythagoraMetadata, 'exportRequirements.login.mongoQueriesArray', loginTest.intermediateData.filter(d => d.type === 'mongodb'));
62-
_.set(pythagoraMetadata, 'exportRequirements.login.requestBody', loginTest.body);
63-
updateMetadata(pythagoraMetadata);
64-
} else {
65-
pleaseCaptureLoginTestLog(loginPath);
66-
process.exit(1);
67-
}
68-
}
69-
70-
let loginData = pythagoraMetadata.exportRequirements.login;
71-
let code = await getJestAuthFunction(loginData.mongoQueriesArray, loginData.requestBody, loginData.endpointPath);
72-
73-
fs.writeFileSync(`./${EXPORTED_TESTS_DIR}/auth.js`, code);
74-
}
75-
76-
function configurePrepareDbFile() {
77-
// TODO
78-
}
79-
80-
function cleanupDataFolder() {
81-
const pythagoraTestsFolderPath = `./${EXPORTED_TESTS_DIR}`;
82-
const dataFolderPath = `./${EXPORTED_TESTS_DATA_DIR}`;
83-
84-
try {
85-
// Read the files in the ./pythagora_tests/data folder
86-
const files = fs.readdirSync(dataFolderPath);
87-
88-
files.forEach((file) => {
89-
const filePathInPythagoraTests = path.join(pythagoraTestsFolderPath, file.replace('.json', '.test.js'));
90-
91-
// Check if the file exists in the pythagora_tests folder
92-
if (!fs.existsSync(filePathInPythagoraTests)) {
93-
// File doesn't exist in the pythagora_tests folder, so delete it from the data folder
94-
const filePathInData = path.join(dataFolderPath, file);
95-
fs.unlinkSync(filePathInData);
96-
}
97-
});
98-
} catch (err) {
99-
// console.error('Error deleting files from the data folder:', err);
100-
}
101-
}
102-
103-
async function exportTest(originalTest, exportsMetadata) {
104-
testExportStartedLog();
105-
let test = convertOldTestForGPT(originalTest);
106-
let jestTest = await getJestTest(test);
107-
let testName = await getJestTestName(jestTest, Object.values(exportsMetadata).map(obj => obj.testName));
108-
if (!jestTest && !testName) return console.error('There was issue with getting GPT response. Make sure you have access to GPT4 with your API key.');
109-
110-
fs.writeFileSync(`./${EXPORTED_TESTS_DATA_DIR}/${testName.replace('.test.js', '.json')}`, JSON.stringify(test.mongoQueries, null, 2));
111-
fs.writeFileSync(`./${EXPORTED_TESTS_DIR}/${testName}`, jestTest.replace(test.testId, testName));
112-
113-
testExported(testName);
114-
saveExportJson(exportsMetadata, originalTest, testName);
115-
116-
}
117-
118-
function testExists(exportsMetadata, testId) {
119-
return !!exportsMetadata[testId] && exportsMetadata[testId].testName && fs.existsSync(`./${EXPORTED_TESTS_DIR}/${exportsMetadata[testId].testName}`)
120-
}
121-
122-
function saveExportJson(exportsMetadata, test, testName) {
123-
exportsMetadata[test.id] = {
124-
endpoint: test.endpoint,
125-
testName
126-
};
127-
fs.writeFileSync(`./${PYTHAGORA_METADATA_DIR}/${EXPORT_METADATA_FILENAME}`, JSON.stringify(exportsMetadata));
128-
}
129-
130-
(async () => {
26+
async function runExport() {
13127
checkForAPIKey();
13228
setUpPythagoraDirs();
13329
cleanupDataFolder();
@@ -162,4 +58,8 @@ function saveExportJson(exportsMetadata, test, testName) {
16258
}
16359

16460
process.exit(0);
165-
})()
61+
};
62+
63+
module.exports = {
64+
runExport
65+
};

src/helpers/exports.js

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
const fs = require('fs');
2+
const path = require('path');
3+
const {
4+
EXPORTED_TESTS_DIR,
5+
EXPORTED_TESTS_DATA_DIR,
6+
PYTHAGORA_METADATA_DIR,
7+
METADATA_FILENAME,
8+
EXPORT_METADATA_FILENAME,
9+
SRC_TO_ROOT
10+
} = require('../const/common');
11+
const { updateMetadata } = require("../utils/common");
12+
const { convertOldTestForGPT } = require("../utils/legacy");
13+
const {
14+
testExported,
15+
pleaseCaptureLoginTestLog,
16+
enterLoginRouteLog,
17+
testExportStartedLog
18+
} = require("../utils/cmdPrint");
19+
const {
20+
getJestAuthFunction,
21+
getJestTest,
22+
getJestTestName,
23+
cleanupGPTResponse,
24+
} = require("./api");
25+
const _ = require('lodash');
26+
const args = require('../utils/getArgs.js');
27+
28+
async function createDefaultFiles(generatedTests) {
29+
if (!fs.existsSync('jest.config.js')) {
30+
fs.copyFileSync(path.join(__dirname, '../templates/jest-config.js'), './jest.config.js');
31+
}
32+
33+
if (!fs.existsSync(`./${EXPORTED_TESTS_DIR}/jest-global-setup.js`)) {
34+
fs.copyFileSync(path.join(__dirname, '../templates/jest-global-setup.js'), `./${EXPORTED_TESTS_DIR}/global-setup.js`);
35+
}
36+
37+
if (!fs.existsSync(`./${EXPORTED_TESTS_DIR}/auth.js`)) {
38+
await configureAuthFile(generatedTests);
39+
}
40+
}
41+
42+
async function configureAuthFile(generatedTests) {
43+
// TODO make require path better
44+
let pythagoraMetadata = require(`../${SRC_TO_ROOT}.pythagora/${METADATA_FILENAME}`);
45+
let loginPath = _.get(pythagoraMetadata, 'exportRequirements.login.endpointPath');
46+
let loginRequestBody = _.get(pythagoraMetadata, 'exportRequirements.login.requestBody');
47+
let loginMongoQueries = _.get(pythagoraMetadata, 'exportRequirements.login.mongoQueriesArray');
48+
49+
if (!loginPath) {
50+
enterLoginRouteLog();
51+
process.exit(1);
52+
}
53+
54+
if (!loginRequestBody || !loginMongoQueries) {
55+
let loginTest = generatedTests.find(t => t.endpoint === loginPath && t.method !== 'OPTIONS');
56+
if (loginTest) {
57+
_.set(pythagoraMetadata, 'exportRequirements.login.mongoQueriesArray', loginTest.intermediateData.filter(d => d.type === 'mongodb'));
58+
_.set(pythagoraMetadata, 'exportRequirements.login.requestBody', loginTest.body);
59+
updateMetadata(pythagoraMetadata);
60+
} else {
61+
pleaseCaptureLoginTestLog(loginPath);
62+
process.exit(1);
63+
}
64+
}
65+
66+
let loginData = pythagoraMetadata.exportRequirements.login;
67+
let code = await getJestAuthFunction(loginData.mongoQueriesArray, loginData.requestBody, loginData.endpointPath);
68+
69+
fs.writeFileSync(`./${EXPORTED_TESTS_DIR}/auth.js`, code);
70+
}
71+
72+
function configurePrepareDbFile() {
73+
// TODO
74+
}
75+
76+
function cleanupDataFolder() {
77+
const pythagoraTestsFolderPath = `./${EXPORTED_TESTS_DIR}`;
78+
const dataFolderPath = `./${EXPORTED_TESTS_DATA_DIR}`;
79+
80+
try {
81+
// Read the files in the ./pythagora_tests/data folder
82+
const files = fs.readdirSync(dataFolderPath);
83+
84+
files.forEach((file) => {
85+
const filePathInPythagoraTests = path.join(pythagoraTestsFolderPath, file.replace('.json', '.test.js'));
86+
87+
// Check if the file exists in the pythagora_tests folder
88+
if (!fs.existsSync(filePathInPythagoraTests)) {
89+
// File doesn't exist in the pythagora_tests folder, so delete it from the data folder
90+
const filePathInData = path.join(dataFolderPath, file);
91+
fs.unlinkSync(filePathInData);
92+
}
93+
});
94+
} catch (err) {
95+
// console.error('Error deleting files from the data folder:', err);
96+
}
97+
}
98+
99+
async function exportTest(originalTest, exportsMetadata) {
100+
testExportStartedLog();
101+
let test = convertOldTestForGPT(originalTest);
102+
let jestTest = await getJestTest(test);
103+
let testName = await getJestTestName(jestTest, Object.values(exportsMetadata).map(obj => obj.testName));
104+
if (!jestTest && !testName) return console.error('There was issue with getting GPT response. Make sure you have access to GPT4 with your API key.');
105+
106+
fs.writeFileSync(`./${EXPORTED_TESTS_DATA_DIR}/${testName.replace('.test.js', '.json')}`, JSON.stringify(test.mongoQueries, null, 2));
107+
fs.writeFileSync(`./${EXPORTED_TESTS_DIR}/${testName}`, jestTest.replace(test.testId, testName));
108+
109+
testExported(testName);
110+
saveExportJson(exportsMetadata, originalTest, testName);
111+
112+
}
113+
114+
function testExists(exportsMetadata, testId) {
115+
return !!exportsMetadata[testId] && exportsMetadata[testId].testName && fs.existsSync(`./${EXPORTED_TESTS_DIR}/${exportsMetadata[testId].testName}`)
116+
}
117+
118+
function saveExportJson(exportsMetadata, test, testName) {
119+
exportsMetadata[test.id] = {
120+
endpoint: test.endpoint,
121+
testName
122+
};
123+
fs.writeFileSync(`./${PYTHAGORA_METADATA_DIR}/${EXPORT_METADATA_FILENAME}`, JSON.stringify(exportsMetadata));
124+
}
125+
126+
module.exports = {
127+
createDefaultFiles,
128+
configureAuthFile,
129+
cleanupDataFolder,
130+
exportTest,
131+
testExists,
132+
saveExportJson
133+
};

0 commit comments

Comments
 (0)