@pega/custom-dx-components 0.242.35 → 0.242.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/src/cli.js +6 -0
- package/src/constants.js +1 -0
- package/src/tasks/build-lib/helper.js +0 -1
- package/src/tasks/create-lib/index.js +5 -3
- package/src/tasks/create-version/index.js +3 -1
- package/src/tasks/delete-lib/index.js +4 -1
- package/src/tasks/delete-version/index.js +3 -1
- package/src/tasks/export-archive/index.js +58 -41
- package/src/tasks/import-archive/index.js +5 -1
- package/src/tasks/import-comp/helper.js +2 -4
- package/src/tasks/import-comp/index.js +1 -2
- package/src/tasks/index.js +1 -0
- package/src/tasks/init/template/package.json.mustache +6 -5
- package/src/tasks/list/helper.js +8 -0
- package/src/tasks/list-lib/index.js +27 -11
- package/src/tasks/list-pub/index.js +18 -14
- package/src/tasks/move/helper.js +6 -3
- package/src/tasks/move/index.js +86 -17
- package/src/tasks/publish/helper.js +8 -5
- package/src/tasks/publish/index.js +4 -4
- package/src/tasks/publish-all/helper.js +16 -10
- package/src/tasks/quarantine/index.js +84 -0
- package/src/tasks/rename-lib/index.js +0 -1
- package/src/tasks/revert-webpack/index.js +0 -2
- package/src/tasks/set-perm/index.js +18 -2
- package/src/tasks/store/index.js +4 -1
- package/src/tasks/switch-lib/index.js +3 -1
- package/src/tasks/switch-version/index.js +3 -1
- package/src/util.js +50 -6
- package/tests/functional/localCreateAllListDeleteAll.test.js +56 -10
- package/tests/functional/localCreateBuildAllDeleteAll.test.js +56 -48
- package/tests/functional/localCreateBuildDelete.test.js +57 -10
- package/tests/functional/localCreateListDelete.test.js +55 -102
- package/tests/functional/localCreatePublishAllDeleteAll.test.js +68 -61
- package/tests/functional/localCreatePublishDelete.test.js +62 -21
- package/tests/functional/localCreateRenameDelete.test.js +55 -140
- package/tests/functional/localLibCreateLibAlreadyDeleteLib.test.js +118 -0
- package/tests/functional/localLibCreateLibBuildLibDeleteLib.test.js +241 -0
- package/tests/functional/localLibCreateLibBuildLibListPubDeleteLib.test.js +246 -0
- package/tests/functional/localLibCreateLibDeleteLib.test.js +161 -0
- package/tests/functional/localLibCreateLibExportImportLib.test.js +242 -0
- package/tests/functional/localLibCreateLibExportLib.test.js +219 -0
- package/tests/functional/localLibCreateLibImportCompDeleteLib.test.js +131 -0
- package/tests/functional/localLibCreateLibListDeleteLib.test.js +261 -0
- package/tests/functional/localLibCreateLibListMoveDeleteLib.test.js +236 -0
- package/tests/functional/localLibCreateLibListSwitchDeleteLib.test.js +237 -0
- package/tests/functional/localLibCreateLibPermDeleteLib.test.js +144 -0
- package/tests/functional/localLibCreateLibStatusDeleteLib.test.js +194 -0
- package/tests/functional/localLibCreateLibValidateDeleteLib.test.js +217 -0
- package/tests/functional/localLibCreateLibVersionDeleteLib.test.js +453 -0
- package/tests/functional/localPromoteRevertWP.test.js +83 -38
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
// import { exec } from 'child_process';
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const util = require('node:util');
|
|
5
|
+
const { default: def } = require('ajv/dist/vocabularies/discriminator');
|
|
6
|
+
const exec = util.promisify(require('node:child_process').exec);
|
|
7
|
+
|
|
8
|
+
const tasksConfigDir = path.resolve('../../..', 'tasks.config.json');
|
|
9
|
+
const tasksConfigData = fs.readFileSync(tasksConfigDir, { encoding: 'utf8' });
|
|
10
|
+
let tasksConfigJSON = JSON.parse(tasksConfigData);
|
|
11
|
+
|
|
12
|
+
const packageJSONDir = path.resolve('../../..', 'package.json');
|
|
13
|
+
const packageJSONData = fs.readFileSync(packageJSONDir, { encoding: 'utf8'});
|
|
14
|
+
let packageJSON = JSON.parse(packageJSONData);
|
|
15
|
+
|
|
16
|
+
let isLibraryBased = tasksConfigJSON['libraryMode'];
|
|
17
|
+
const savedLibraryBased = isLibraryBased;
|
|
18
|
+
const savedOrganization = packageJSON.organization;
|
|
19
|
+
|
|
20
|
+
const serverType = tasksConfigJSON['server-config'].serverType;
|
|
21
|
+
const serverDir = serverType === 'launchpad' ? 'Launchpad' : 'Constellation';
|
|
22
|
+
let compType = isLibraryBased ? "library" : "original";
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
describe(`createLib createAll exportStore deleteLib: ${serverDir} - ${compType}` , () => {
|
|
26
|
+
|
|
27
|
+
beforeAll( async() => {
|
|
28
|
+
|
|
29
|
+
// make libraryBased
|
|
30
|
+
isLibraryBased = true;
|
|
31
|
+
tasksConfigJSON['libraryMode'] = isLibraryBased;
|
|
32
|
+
compType = isLibraryBased ? "library" : "original";
|
|
33
|
+
fs.writeFileSync(tasksConfigDir, JSON.stringify(tasksConfigJSON, null, 4), { encoding: 'utf8' });
|
|
34
|
+
|
|
35
|
+
const storeDir = path.join(path.resolve('../../..'), 'store');
|
|
36
|
+
if (fs.existsSync(storeDir)) {
|
|
37
|
+
fs.rmSync(storeDir, { recursive: true, force: true, maxRetries: 2 });
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// make organzation Pega
|
|
41
|
+
packageJSON.organization = "Pega";
|
|
42
|
+
fs.writeFileSync(packageJSONDir, JSON.stringify(packageJSON, null, 4), { encoding: 'utf8' });
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
const componentsDir = path.join(path.resolve('../../..'), 'src/components');
|
|
46
|
+
if (fs.existsSync(componentsDir)) {
|
|
47
|
+
fs.rmSync(componentsDir, { recursive: true, force: true, maxRetries: 2 });
|
|
48
|
+
fs.mkdirSync(componentsDir, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
52
|
+
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
afterAll( async() => {
|
|
56
|
+
|
|
57
|
+
//restore
|
|
58
|
+
isLibraryBased = savedLibraryBased
|
|
59
|
+
tasksConfigJSON['libraryMode'] = isLibraryBased;
|
|
60
|
+
|
|
61
|
+
fs.writeFileSync(tasksConfigDir, JSON.stringify(tasksConfigJSON, null, 4), { encoding: 'utf8' });
|
|
62
|
+
|
|
63
|
+
// return organzation
|
|
64
|
+
packageJSON.organization = savedOrganization;
|
|
65
|
+
fs.writeFileSync(packageJSONDir, JSON.stringify(packageJSON, null, 4), { encoding: 'utf8' });
|
|
66
|
+
|
|
67
|
+
const componentsDir = path.join(path.resolve('../../..'), 'src/components');
|
|
68
|
+
if (fs.existsSync(componentsDir)) {
|
|
69
|
+
fs.rmSync(componentsDir, { recursive: true, force: true, maxRetries: 2 });
|
|
70
|
+
fs.mkdirSync(componentsDir, { recursive: true });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const storeDir = path.join(path.resolve('../../..'), 'store');
|
|
74
|
+
if (fs.existsSync(storeDir)) {
|
|
75
|
+
fs.rmSync(storeDir, { recursive: true, force: true, maxRetries: 2 });
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
79
|
+
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
it(`npm run createLib - ${isLibraryBased}`, async() => {
|
|
84
|
+
|
|
85
|
+
const script = `npm run createLib DXIL 0.0.1 N --prefix ../../..`;
|
|
86
|
+
const compConf = path.join("store", "Pega_DXIL","0.0.1-dev", "componentsconfig.json");
|
|
87
|
+
|
|
88
|
+
const { stdout, stderr } = await exec(script);
|
|
89
|
+
expect(stdout).toContain('Library Pega_DXIL/0.0.1-dev has been created!');
|
|
90
|
+
|
|
91
|
+
const doesExist = fs.existsSync(path.resolve('../../..', compConf));
|
|
92
|
+
|
|
93
|
+
expect(doesExist).toBeTruthy();
|
|
94
|
+
|
|
95
|
+
}, 30000);
|
|
96
|
+
|
|
97
|
+
it('npm run createAll', async () => {
|
|
98
|
+
const script = `npm run createAll "My" 0.0.1 DXIL "" Pega Jest --prefix ../../..`;
|
|
99
|
+
|
|
100
|
+
const { stdout, stderr } = await exec(script);
|
|
101
|
+
// console.log(stdout);
|
|
102
|
+
expect(stdout).not.toBeNull();
|
|
103
|
+
expect(stderr).not.toBeNull();
|
|
104
|
+
|
|
105
|
+
// want message to contain component name
|
|
106
|
+
expect(stdout).toContain('created Pega_DXIL_My');
|
|
107
|
+
|
|
108
|
+
// don't want message with already exists
|
|
109
|
+
expect(stdout).not.toContain('already exists');
|
|
110
|
+
|
|
111
|
+
// check to see file exists
|
|
112
|
+
|
|
113
|
+
// pick one
|
|
114
|
+
const newFileName = 'Pega_DXIL_MyBoolean';
|
|
115
|
+
|
|
116
|
+
// const fileDir = path.resolve(`src/components/${newFileName}`);
|
|
117
|
+
const createFile = path.resolve(
|
|
118
|
+
'../../..',
|
|
119
|
+
path.join(`src/components/${newFileName}`, 'index.tsx')
|
|
120
|
+
);
|
|
121
|
+
const doesExist = fs.existsSync(createFile);
|
|
122
|
+
expect(doesExist).toBeTruthy();
|
|
123
|
+
|
|
124
|
+
// if (doesExist) {
|
|
125
|
+
// // remove it
|
|
126
|
+
// fs.rmdirSync(fileDir, { recursive: true });
|
|
127
|
+
// }
|
|
128
|
+
}, 10000);
|
|
129
|
+
|
|
130
|
+
it('npm run list', async () => {
|
|
131
|
+
const script = 'npm run list --prefix ../../..';
|
|
132
|
+
const { stdout, stderr } = await exec(script);
|
|
133
|
+
|
|
134
|
+
expect(stderr).not.toBeNull();
|
|
135
|
+
|
|
136
|
+
// console.log(stdout);
|
|
137
|
+
expect(stdout).not.toBeNull();
|
|
138
|
+
expect(stdout).toContain('Pega_DXIL_MyText');
|
|
139
|
+
expect(stdout).toContain('Pega_DXIL_MyTextInput');
|
|
140
|
+
expect(stdout).toContain('Pega_DXIL_MyParagraph');
|
|
141
|
+
expect(stdout).toContain('Pega_DXIL_MyEmail');
|
|
142
|
+
expect(stdout).toContain('Pega_DXIL_MyPhone');
|
|
143
|
+
expect(stdout).toContain('Pega_DXIL_MyURL');
|
|
144
|
+
expect(stdout).toContain('Pega_DXIL_MyInteger');
|
|
145
|
+
expect(stdout).toContain('Pega_DXIL_MyDecimal');
|
|
146
|
+
expect(stdout).toContain('Pega_DXIL_MyCurrency');
|
|
147
|
+
expect(stdout).toContain('Pega_DXIL_MyPercentage');
|
|
148
|
+
expect(stdout).toContain('Pega_DXIL_MyBoolean');
|
|
149
|
+
expect(stdout).toContain('Pega_DXIL_MyDate');
|
|
150
|
+
expect(stdout).toContain('Pega_DXIL_MyDateTime');
|
|
151
|
+
expect(stdout).toContain('Pega_DXIL_MyTimeOfDay');
|
|
152
|
+
expect(stdout).toContain('Pega_DXIL_MyPicklist');
|
|
153
|
+
expect(stdout).toContain('Pega_DXIL_MySearchbox');
|
|
154
|
+
expect(stdout).toContain('Pega_DXIL_MyRadiobuttons');
|
|
155
|
+
expect(stdout).toContain('Pega_DXIL_MyDetails');
|
|
156
|
+
expect(stdout).toContain('Pega_DXIL_MyTwoColumnDetails');
|
|
157
|
+
expect(stdout).toContain('Pega_DXIL_MyForm');
|
|
158
|
+
expect(stdout).toContain('Pega_DXIL_MyTwoColumnForm');
|
|
159
|
+
expect(stdout).toContain('Pega_DXIL_MyPage');
|
|
160
|
+
expect(stdout).toContain('Pega_DXIL_MyCaseWidget');
|
|
161
|
+
expect(stdout).toContain('Pega_DXIL_MyPageWidget');
|
|
162
|
+
expect(stdout).toContain('Pega_DXIL_MyPageCaseWidget');
|
|
163
|
+
// done();
|
|
164
|
+
}, 10000);
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
it(`npm run export lib (delete zip) - ${isLibraryBased}`, async() => {
|
|
168
|
+
|
|
169
|
+
const currentDirectory = process.cwd();
|
|
170
|
+
const arPathParts = currentDirectory.split(path.sep);
|
|
171
|
+
let defaultPath = path.join(arPathParts[0], arPathParts[1], arPathParts[2], "Downloads");
|
|
172
|
+
if (path.sep === "/") {
|
|
173
|
+
defaultPath = "/".concat(defaultPath);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const script = `npm run exportLibVersion Pega_DXIL 0.0.1-dev ${defaultPath} Current --prefix ../../..`;
|
|
177
|
+
const { stdout, stderr } = await exec(script);
|
|
178
|
+
|
|
179
|
+
expect(stdout).toContain('Pega_DXIL_0.0.1-dev.zip has been exported');
|
|
180
|
+
const zipFile = path.join(defaultPath, "Pega_DXIL_0.0.1-dev.zip");
|
|
181
|
+
expect(fs.existsSync(zipFile)).toBeTruthy();
|
|
182
|
+
|
|
183
|
+
// delete zip file
|
|
184
|
+
// fs.rmSync(zipFile, {recursive: true});
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
}, 30000);
|
|
188
|
+
|
|
189
|
+
it(`npm run delete import - ${isLibraryBased}`, async() => {
|
|
190
|
+
|
|
191
|
+
const currentDirectory = process.cwd();
|
|
192
|
+
const arPathParts = currentDirectory.split(path.sep);
|
|
193
|
+
let defaultPath = path.join(arPathParts[0], arPathParts[1], arPathParts[2], "Downloads");
|
|
194
|
+
if (path.sep === "/") {
|
|
195
|
+
defaultPath = "/".concat(defaultPath);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const zipFile = path.join(defaultPath, "Pega_DXIL_0.0.1-dev.zip");
|
|
199
|
+
expect(fs.existsSync(zipFile)).toBeTruthy();
|
|
200
|
+
|
|
201
|
+
// delete zip file
|
|
202
|
+
fs.rmSync(zipFile, {recursive: true});
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
}, 30000);
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
it(`npm run deleteLib - ${isLibraryBased}`, async() => {
|
|
209
|
+
|
|
210
|
+
const script = `npm run deleteLib Pega_DXIL 0.0.1-dev --prefix ../../..`;
|
|
211
|
+
const { stdout, stderr } = await exec(script);
|
|
212
|
+
|
|
213
|
+
expect(stdout).toContain('Pega_DXIL is deleted from Local.');
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
}, 30000);
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
});
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
// import { exec } from 'child_process';
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const util = require('node:util');
|
|
5
|
+
const exec = util.promisify(require('node:child_process').exec);
|
|
6
|
+
|
|
7
|
+
const tasksConfigDir = path.resolve('../../..', 'tasks.config.json');
|
|
8
|
+
const tasksConfigData = fs.readFileSync(tasksConfigDir, { encoding: 'utf8' });
|
|
9
|
+
let tasksConfigJSON = JSON.parse(tasksConfigData);
|
|
10
|
+
|
|
11
|
+
const packageJSONDir = path.resolve('../../..', 'package.json');
|
|
12
|
+
const packageJSONData = fs.readFileSync(packageJSONDir, { encoding: 'utf8'});
|
|
13
|
+
let packageJSON = JSON.parse(packageJSONData);
|
|
14
|
+
|
|
15
|
+
let isLibraryBased = tasksConfigJSON['libraryMode'];
|
|
16
|
+
const savedLibraryBased = isLibraryBased;
|
|
17
|
+
const savedOrganization = packageJSON.organization;
|
|
18
|
+
|
|
19
|
+
const serverType = tasksConfigJSON['server-config'].serverType;
|
|
20
|
+
const serverDir = serverType === 'launchpad' ? 'Launchpad' : 'Constellation';
|
|
21
|
+
let compType = isLibraryBased ? "library" : "original";
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
describe(`createLib importComp deleteLib: ${serverDir} - ${compType}` , () => {
|
|
25
|
+
|
|
26
|
+
beforeAll( async() => {
|
|
27
|
+
|
|
28
|
+
// make libraryBased
|
|
29
|
+
isLibraryBased = true;
|
|
30
|
+
tasksConfigJSON['libraryMode'] = isLibraryBased;
|
|
31
|
+
compType = isLibraryBased ? "library" : "original";
|
|
32
|
+
fs.writeFileSync(tasksConfigDir, JSON.stringify(tasksConfigJSON, null, 4), { encoding: 'utf8' });
|
|
33
|
+
|
|
34
|
+
const storeDir = path.join(path.resolve('../../..'), 'store');
|
|
35
|
+
if (fs.existsSync(storeDir)) {
|
|
36
|
+
fs.rmSync(storeDir, { recursive: true, force: true, maxRetries: 2 });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// make organzation Pega
|
|
40
|
+
packageJSON.organization = "Pega";
|
|
41
|
+
fs.writeFileSync(packageJSONDir, JSON.stringify(packageJSON, null, 4), { encoding: 'utf8' });
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
const componentsDir = path.join(path.resolve('../../..'), 'src/components');
|
|
45
|
+
if (fs.existsSync(componentsDir)) {
|
|
46
|
+
fs.rmSync(componentsDir, { recursive: true, force: true, maxRetries: 2 });
|
|
47
|
+
fs.mkdirSync(componentsDir, { recursive: true });
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
51
|
+
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
afterAll( async() => {
|
|
55
|
+
|
|
56
|
+
//restore
|
|
57
|
+
isLibraryBased = savedLibraryBased
|
|
58
|
+
tasksConfigJSON['libraryMode'] = isLibraryBased;
|
|
59
|
+
|
|
60
|
+
fs.writeFileSync(tasksConfigDir, JSON.stringify(tasksConfigJSON, null, 4), { encoding: 'utf8' });
|
|
61
|
+
|
|
62
|
+
// return organzation
|
|
63
|
+
packageJSON.organization = savedOrganization;
|
|
64
|
+
fs.writeFileSync(packageJSONDir, JSON.stringify(packageJSON, null, 4), { encoding: 'utf8' });
|
|
65
|
+
|
|
66
|
+
const componentsDir = path.join(path.resolve('../../..'), 'src/components');
|
|
67
|
+
if (fs.existsSync(componentsDir)) {
|
|
68
|
+
fs.rmSync(componentsDir, { recursive: true, force: true, maxRetries: 2 });
|
|
69
|
+
fs.mkdirSync(componentsDir, { recursive: true });
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const storeDir = path.join(path.resolve('../../..'), 'store');
|
|
73
|
+
if (fs.existsSync(storeDir)) {
|
|
74
|
+
fs.rmSync(storeDir, { recursive: true, force: true, maxRetries: 2 });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
78
|
+
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
it(`npm run createLib - ${isLibraryBased}`, async() => {
|
|
83
|
+
|
|
84
|
+
const script = `npm run createLib Other 0.0.1 N --prefix ../../..`;
|
|
85
|
+
const compConf = path.join("store", "Pega_Other","0.0.1-dev", "componentsconfig.json");
|
|
86
|
+
|
|
87
|
+
const { stdout, stderr } = await exec(script);
|
|
88
|
+
expect(stdout).toContain('Library Pega_Other/0.0.1-dev has been created!');
|
|
89
|
+
|
|
90
|
+
const doesExist = fs.existsSync(path.resolve('../../..', compConf));
|
|
91
|
+
|
|
92
|
+
expect(doesExist).toBeTruthy();
|
|
93
|
+
|
|
94
|
+
}, 30000);
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
it(`npm run importComponent - ${isLibraryBased}`, async() => {
|
|
98
|
+
const assetDir = path.resolve(`tests/assets/${compType}/components/createAll/${serverDir}`);
|
|
99
|
+
|
|
100
|
+
// pulling in DXIL MyBoolean but should be renamed to Other MyBoolean
|
|
101
|
+
const script = `npm run importComponent ${assetDir} Pega_DXIL_MyBoolean --prefix ../../..`;
|
|
102
|
+
const { stdout, stderr } = await exec(script);
|
|
103
|
+
|
|
104
|
+
expect(stdout).toContain('Pega_DXIL_MyBoolean has been imported as Pega_Other_MyBoolean');
|
|
105
|
+
|
|
106
|
+
}, 30000);
|
|
107
|
+
|
|
108
|
+
it('npm run list (1 component)', async () => {
|
|
109
|
+
const script = 'npm run list --prefix ../../..';
|
|
110
|
+
const { stdout, stderr } = await exec(script);
|
|
111
|
+
|
|
112
|
+
expect(stderr).not.toBeNull();
|
|
113
|
+
|
|
114
|
+
// console.log(stdout);
|
|
115
|
+
expect(stdout).not.toBeNull();
|
|
116
|
+
expect(stdout).toContain('Pega_Other_MyBoolean');
|
|
117
|
+
// done();
|
|
118
|
+
}, 10000);
|
|
119
|
+
|
|
120
|
+
it(`npm run deleteLib - ${isLibraryBased}`, async() => {
|
|
121
|
+
|
|
122
|
+
const script = `npm run deleteLib Pega_Other 0.0.1-dev --prefix ../../..`;
|
|
123
|
+
const { stdout, stderr } = await exec(script);
|
|
124
|
+
|
|
125
|
+
expect(stdout).toContain('Pega_Other is deleted from Local.');
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
}, 30000);
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
});
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
// import { exec } from 'child_process';
|
|
2
|
+
const path = require('path');
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const util = require('node:util');
|
|
5
|
+
const exec = util.promisify(require('node:child_process').exec);
|
|
6
|
+
|
|
7
|
+
const tasksConfigDir = path.resolve('../../..', 'tasks.config.json');
|
|
8
|
+
const tasksConfigData = fs.readFileSync(tasksConfigDir, { encoding: 'utf8' });
|
|
9
|
+
let tasksConfigJSON = JSON.parse(tasksConfigData);
|
|
10
|
+
|
|
11
|
+
const packageJSONDir = path.resolve('../../..', 'package.json');
|
|
12
|
+
const packageJSONData = fs.readFileSync(packageJSONDir, { encoding: 'utf8'});
|
|
13
|
+
let packageJSON = JSON.parse(packageJSONData);
|
|
14
|
+
|
|
15
|
+
let isLibraryBased = tasksConfigJSON['libraryMode'];
|
|
16
|
+
const savedLibraryBased = isLibraryBased;
|
|
17
|
+
const savedOrganization = packageJSON.organization;
|
|
18
|
+
|
|
19
|
+
const serverType = tasksConfigJSON['server-config'].serverType;
|
|
20
|
+
const serverDir = serverType === 'launchpad' ? 'Launchpad' : 'Constellation';
|
|
21
|
+
let compType = isLibraryBased ? "library" : "original";
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
describe(`createLib createAll list deleteVersion deleteLib: ${serverDir} - ${compType}` , () => {
|
|
25
|
+
|
|
26
|
+
beforeAll( async() => {
|
|
27
|
+
|
|
28
|
+
// make libraryBased
|
|
29
|
+
isLibraryBased = true;
|
|
30
|
+
tasksConfigJSON['libraryMode'] = isLibraryBased;
|
|
31
|
+
compType = isLibraryBased ? "library" : "original";
|
|
32
|
+
fs.writeFileSync(tasksConfigDir, JSON.stringify(tasksConfigJSON, null, 4), { encoding: 'utf8' });
|
|
33
|
+
|
|
34
|
+
const storeDir = path.join(path.resolve('../../..'), 'store');
|
|
35
|
+
if (fs.existsSync(storeDir)) {
|
|
36
|
+
fs.rmSync(storeDir, { recursive: true, force: true, maxRetries: 2 });
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// make organzation Pega
|
|
40
|
+
packageJSON.organization = "Pega";
|
|
41
|
+
fs.writeFileSync(packageJSONDir, JSON.stringify(packageJSON, null, 4), { encoding: 'utf8' });
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
const componentsDir = path.join(path.resolve('../../..'), 'src/components');
|
|
45
|
+
if (fs.existsSync(componentsDir)) {
|
|
46
|
+
fs.rmSync(componentsDir, { recursive: true, force: true, maxRetries: 2 });
|
|
47
|
+
fs.mkdirSync(componentsDir, { recursive: true });
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
51
|
+
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
afterAll( async() => {
|
|
55
|
+
|
|
56
|
+
//restore
|
|
57
|
+
isLibraryBased = savedLibraryBased
|
|
58
|
+
tasksConfigJSON['libraryMode'] = isLibraryBased;
|
|
59
|
+
|
|
60
|
+
fs.writeFileSync(tasksConfigDir, JSON.stringify(tasksConfigJSON, null, 4), { encoding: 'utf8' });
|
|
61
|
+
|
|
62
|
+
// return organzation
|
|
63
|
+
packageJSON.organization = savedOrganization;
|
|
64
|
+
fs.writeFileSync(packageJSONDir, JSON.stringify(packageJSON, null, 4), { encoding: 'utf8' });
|
|
65
|
+
|
|
66
|
+
const componentsDir = path.join(path.resolve('../../..'), 'src/components');
|
|
67
|
+
if (fs.existsSync(componentsDir)) {
|
|
68
|
+
fs.rmSync(componentsDir, { recursive: true, force: true, maxRetries: 2 });
|
|
69
|
+
fs.mkdirSync(componentsDir, { recursive: true });
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const storeDir = path.join(path.resolve('../../..'), 'store');
|
|
73
|
+
if (fs.existsSync(storeDir)) {
|
|
74
|
+
fs.rmSync(storeDir, { recursive: true, force: true, maxRetries: 2 });
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
await new Promise((r) => setTimeout(r, 2000));
|
|
78
|
+
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
it(`npm run createLib (other) - ${isLibraryBased}`, async() => {
|
|
83
|
+
|
|
84
|
+
const script = `npm run createLib Other 0.0.1 N --prefix ../../..`;
|
|
85
|
+
const compConf = path.join("store", "Pega_Other","0.0.1-dev", "componentsconfig.json");
|
|
86
|
+
|
|
87
|
+
const { stdout, stderr } = await exec(script);
|
|
88
|
+
expect(stdout).toContain('Library Pega_Other/0.0.1-dev has been created!');
|
|
89
|
+
|
|
90
|
+
const doesExist = fs.existsSync(path.resolve('../../..', compConf));
|
|
91
|
+
|
|
92
|
+
expect(doesExist).toBeTruthy();
|
|
93
|
+
|
|
94
|
+
}, 30000);
|
|
95
|
+
|
|
96
|
+
it(`npm run createLib (DXIL) - ${isLibraryBased}`, async() => {
|
|
97
|
+
|
|
98
|
+
const script = `npm run createLib DXIL 0.0.1 N --prefix ../../..`;
|
|
99
|
+
const compConf = path.join("store", "Pega_DXIL","0.0.1-dev", "componentsconfig.json");
|
|
100
|
+
|
|
101
|
+
const { stdout, stderr } = await exec(script);
|
|
102
|
+
expect(stdout).toContain('Library Pega_DXIL/0.0.1-dev has been created!');
|
|
103
|
+
|
|
104
|
+
const doesExist = fs.existsSync(path.resolve('../../..', compConf));
|
|
105
|
+
|
|
106
|
+
expect(doesExist).toBeTruthy();
|
|
107
|
+
|
|
108
|
+
}, 30000);
|
|
109
|
+
|
|
110
|
+
it('npm run createAll', async () => {
|
|
111
|
+
const script = `npm run createAll "My" 0.0.1 DXIL "" Pega Jest --prefix ../../..`;
|
|
112
|
+
|
|
113
|
+
const { stdout, stderr } = await exec(script);
|
|
114
|
+
// console.log(stdout);
|
|
115
|
+
expect(stdout).not.toBeNull();
|
|
116
|
+
expect(stderr).not.toBeNull();
|
|
117
|
+
|
|
118
|
+
// want message to contain component name
|
|
119
|
+
expect(stdout).toContain('created Pega_DXIL_My');
|
|
120
|
+
|
|
121
|
+
// don't want message with already exists
|
|
122
|
+
expect(stdout).not.toContain('already exists');
|
|
123
|
+
|
|
124
|
+
// check to see file exists
|
|
125
|
+
|
|
126
|
+
// pick one
|
|
127
|
+
const newFileName = 'Pega_DXIL_MyBoolean';
|
|
128
|
+
|
|
129
|
+
// const fileDir = path.resolve(`src/components/${newFileName}`);
|
|
130
|
+
const createFile = path.resolve(
|
|
131
|
+
'../../..',
|
|
132
|
+
path.join(`src/components/${newFileName}`, 'index.tsx')
|
|
133
|
+
);
|
|
134
|
+
const doesExist = fs.existsSync(createFile);
|
|
135
|
+
expect(doesExist).toBeTruthy();
|
|
136
|
+
|
|
137
|
+
// if (doesExist) {
|
|
138
|
+
// // remove it
|
|
139
|
+
// fs.rmdirSync(fileDir, { recursive: true });
|
|
140
|
+
// }
|
|
141
|
+
}, 10000);
|
|
142
|
+
|
|
143
|
+
it('npm run list', async () => {
|
|
144
|
+
const script = 'npm run list --prefix ../../..';
|
|
145
|
+
const { stdout, stderr } = await exec(script);
|
|
146
|
+
|
|
147
|
+
expect(stderr).not.toBeNull();
|
|
148
|
+
|
|
149
|
+
// console.log(stdout);
|
|
150
|
+
expect(stdout).not.toBeNull();
|
|
151
|
+
expect(stdout).toContain('Pega_DXIL_MyText');
|
|
152
|
+
expect(stdout).toContain('Pega_DXIL_MyTextInput');
|
|
153
|
+
expect(stdout).toContain('Pega_DXIL_MyParagraph');
|
|
154
|
+
expect(stdout).toContain('Pega_DXIL_MyEmail');
|
|
155
|
+
expect(stdout).toContain('Pega_DXIL_MyPhone');
|
|
156
|
+
expect(stdout).toContain('Pega_DXIL_MyURL');
|
|
157
|
+
expect(stdout).toContain('Pega_DXIL_MyInteger');
|
|
158
|
+
expect(stdout).toContain('Pega_DXIL_MyDecimal');
|
|
159
|
+
expect(stdout).toContain('Pega_DXIL_MyCurrency');
|
|
160
|
+
expect(stdout).toContain('Pega_DXIL_MyPercentage');
|
|
161
|
+
expect(stdout).toContain('Pega_DXIL_MyBoolean');
|
|
162
|
+
expect(stdout).toContain('Pega_DXIL_MyDate');
|
|
163
|
+
expect(stdout).toContain('Pega_DXIL_MyDateTime');
|
|
164
|
+
expect(stdout).toContain('Pega_DXIL_MyTimeOfDay');
|
|
165
|
+
expect(stdout).toContain('Pega_DXIL_MyPicklist');
|
|
166
|
+
expect(stdout).toContain('Pega_DXIL_MySearchbox');
|
|
167
|
+
expect(stdout).toContain('Pega_DXIL_MyRadiobuttons');
|
|
168
|
+
expect(stdout).toContain('Pega_DXIL_MyDetails');
|
|
169
|
+
expect(stdout).toContain('Pega_DXIL_MyTwoColumnDetails');
|
|
170
|
+
expect(stdout).toContain('Pega_DXIL_MyForm');
|
|
171
|
+
expect(stdout).toContain('Pega_DXIL_MyTwoColumnForm');
|
|
172
|
+
expect(stdout).toContain('Pega_DXIL_MyPage');
|
|
173
|
+
expect(stdout).toContain('Pega_DXIL_MyCaseWidget');
|
|
174
|
+
expect(stdout).toContain('Pega_DXIL_MyPageWidget');
|
|
175
|
+
expect(stdout).toContain('Pega_DXIL_MyPageCaseWidget');
|
|
176
|
+
// done();
|
|
177
|
+
}, 10000);
|
|
178
|
+
|
|
179
|
+
it('compare created to default', async () => {
|
|
180
|
+
const compList = [
|
|
181
|
+
'Pega_DXIL_MyText',
|
|
182
|
+
'Pega_DXIL_MyTextInput',
|
|
183
|
+
'Pega_DXIL_MyParagraph',
|
|
184
|
+
'Pega_DXIL_MyEmail',
|
|
185
|
+
'Pega_DXIL_MyPhone',
|
|
186
|
+
'Pega_DXIL_MyURL',
|
|
187
|
+
'Pega_DXIL_MyInteger',
|
|
188
|
+
'Pega_DXIL_MyDecimal',
|
|
189
|
+
'Pega_DXIL_MyCurrency',
|
|
190
|
+
'Pega_DXIL_MyPercentage',
|
|
191
|
+
'Pega_DXIL_MyBoolean',
|
|
192
|
+
'Pega_DXIL_MyDate',
|
|
193
|
+
'Pega_DXIL_MyDateTime',
|
|
194
|
+
'Pega_DXIL_MyTimeOfDay',
|
|
195
|
+
'Pega_DXIL_MyPicklist',
|
|
196
|
+
'Pega_DXIL_MySearchbox',
|
|
197
|
+
'Pega_DXIL_MyRadiobuttons',
|
|
198
|
+
'Pega_DXIL_MyDetails',
|
|
199
|
+
'Pega_DXIL_MyTwoColumnDetails',
|
|
200
|
+
'Pega_DXIL_MyForm',
|
|
201
|
+
'Pega_DXIL_MyTwoColumnForm',
|
|
202
|
+
'Pega_DXIL_MyPage',
|
|
203
|
+
'Pega_DXIL_MyCaseWidget',
|
|
204
|
+
'Pega_DXIL_MyPageWidget',
|
|
205
|
+
'Pega_DXIL_MyPageCaseWidget'
|
|
206
|
+
];
|
|
207
|
+
|
|
208
|
+
compList.forEach(component => {
|
|
209
|
+
const componentDir = path.resolve('../../..', `src/components/${component}`);
|
|
210
|
+
const assetDir = path.resolve(`tests/assets/${compType}/components/createAll/${serverDir}/${component}`);
|
|
211
|
+
// get files of directory
|
|
212
|
+
const componentFiles = fs.readdirSync(componentDir);
|
|
213
|
+
|
|
214
|
+
// get files of assets
|
|
215
|
+
// const assetFiles = fs.readdirSync(assetDir);
|
|
216
|
+
|
|
217
|
+
// compare
|
|
218
|
+
componentFiles.forEach(file => {
|
|
219
|
+
const componentFilePath = path.join(componentDir, file);
|
|
220
|
+
const assetFilePath = path.join(assetDir, file);
|
|
221
|
+
|
|
222
|
+
let componentFileData = fs.readFileSync(componentFilePath, { encoding: 'utf8' });
|
|
223
|
+
const assetFileData = fs.readFileSync(assetFilePath, { encoding: 'utf8' });
|
|
224
|
+
|
|
225
|
+
// so that we don't have to generate all new assets, change "version"
|
|
226
|
+
// from 0.0.1-dev to 0.0.1 for now
|
|
227
|
+
if (file === "config.json") {
|
|
228
|
+
expect(componentFileData).toContain("0.0.1-dev");
|
|
229
|
+
componentFileData = componentFileData.replace("0.0.1-dev", "0.0.1");
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
expect(componentFileData).toEqual(assetFileData);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
}, 10000);
|
|
236
|
+
|
|
237
|
+
it(`npm run deleteLibVersion - ${isLibraryBased}`, async() => {
|
|
238
|
+
|
|
239
|
+
// since only version, will delete the lib as well
|
|
240
|
+
|
|
241
|
+
const script = `npm run deleteLibVersion 0.0.1-dev Y --prefix ../../..`;
|
|
242
|
+
const { stdout, stderr } = await exec(script);
|
|
243
|
+
|
|
244
|
+
expect(stdout).toContain('Pega_DXIL is deleted from Local.');
|
|
245
|
+
expect(stdout).toContain('Switched to Pega_Other/0.0.1-dev');
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
}, 30000);
|
|
249
|
+
|
|
250
|
+
it(`npm run deleteLib - ${isLibraryBased}`, async() => {
|
|
251
|
+
|
|
252
|
+
const script = `npm run deleteLib Pega_Other 0.0.1-dev --prefix ../../..`;
|
|
253
|
+
const { stdout, stderr } = await exec(script);
|
|
254
|
+
|
|
255
|
+
expect(stdout).toContain('Pega_Other is deleted from Local.');
|
|
256
|
+
|
|
257
|
+
|
|
258
|
+
}, 30000);
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
});
|