Skip to content

Commit b38127a

Browse files
authored
Merge pull request #4 from hadiindrawan/dev
optimize check dir function
2 parents 32a0af0 + a81122b commit b38127a

File tree

7 files changed

+109
-183
lines changed

7 files changed

+109
-183
lines changed

lib/component/helper.js

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,44 @@
1-
import fs from "fs"
1+
import fs from "fs";
22
import isFileExisted from "../utils/check_dir.js";
33
import basePath from "../utils/base_path.js";
44

55
// Asynchronous function to write data into directory
66
async function writeHelper() {
7-
// create helper directory if it doesn't exists
8-
const helperDir = "tests/helper";
9-
fs.mkdirSync(helperDir, { recursive: true });
7+
// create helper directory if it doesn't exists
8+
const helperDir = "tests/helper";
9+
fs.mkdirSync(helperDir, { recursive: true });
1010

11-
// Check if a file named 'request.helper.js' exists in the tests/helper dir
12-
// If it does not exist then create a new file based on the template file 'requestHelper.dot'
13-
await isFileExisted("tests", "request.helper.js", function (data) {
14-
if (!data[0] && data[1] == "tests/helper") {
15-
fs.writeFile(
16-
"tests/helper/request.helper.js",
17-
fs.readFileSync(basePath() + "lib/template/requestHelper.dot", "utf8"),
18-
function (err) {
19-
if (err) throw err;
20-
}
21-
);
22-
}
23-
});
11+
// Check if a file named 'request.helper.js' exists in the tests/helper dir
12+
// If it does not exist then create a new file based on the template file 'requestHelper.dot'
13+
isFileExisted("tests/helper", "request.helper.js")
14+
.then((data) => {
15+
if (!data[0]) {
16+
fs.writeFile(
17+
"tests/helper/request.helper.js",
18+
fs.readFileSync(basePath() + "lib/template/requestHelper.dot", "utf8"),
19+
function (err) {
20+
if (err) throw err;
21+
}
22+
)
23+
}
24+
})
25+
.catch((err) => console.log(err));
2426

25-
// Check if a file named 'general.helper.js' exists in the tests/helper dir
26-
// If it does not exist then create a new file based on the template file 'generalHelper.dot'
27-
await isFileExisted("tests", "general.helper.js", function (data) {
28-
if (!data[0] && data[1] == "tests/helper") {
29-
fs.writeFile(
30-
"tests/helper/general.helper.js",
31-
fs.readFileSync(basePath() + "lib/template/generalHelper.dot", "utf8"),
32-
function (err) {
33-
if (err) throw err;
34-
}
35-
);
36-
}
37-
});
27+
// Check if a file named 'general.helper.js' exists in the tests/helper dir
28+
// If it does not exist then create a new file based on the template file 'generalHelper.dot'
29+
isFileExisted("tests/helper", "general.helper.js")
30+
.then((data) => {
31+
if (!data[0]) {
32+
fs.writeFile(
33+
"tests/helper/general.helper.js",
34+
fs.readFileSync(basePath() + "lib/template/generalHelper.dot", "utf8"),
35+
function (err) {
36+
if (err) throw err;
37+
}
38+
);
39+
}
40+
})
41+
.catch((err) => console.log(err));
3842
}
3943

40-
export default writeHelper
44+
export default writeHelper;

lib/component/json_schema.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,21 @@ import basePath from "../utils/base_path.js"
44

55
// Json schema file generator
66
async function writeJsonSchema(element, jsonSchemaPath) {
7+
// The following code creates a variable called 'name' and assigns it the value obtained from the 'name' property of the 'element' object, which is then converted to lowercase and all spaces in it are removed.
78
let name = (element.name).toLowerCase().replace(/\s/g, '');
89
name = name.replace(/\//g, '');
9-
let method = element.request.method
10-
10+
// A variable called 'method' is created and assigned the value obtained from the 'method' property of the 'element.request' object.
11+
let method = element.request.method;
1112
// check if file exists
12-
await isFileExisted('tests', method + '_' +name + '.json', function(data) {
13-
if (!data[0] && data[1] == jsonSchemaPath) {
14-
// create file test
15-
fs.writeFile(jsonSchemaPath + '/' + method + '_' +name + '.json',
16-
fs.readFileSync(basePath() + 'lib/template/json_responses.dot', 'utf8'), function (err) { if (err) throw err; });
17-
}
18-
})
13+
isFileExisted(jsonSchemaPath, method + '_' + name + '.json')
14+
.then((data) => {
15+
if (!data[0]) {
16+
// create file test
17+
fs.writeFile(jsonSchemaPath + '/' + method + '_' +name + '.json',
18+
fs.readFileSync(basePath() + 'lib/template/json_responses.dot', 'utf8'), function (err) { if (err) throw err; });
19+
}
20+
})
21+
.catch((err) => console.log(err));
1922
}
2023

2124
export default writeJsonSchema

lib/component/pages.js

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -142,22 +142,26 @@ async function writePages(element, path, jsonSchemaRelativePath, helperPath, mai
142142
await waitFor(50);
143143

144144
// check if pages file exists
145-
await isFileExisted('tests/pages', 'main.pages.js', function(data) {
146-
if (!data[0] && data[1] == path) {
147-
// create file test
148-
fs.writeFile('tests/pages/main.pages.js',
149-
fs.readFileSync(basePath() + 'lib/template/mainPages.dot', 'utf8'), function (err) { if (err) throw err; });
150-
}
151-
})
145+
isFileExisted(path, 'main.pages.js')
146+
.then((data) => {
147+
if (!data[0]) {
148+
// create file test
149+
fs.writeFile('tests/pages/main.pages.js',
150+
fs.readFileSync(basePath() + 'lib/template/mainPages.dot', 'utf8'), function (err) { if (err) throw err; });
151+
}
152+
})
153+
.catch((err) => console.log(err))
152154

153155
// check if pages file exists
154-
await isFileExisted('tests', method + '_' +name + '.js', function(data) {
155-
if (!data[0] && data[1] == path) {
156-
// create file test
157-
fs.writeFile(path + '/' + method + '_' +name + '.js',
158-
code, function (err) { if (err) throw err; });
159-
}
160-
})
156+
isFileExisted(path, method + '_' + name + '.js')
157+
.then((data) => {
158+
if (!data[0]) {
159+
// create file test
160+
fs.writeFile(path + '/' + method + '_' + name + '.js',
161+
code, function (err) { if (err) throw err; });
162+
}
163+
})
164+
.catch((err) => console.log(err));
161165
}
162166

163167
export default writePages

lib/component/runner.js

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,26 @@ async function writeRunner(element, testPath, runPath) {
3737
await waitFor(10)
3838

3939
// check if file exists
40-
await isFileExisted('runner', name + '.js', function(data) {
41-
if (!data[0] && data[1] == runPath) {
42-
// create write runner content
43-
if (runner.includes('require'))
44-
fs.writeFile(runPath + '/' + name + '.js', runner, function (err) { if (err) throw err ; });
45-
}
46-
})
40+
isFileExisted(runPath, name + '.js')
41+
.then((data) => {
42+
if (!data[0]) {
43+
// create write runner content
44+
if (runner.includes('require'))
45+
fs.writeFile(runPath + '/' + name + '.js', runner, function (err) { if (err) throw err ; });
46+
}
47+
})
48+
.catch(err => console.log(err));
4749

4850
// check if file exists
49-
await isFileExisted('runner', 'regression.js', function(data) {
50-
if (!data[0] && data[1] == runPath) {
51+
isFileExisted(runPath, 'regression.js')
52+
.then((data) => {
53+
if (!data[0]) {
5154
// create write runner content
52-
if (runner.includes('require'))
53-
fs.writeFile('runner/regression.js', '// Write your suite test runner here', function (err) { if (err) throw err ; });
54-
}
55-
})
55+
if (runner.includes('require'))
56+
fs.writeFile('runner/regression.js', '// Write your suite test runner here', function (err) { if (err) throw err ; });
57+
}
58+
})
59+
.catch(err => console.log(err));
5660
}
5761

5862
export default writeRunner

lib/component/tests.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,20 +64,20 @@ let data = [
6464

6565

6666
// check if file exists
67-
await isFileExisted('tests', method + '_' +name + '.spec.js', function(data) {
68-
if (!data[0] && data[1] == path) {
69-
// _postman_isSubFolder
70-
console.log(`${'\x1b[32m'}ø Generate Test ${path + '/' + method + '_' + name + '.spec.js'} completed successfully${'\x1b[0m'}`)
71-
// create file test
72-
fs.writeFile(path + '/' + method + '_' +name + '.spec.js',
73-
code, function (err) { if (err) throw err; });
74-
} else {
75-
if(data[0] && data[1] == path) {
76-
// file existed
77-
console.log(`${'\x1b[33m'}ø The request of ${element.name} has already created${'\x1b[0m'}`)
78-
}
79-
}
80-
})
67+
isFileExisted(path, method + '_' + name + '.spec.js')
68+
.then((data) => {
69+
if (!data[0]) {
70+
// _postman_isSubFolder
71+
console.log(`${'\x1b[32m'}ø Generate Test ${path + '/' + method + '_' + name + '.spec.js'} completed successfully${'\x1b[0m'}`)
72+
// create file test
73+
fs.writeFile(path + '/' + method + '_' + name + '.spec.js',
74+
code, function (err) { if (err) throw err; });
75+
} else {
76+
// file was existed
77+
console.log(`${'\x1b[33m'}ø The request of ${element.name} has already created${'\x1b[0m'}`)
78+
}
79+
})
80+
.catch(err => console.log(err));
8181
}
8282

8383
export default writeTest

lib/utils/base_path.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
function basePath() {
2-
const env = 'prod'
3-
if(env == 'dev') {
4-
return ''
5-
} else {
6-
return './node_modules/dot-generator-testing/'
7-
}
2+
const env = 'dev'
3+
return env == 'dev' ? '' : './node_modules/dot-generator-mocha/'
84
}
95

106
export default basePath

lib/utils/check_dir.js

Lines changed: 11 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,17 @@
11
import fs from 'fs'
22

3-
// check if any file exist
4-
async function isFileExisted(path, fileName, res) {
5-
const data = fs.readdirSync(path)
6-
7-
if(data.includes(fileName)) {
8-
res([true,path])
9-
} else {
10-
res([false,path])
11-
data.forEach((path1) => {
12-
if(!path1.includes('.')) {
13-
let path2 = path+'/'+path1
14-
const data1 = fs.readdirSync(path2)
15-
if(data1.includes(fileName)) {
16-
res([true,path2])
17-
} else {
18-
res([false,path2])
19-
data1.forEach((path2) => {
20-
if(!path2.includes('.')) {
21-
let path3 = path+'/'+path1+'/'+path2
22-
const data2 = fs.readdirSync(path3)
23-
if(data2.includes(fileName)) {
24-
res([true,path3])
25-
} else {
26-
res([false,path3])
27-
data2.forEach((path3) => {
28-
if(!path3.includes('.')) {
29-
let path4 = path+'/'+path1+'/'+path2+'/'+path3
30-
const data3 = fs.readdirSync(path4)
31-
if(data3.includes(fileName)) {
32-
res([true,path4])
33-
} else {
34-
res([false,path4])
35-
data3.forEach((path4) => {
36-
if(!path4.includes('.')) {
37-
let path5 = path+'/'+path1+'/'+path2+'/'+path3+'/'+path4
38-
const data4 = fs.readdirSync(path5)
39-
if(data4.includes(fileName)) {
40-
res([true,path5])
41-
} else {
42-
res([false,path5])
43-
data4.forEach((path5) => {
44-
if(!path5.includes('.')) {
45-
let path6 = path+'/'+path1+'/'+path2+'/'+path3+'/'+path4+'/'+path5
46-
const data5 = fs.readdirSync(path6)
47-
if(data5.includes(fileName)) {
48-
res([true,path6])
49-
} else {
50-
res([false,path6])
51-
data5.forEach((path6) => {
52-
if(!path6.includes('.')) {
53-
let path7 = path+'/'+path1+'/'+path2+'/'+path3+'/'+path4+'/'+path5+'/'+path6
54-
const data6 = fs.readdirSync(path7)
55-
if(data6.includes(fileName)) {
56-
res([true,path7])
57-
} else {
58-
res([false,path7])
59-
data6.forEach((path7) => {
60-
if(!path7.includes('.')) {
61-
let path8 = path+'/'+path1+'/'+path2+'/'+path3+'/'+path4+'/'+path5+'/'+path6+'/'+path7
62-
const data7 = fs.readdirSync(path8)
63-
if(data7.includes(fileName)) {
64-
res([true,path8])
65-
} else {
66-
res([false,path8])
67-
data7.forEach((path8) => {
68-
if(!path8.includes('.')) {
69-
let path9 = path+'/'+path1+'/'+path2+'/'+path3+'/'+path4+'/'+path5+'/'+path6+'/'+path7+'/'+path8
70-
const data8 = fs.readdirSync(path9)
71-
if(data8.includes(fileName)) {
72-
res([true,path9])
73-
} else {
74-
res([false,path9])
75-
}
76-
}
77-
})
78-
}
79-
}
80-
})
81-
}
82-
}
83-
})
84-
}
85-
}
86-
})
87-
}
88-
}
89-
})
90-
}
91-
}
92-
})
93-
}
94-
}
95-
})
96-
}
97-
}
98-
})
3+
async function isFileExisted(path, fileName) {
4+
const data = fs.readdirSync(path);
5+
for (let file of data) {
6+
const curPath = path + '/' + file;
7+
if (fs.statSync(curPath).isDirectory()) {
8+
const res = await isFileExisted(curPath, fileName);
9+
if (res[0]) return [true, res[1]];
10+
} else if (file === fileName) {
11+
return [true, curPath];
12+
}
9913
}
14+
return [false, null];
10015
}
10116

10217
export default isFileExisted

0 commit comments

Comments
 (0)