@asyncapi/generator 2.7.1 → 2.8.0

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.
Files changed (48) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/docs/api.md +33 -0
  3. package/docs/baked-in-templates.md +100 -0
  4. package/docs/configuration-file.md +49 -31
  5. package/docs/template.md +22 -3
  6. package/lib/generator.js +31 -3
  7. package/lib/templates/BakedInTemplatesList.json +20 -0
  8. package/lib/templates/bakedInTemplates.js +53 -0
  9. package/package.json +7 -3
  10. package/test/__mocks__/@npmcli/arborist.js +0 -11
  11. package/test/__mocks__/@npmcli/config.js +0 -3
  12. package/test/__mocks__/fs.extra.js +0 -3
  13. package/test/__mocks__/loglevel.js +0 -3
  14. package/test/__mocks__/resolve-from.js +0 -8
  15. package/test/__mocks__/resolve-pkg.js +0 -8
  16. package/test/__snapshots__/integration.test.js.snap +0 -419
  17. package/test/docs/apiwithref.json +0 -41
  18. package/test/docs/dummy.yml +0 -390
  19. package/test/docs/dummyV3.yml +0 -31
  20. package/test/docs/shared.json +0 -27
  21. package/test/docs/ws.yml +0 -36
  22. package/test/generator.test.js +0 -629
  23. package/test/hooksRegistry.test.js +0 -173
  24. package/test/integration.test.js +0 -203
  25. package/test/parser.test.js +0 -205
  26. package/test/renderer.test.js +0 -62
  27. package/test/templateConfigValidator.test.js +0 -294
  28. package/test/test-project/.yarncr.yml +0 -3
  29. package/test/test-project/README.md +0 -8
  30. package/test/test-project/docker-compose.yml +0 -16
  31. package/test/test-project/package.json +0 -24
  32. package/test/test-project/test-global.test.js +0 -37
  33. package/test/test-project/test-project.test.js +0 -102
  34. package/test/test-project/test-registry.test.js +0 -62
  35. package/test/test-project/test.sh +0 -104
  36. package/test/test-project/verdaccio/config.yaml +0 -22
  37. package/test/test-project/verdaccio/htpasswd +0 -1
  38. package/test/test-templates/nunjucks-template/package-lock.json +0 -4062
  39. package/test/test-templates/nunjucks-template/package.json +0 -21
  40. package/test/test-templates/nunjucks-template/template/test-file.md +0 -5
  41. package/test/test-templates/react-template/.ageneratorrc +0 -33
  42. package/test/test-templates/react-template/package.json +0 -14
  43. package/test/test-templates/react-template/template/conditionalFile.txt +0 -0
  44. package/test/test-templates/react-template/template/conditionalFolder/conditionalFile.txt +0 -0
  45. package/test/test-templates/react-template/template/conditionalFolder2/input.txt +0 -0
  46. package/test/test-templates/react-template/template/models.js +0 -6
  47. package/test/test-templates/react-template/template/test-file.md.js +0 -11
  48. package/test/utils.test.js +0 -129
@@ -1,629 +0,0 @@
1
- /* eslint-disable sonarjs/no-duplicate-string */
2
- const fs = require('fs');
3
- const path = require('path');
4
- const Generator = require('../lib/generator');
5
- const log = require('loglevel');
6
- const unixify = require('unixify');
7
- const dummyYAML = fs.readFileSync(path.resolve(__dirname, './docs/dummy.yml'), 'utf8');
8
-
9
- const logMessage = require('./../lib/logMessages.js');
10
-
11
- jest.mock('../lib/utils');
12
- jest.mock('../lib/filtersRegistry');
13
- jest.mock('../lib/hooksRegistry');
14
- jest.mock('../lib/templateConfigValidator');
15
-
16
- describe('Generator', () => {
17
- describe('constructor', () => {
18
- it('works with minimum amount of params', () => {
19
- const gen = new Generator('testTemplate', __dirname);
20
- expect(gen.templateName).toStrictEqual('testTemplate');
21
- expect(gen.targetDir).toStrictEqual(__dirname);
22
- expect(gen.entrypoint).toStrictEqual(undefined);
23
- expect(gen.noOverwriteGlobs).toStrictEqual([]);
24
- expect(gen.disabledHooks).toStrictEqual({});
25
- expect(gen.output).toStrictEqual('fs');
26
- expect(gen.forceWrite).toStrictEqual(false);
27
- expect(gen.install).toStrictEqual(false);
28
- expect(gen.templateParams).toStrictEqual({});
29
- expect(gen.compile).toStrictEqual(true);
30
- });
31
-
32
- it('works with all the params', () => {
33
- const gen = new Generator('testTemplate', __dirname, {
34
- entrypoint: 'test-entrypoint',
35
- noOverwriteGlobs: ['test-globs'],
36
- disabledHooks: { 'test-hooks': true, 'generate:after': ['foo', 'bar'], foo: 'bar' },
37
- output: 'string',
38
- forceWrite: true,
39
- install: true,
40
- templateParams: {
41
- test: true,
42
- },
43
- compile: false,
44
- });
45
- expect(gen.templateName).toStrictEqual('testTemplate');
46
- expect(gen.targetDir).toStrictEqual(__dirname);
47
- expect(gen.entrypoint).toStrictEqual('test-entrypoint');
48
- expect(gen.noOverwriteGlobs).toStrictEqual(['test-globs']);
49
- expect(gen.disabledHooks).toStrictEqual({ 'test-hooks': true, 'generate:after': ['foo', 'bar'], foo: 'bar' });
50
- expect(gen.output).toStrictEqual('string');
51
- expect(gen.forceWrite).toStrictEqual(true);
52
- expect(gen.install).toStrictEqual(true);
53
- expect(gen.compile).toStrictEqual(false);
54
- expect(() => gen.templateParams.test).toThrow('Template parameter "test" has not been defined in the Generator Configuration. Please make sure it\'s listed there before you use it in your template.');
55
-
56
- // Mock params on templateConfig so it doesn't fail.
57
- gen.templateConfig.parameters = { test: {} };
58
-
59
- expect(gen.templateParams.test).toStrictEqual(true);
60
- });
61
-
62
- it('throws an error indicating an unexpected param was given', () => {
63
- const t = () => new Generator('testTemplate', __dirname, {
64
- entrypoint: 'test-entrypoint',
65
- noOverwriteGlobs: ['test-globs'],
66
- disabledHooks: { 'test-hooks': true },
67
- output: 'string',
68
- forceWrite: true,
69
- forceInstall: true,
70
- templateParams: {
71
- test: true,
72
- }
73
- });
74
- expect(t).toThrow('These options are not supported by the generator: forceInstall');
75
- });
76
-
77
- it('throws an error indicating multiple unexpected params were given', () => {
78
- const t = () => new Generator('testTemplate', __dirname, {
79
- entrypoint: 'test-entrypoint',
80
- noOverwriteGlobs: ['test-globs'],
81
- disabledHooks: { 'test-hooks': true },
82
- output: 'string',
83
- write: true,
84
- forceInstall: true,
85
- templateParams: {
86
- test: true,
87
- }
88
- });
89
- expect(t).toThrow('These options are not supported by the generator: write, forceInstall');
90
- });
91
-
92
- it('fails if no templateName is given', () => {
93
- const t = () => new Generator();
94
- expect(t).toThrow('No template name has been specified.');
95
- });
96
-
97
- it('fails if no targetDir is given', () => {
98
- const t = () => new Generator('testTemplate');
99
- expect(t).toThrow('No target directory has been specified.');
100
- });
101
-
102
- it('fails if output is given and is different than "fs" and "string"', () => {
103
- const t = () => new Generator('testTemplate', __dirname, { output: 'fail' });
104
- expect(t).toThrow('Invalid output type fail. Valid values are \'fs\' and \'string\'.');
105
- });
106
- });
107
-
108
- describe('#generate', () => {
109
- let asyncApiDocumentMock;
110
- let xfsMock;
111
- let util;
112
- let filtersRegistry;
113
- let hooksRegistry;
114
- let templateConfigValidator;
115
-
116
- const mockMethods = (gen) => {
117
- gen.verifyTargetDir = jest.fn();
118
- gen.installTemplate = jest.fn().mockResolvedValue({ name: 'nameOfTestTemplate', path: '/path/to/template/nameOfTestTemplate' });
119
- gen.configureTemplate = jest.fn();
120
- gen.loadTemplateConfig = jest.fn();
121
- gen.registerHooks = jest.fn();
122
- gen.registerFilters = jest.fn();
123
- gen.validateTemplateConfig = jest.fn();
124
- gen.generateDirectoryStructure = jest.fn();
125
- gen.launchHook = jest.fn();
126
- gen.generateFile = jest.fn();
127
- gen.renderString = jest.fn();
128
- };
129
-
130
- beforeAll(() => {
131
- util = require('../lib/utils');
132
- filtersRegistry = require('../lib/filtersRegistry');
133
- hooksRegistry = require('../lib/hooksRegistry');
134
- templateConfigValidator = require('../lib/templateConfigValidator');
135
- xfsMock = require('fs.extra');
136
- const { AsyncAPIDocument } = require('@asyncapi/parser/cjs/models/v2/asyncapi');
137
- asyncApiDocumentMock = new AsyncAPIDocument({ 'x-parser-api-version': 0 });
138
- });
139
-
140
- it('works with output=fs, forceWrite=false, install=false', async () => {
141
- const gen = new Generator('testTemplate', __dirname);
142
- mockMethods(gen);
143
- await gen.generate(asyncApiDocumentMock);
144
-
145
- expect(xfsMock.mkdirpSync).toHaveBeenCalledWith(__dirname);
146
- expect(gen.verifyTargetDir).toHaveBeenCalledWith(__dirname);
147
- expect(gen.installTemplate).toHaveBeenCalledWith(false);
148
- expect(gen.loadTemplateConfig).toHaveBeenCalled();
149
- expect(gen.configureTemplate).toHaveBeenCalled();
150
- expect(hooksRegistry.registerHooks).toHaveBeenCalled();
151
- expect(filtersRegistry.registerFilters).toHaveBeenCalled();
152
- expect(templateConfigValidator.validateTemplateConfig).toHaveBeenCalled();
153
- expect(gen.generateDirectoryStructure).toHaveBeenCalledWith(asyncApiDocumentMock);
154
- expect(gen.launchHook).toHaveBeenCalledWith('generate:after');
155
-
156
- expect(util.exists).toHaveBeenCalledTimes(0);
157
- expect(util.readFile).toHaveBeenCalledTimes(0);
158
- expect(gen.generateFile).toHaveBeenCalledTimes(0);
159
- expect(gen.renderString).toHaveBeenCalledTimes(0);
160
- });
161
-
162
- it('works with output=fs, forceWrite=false, install=true', async () => {
163
- const gen = new Generator('testTemplate', __dirname, { install: true });
164
- mockMethods(gen);
165
- await gen.generate(asyncApiDocumentMock);
166
-
167
- expect(xfsMock.mkdirpSync).toHaveBeenCalledWith(__dirname);
168
- expect(gen.verifyTargetDir).toHaveBeenCalledWith(__dirname);
169
- expect(gen.installTemplate).toHaveBeenCalledWith(true);
170
- expect(gen.loadTemplateConfig).toHaveBeenCalled();
171
- expect(gen.configureTemplate).toHaveBeenCalled();
172
- expect(hooksRegistry.registerHooks).toHaveBeenCalled();
173
- expect(filtersRegistry.registerFilters).toHaveBeenCalled();
174
- expect(templateConfigValidator.validateTemplateConfig).toHaveBeenCalled();
175
- expect(gen.generateDirectoryStructure).toHaveBeenCalledWith(asyncApiDocumentMock);
176
- expect(gen.launchHook).toHaveBeenCalledWith('generate:after');
177
-
178
- expect(util.exists).toHaveBeenCalledTimes(0);
179
- expect(util.readFile).toHaveBeenCalledTimes(0);
180
- expect(gen.generateFile).toHaveBeenCalledTimes(0);
181
- expect(gen.renderString).toHaveBeenCalledTimes(0);
182
- });
183
-
184
- it('works with output=fs, forceWrite=true, install=false', async () => {
185
- const gen = new Generator('testTemplate', __dirname, { forceWrite: true });
186
- mockMethods(gen);
187
- await gen.generate(asyncApiDocumentMock);
188
-
189
- expect(xfsMock.mkdirpSync).toHaveBeenCalledWith(__dirname);
190
- expect(gen.installTemplate).toHaveBeenCalledWith(false);
191
- expect(gen.configureTemplate).toHaveBeenCalled();
192
- expect(hooksRegistry.registerHooks).toHaveBeenCalled();
193
- expect(filtersRegistry.registerFilters).toHaveBeenCalled();
194
- expect(templateConfigValidator.validateTemplateConfig).toHaveBeenCalled();
195
- expect(gen.generateDirectoryStructure).toHaveBeenCalledWith(asyncApiDocumentMock);
196
- expect(gen.launchHook).toHaveBeenCalledWith('generate:after');
197
-
198
- expect(util.exists).toHaveBeenCalledTimes(0);
199
- expect(util.readFile).toHaveBeenCalledTimes(0);
200
- expect(gen.verifyTargetDir).toHaveBeenCalledTimes(0);
201
- expect(gen.generateFile).toHaveBeenCalledTimes(0);
202
- expect(gen.renderString).toHaveBeenCalledTimes(0);
203
- });
204
-
205
- it('works with output=fs, forceWrite=true, install=true', async () => {
206
- const gen = new Generator('testTemplate', __dirname, { forceWrite: true, install: true });
207
- mockMethods(gen);
208
- await gen.generate(asyncApiDocumentMock);
209
-
210
- expect(xfsMock.mkdirpSync).toHaveBeenCalledWith(__dirname);
211
- expect(gen.installTemplate).toHaveBeenCalledWith(true);
212
- expect(gen.loadTemplateConfig).toHaveBeenCalled();
213
- expect(gen.loadTemplateConfig).toHaveBeenCalled();
214
- expect(hooksRegistry.registerHooks).toHaveBeenCalled();
215
- expect(filtersRegistry.registerFilters).toHaveBeenCalled();
216
- expect(templateConfigValidator.validateTemplateConfig).toHaveBeenCalled();
217
- expect(gen.generateDirectoryStructure).toHaveBeenCalledWith(asyncApiDocumentMock);
218
- expect(gen.launchHook).toHaveBeenCalledWith('generate:after');
219
-
220
- expect(util.exists).toHaveBeenCalledTimes(0);
221
- expect(util.readFile).toHaveBeenCalledTimes(0);
222
- expect(gen.verifyTargetDir).toHaveBeenCalledTimes(0);
223
- expect(gen.generateFile).toHaveBeenCalledTimes(0);
224
- expect(gen.renderString).toHaveBeenCalledTimes(0);
225
- });
226
-
227
- it('works with output=fs, forceWrite=false, install=false, entrypoint=set', async () => {
228
- const gen = new Generator('testTemplate', __dirname, { entrypoint: 'file.js' });
229
- mockMethods(gen);
230
- util.exists.mockResolvedValue(true);
231
- await gen.generate(asyncApiDocumentMock);
232
-
233
- expect(xfsMock.mkdirpSync).toHaveBeenCalledWith(__dirname);
234
- expect(gen.verifyTargetDir).toHaveBeenCalledWith(__dirname);
235
- expect(gen.installTemplate).toHaveBeenCalledWith(false);
236
- expect(gen.loadTemplateConfig).toHaveBeenCalled();
237
- expect(gen.loadTemplateConfig).toHaveBeenCalled();
238
- expect(hooksRegistry.registerHooks).toHaveBeenCalled();
239
- expect(filtersRegistry.registerFilters).toHaveBeenCalled();
240
- expect(templateConfigValidator.validateTemplateConfig).toHaveBeenCalled();
241
- expect(gen.launchHook).toHaveBeenCalledWith('generate:after');
242
- expect(unixify(util.exists.mock.calls[0][0])).toEqual('/path/to/template/nameOfTestTemplate/template/file.js');
243
- expect(gen.generateFile.mock.calls[0][0]).toEqual(asyncApiDocumentMock);
244
- expect(gen.generateFile.mock.calls[0][1]).toEqual('file.js');
245
- expect(unixify(gen.generateFile.mock.calls[0][2])).toEqual('/path/to/template/nameOfTestTemplate/template');
246
- expect(util.readFile).toHaveBeenCalledTimes(0);
247
- expect(gen.renderString).toHaveBeenCalledTimes(0);
248
- expect(gen.generateDirectoryStructure).toHaveBeenCalledTimes(0);
249
- });
250
-
251
- it('should be able to generate with string inputs', async () => {
252
- const gen = new Generator('testTemplate', __dirname);
253
-
254
- mockMethods(gen);
255
- await gen.generate(dummyYAML);
256
-
257
- expect(xfsMock.mkdirpSync).toHaveBeenCalledWith(__dirname);
258
- expect(gen.installTemplate).toHaveBeenCalledWith(false);
259
- expect(gen.configureTemplate).toHaveBeenCalled();
260
- expect(hooksRegistry.registerHooks).toHaveBeenCalled();
261
- expect(filtersRegistry.registerFilters).toHaveBeenCalled();
262
- expect(templateConfigValidator.validateTemplateConfig).toHaveBeenCalled();
263
- expect(gen.launchHook).toHaveBeenCalledWith('generate:after');
264
- expect(gen.originalAsyncAPI).toBe(dummyYAML);
265
- });
266
-
267
- it('fails if input is not a string nor a parsed AsyncAPI document', async () => {
268
- const gen = new Generator('testTemplate', __dirname);
269
- expect(() => gen.generate(1)).rejects.toThrow('Parameter "asyncapiDocument" must be a non-empty string or an already parsed AsyncAPI document');
270
- });
271
- });
272
-
273
- describe('#generateFromString', () => {
274
- let generateMock;
275
-
276
- beforeAll(() => {
277
- generateMock = jest.fn().mockResolvedValue();
278
- });
279
-
280
- it('calls this.generate', async () => {
281
- const gen = new Generator('testTemplate', __dirname);
282
- gen.generate = generateMock;
283
- await gen.generateFromString(dummyYAML);
284
-
285
- expect(generateMock).toHaveBeenCalled();
286
- });
287
-
288
- it('fails if asyncapiString is not provided', async () => {
289
- const gen = new Generator('testTemplate', __dirname);
290
- gen.generate = generateMock;
291
- expect(() => gen.generateFromString()).rejects.toThrow('Parameter "asyncapiString" must be a non-empty string.');
292
- });
293
-
294
- it('fails if asyncapiString is not a string', async () => {
295
- const gen = new Generator('testTemplate', __dirname);
296
- gen.generate = generateMock;
297
- expect(() => gen.generateFromString(1)).rejects.toThrow('Parameter "asyncapiString" must be a non-empty string.');
298
- });
299
- });
300
-
301
- describe('#generateFromFile', () => {
302
- it('calls readFile and generateFromString with the right params', async () => {
303
- const utils = require('../lib/utils');
304
- const filePath = 'fake-asyncapi.yml';
305
- utils.__files = {
306
- [filePath]: 'test content',
307
- };
308
- const generateMock = jest.fn().mockResolvedValue();
309
- const gen = new Generator('testTemplate', __dirname);
310
- gen.generate = generateMock;
311
- await gen.generateFromFile(filePath);
312
- expect(utils.readFile).toHaveBeenCalled();
313
- expect(utils.readFile.mock.calls[0][0]).toBe(filePath);
314
- expect(utils.readFile.mock.calls[0][1]).toStrictEqual({ encoding: 'utf8' });
315
- expect(generateMock.mock.calls[0][0]).toBe('test content');
316
- expect(generateMock.mock.calls[0][1]).toStrictEqual({ path: filePath });
317
- });
318
- });
319
-
320
- describe('#generateFromURL', () => {
321
- it('calls fetch and generateFromString with the right params', async () => {
322
- const utils = require('../lib/utils');
323
- const asyncapiURL = 'http://example.com/fake-asyncapi.yml';
324
- utils.__contentOfFetchedFile = 'fake text';
325
-
326
- const generateMock = jest.fn().mockResolvedValue();
327
- const gen = new Generator('testTemplate', __dirname);
328
- gen.generate = generateMock;
329
- await gen.generateFromURL(asyncapiURL);
330
- expect(utils.fetchSpec).toHaveBeenCalled();
331
- expect(utils.fetchSpec.mock.calls[0][0]).toBe(asyncapiURL);
332
- expect(generateMock.mock.calls[0][0]).toBe('fake text');
333
- });
334
- });
335
-
336
- describe('#installTemplate', () => {
337
- let ArboristMock;
338
- let arboristMock;
339
- let utils;
340
-
341
- beforeEach(() => {
342
- ArboristMock = require('@npmcli/arborist');
343
- arboristMock = new ArboristMock();
344
- utils = require('../lib/utils');
345
- jest.mock(path.resolve('./testTemplate', 'package.json'), () => ({ name: 'nameOfTestTemplate' }), { virtual: true });
346
- jest.mock(path.resolve(Generator.DEFAULT_TEMPLATES_DIR, 'nameOfTestTemplate', 'package.json'), () => ({ name: 'nameOfTestTemplate' }), { virtual: true });
347
- });
348
-
349
- it('works with a file system path', async () => {
350
- log.debug = jest.fn();
351
- utils.__getTemplateDetails = { pkgPath: '/path', name: 'test-template' };
352
- const templatePath = './testTemplate';
353
- const gen = new Generator(templatePath, __dirname);
354
- await gen.installTemplate();
355
- setTimeout(() => { // This puts the call at the end of the Node.js event loop queue.
356
- expect(arboristMock.reify).toHaveBeenCalledTimes(0);
357
- }, 0);
358
- });
359
-
360
- it('works with a file system path and force = true', async () => {
361
- log.debug = jest.fn();
362
- const gen = new Generator('./testTemplate', __dirname);
363
- await gen.installTemplate(true);
364
- //TODO: this test is disabled until we find a solution how to fix jest config in monorepo so it recognize arborist mock
365
- // setTimeout(() => { // This puts the call at the end of the Node.js event loop queue.
366
- // expect(arboristMock.reify).toHaveBeenCalledTimes(1);
367
- // expect(arboristMock.reify.mock.calls[0][0]).toStrictEqual({
368
- // add: ['./testTemplate'],
369
- // saveType: 'prod',
370
- // save: false
371
- // });
372
- // }, 0);
373
- expect(log.debug).toHaveBeenCalledWith(logMessage.installationDebugMessage(logMessage.TEMPLATE_INSTALL_FLAG_MSG));
374
- });
375
-
376
- it('works with an npm package', async () => {
377
- utils.__isFileSystemPathValue = false;
378
- const gen = new Generator('nameOfTestTemplate', __dirname);
379
- await gen.installTemplate();
380
- setTimeout(() => { // This puts the call at the end of the Node.js event loop queue.
381
- expect(arboristMock.reify).toHaveBeenCalledTimes(0);
382
- }, 0);
383
- });
384
-
385
- it('works with an npm package that is installed for the first time', async () => {
386
- log.debug = jest.fn();
387
- utils.__getTemplateDetails = undefined;
388
- const gen = new Generator('nameOfTestTemplate', __dirname, {debug: true});
389
- await gen.installTemplate();
390
- //TODO: this test is disabled until we find a solution how to fix jest config in monorepo so it recognize arborist mock
391
- // setTimeout(() => { // This puts the call at the end of the Node.js event loop queue.
392
- // expect(arboristMock.reify).toHaveBeenCalledTimes(1);
393
- // }, 0);
394
- expect(log.debug).toHaveBeenCalledWith(logMessage.installationDebugMessage(logMessage.TEMPLATE_INSTALL_DISK_MSG));
395
- });
396
-
397
- it('works with an npm package and force = true', async () => {
398
- log.debug = jest.fn();
399
- utils.__isFileSystemPathValue = false;
400
- const gen = new Generator('nameOfTestTemplate', __dirname);
401
- await gen.installTemplate(true);
402
- //TODO: this test is disabled until we find a solution how to fix jest config in monorepo so it recognize arborist mock
403
- // setTimeout(() => { // This puts the call at the end of the Node.js event loop queue.
404
- // expect(arboristMock.reify).toHaveBeenCalledTimes(1);
405
- // }, 0);
406
- expect(log.debug).toHaveBeenCalledWith(logMessage.installationDebugMessage(logMessage.TEMPLATE_INSTALL_FLAG_MSG));
407
- });
408
-
409
- it('works with a url', async () => {
410
- utils.__isFileSystemPathValue = false;
411
- utils.__getTemplateDetails = undefined;
412
- const gen = new Generator('https://my-test-template.com', __dirname);
413
- await gen.installTemplate();
414
- //TODO: this test is disabled until we find a solution how to fix jest config in monorepo so it recognize arborist mock
415
- // setTimeout(() => { // This puts the call at the end of the Node.js event loop queue.
416
- // expect(arboristMock.reify).toHaveBeenCalledTimes(1);
417
- // }, 0);
418
- expect(log.debug).toHaveBeenCalledWith(logMessage.installationDebugMessage(logMessage.TEMPLATE_INSTALL_DISK_MSG));
419
- });
420
-
421
- it('works with a url and force = true', async () => {
422
- const gen = new Generator('https://my-test-template.com', __dirname);
423
- await gen.installTemplate(true);
424
- //TODO: this test is disabled until we find a solution how to fix jest config in monorepo so it recognize arborist mock
425
- // setTimeout(() => { // This puts the call at the end of the Node.js event loop queue.
426
- // expect(arboristMock.reify).toHaveBeenCalledTimes(1);
427
- // }, 0);
428
- expect(log.debug).toHaveBeenCalledWith(logMessage.installationDebugMessage(logMessage.TEMPLATE_INSTALL_FLAG_MSG));
429
- });
430
-
431
- it('works with a path to registry', async () => {
432
- log.debug = jest.fn();
433
- const gen = new Generator('nameOfTestTemplate', __dirname, {debug: true, registry: {url: 'some.registry.com', authorizationName: 'sdfsf'}});
434
- await gen.installTemplate();
435
- //TODO: this test is disabled until we find a solution how to fix jest config in monorepo so it recognize arborist mock
436
- // setTimeout(() => { // This puts the call at the end of the Node.js event loop queue.
437
- // expect(arboristMock.reify).toHaveBeenCalledTimes(1);
438
- // });
439
- expect(log.debug).toHaveBeenCalledWith(logMessage.installationDebugMessage(logMessage.TEMPLATE_INSTALL_DISK_MSG));
440
- });
441
-
442
- it('throws an error indicating an unexpected param was given for registry configuration', () => {
443
- const t = () => new Generator('testTemplate', __dirname, {
444
- url: 'some.url.com',
445
- privateKey: 'some.key'
446
-
447
- });
448
- expect(t).toThrow('These options are not supported by the generator: privateKey');
449
- });
450
- });
451
-
452
- describe('.getTemplateFile', () => {
453
- it('retrieves the content of a template file', async () => {
454
- const utils = require('../lib/utils');
455
- const filePath = path.resolve(Generator.DEFAULT_TEMPLATES_DIR, 'simple', 'template/static.md');
456
- utils.__files = {
457
- [filePath]: 'test content',
458
- };
459
- const content = await Generator.getTemplateFile('simple', 'template/static.md');
460
- expect(utils.readFile).toHaveBeenCalled();
461
- expect(utils.readFile.mock.calls[0][0]).toBe(filePath);
462
- expect(content).toBe(utils.__files[filePath]);
463
- });
464
-
465
- it('retrieves the content of a template file overriding the default template dir', async () => {
466
- const utils = require('../lib/utils');
467
- const filePath = path.resolve('~', 'templates', 'simple', 'template/static.md');
468
- utils.__files = {
469
- [filePath]: 'test content',
470
- };
471
- const content = await Generator.getTemplateFile('simple', 'template/static.md', path.resolve('~', 'templates'));
472
- expect(utils.readFile).toHaveBeenCalled();
473
- expect(utils.readFile.mock.calls[0][0]).toBe(filePath);
474
- expect(content).toBe(utils.__files[filePath]);
475
- });
476
- });
477
-
478
- describe('#loadDefaultValues', () => {
479
- it('default value of parameter is set', async () => {
480
- const gen = new Generator('testTemplate', __dirname, {
481
- templateParams: {
482
- test: true
483
- }
484
- });
485
- gen.templateConfig = {
486
- parameters: {
487
- paramWithDefault: {
488
- description: 'Parameter with default value',
489
- default: 'default',
490
- required: false
491
- },
492
- paramWithoutDefault: {
493
- description: 'Parameter without default value',
494
- required: false
495
- },
496
- test: {
497
- description: 'test',
498
- required: false
499
- }
500
- }
501
- };
502
-
503
- await gen.loadDefaultValues();
504
-
505
- expect(gen.templateParams).toStrictEqual({
506
- test: true,
507
- paramWithDefault: 'default'
508
- });
509
- });
510
-
511
- it('default value of parameter is not override user value', async () => {
512
- const gen = new Generator('testTemplate', __dirname, {
513
- templateParams: {
514
- test: true
515
- }
516
- });
517
- gen.templateConfig = {
518
- parameters: {
519
- test: {
520
- description: 'Parameter with default value',
521
- default: false,
522
- required: false
523
- }
524
- }
525
- };
526
-
527
- await gen.loadDefaultValues();
528
-
529
- expect(gen.templateParams).toStrictEqual({
530
- test: true
531
- });
532
- });
533
-
534
- it('no default values', async () => {
535
- const gen = new Generator('testTemplate', __dirname, {
536
- templateParams: {
537
- test: true
538
- }
539
- });
540
- gen.templateConfig = {
541
- parameters: {
542
- test: {
543
- description: 'Parameter with default value',
544
- required: false
545
- },
546
- anotherParam: {
547
- description: 'Yeat another param',
548
- required: false
549
- }
550
- }
551
- };
552
-
553
- await gen.loadDefaultValues();
554
-
555
- expect(gen.templateParams).toStrictEqual({
556
- test: true
557
- });
558
- });
559
- });
560
-
561
- describe('#launchHook', () => {
562
- it('launch given hook', async () => {
563
- let iteration = 0;
564
- const gen = new Generator('testTemplate', __dirname);
565
- gen.hooks = { 'test-hooks': [function a() { iteration++; }, function b() { iteration++; }] };
566
- await gen.launchHook('test-hooks');
567
- expect(iteration).toStrictEqual(2);
568
- });
569
-
570
- it('launch given hook which is disabled', async () => {
571
- let iteration = 0;
572
- const gen = new Generator('testTemplate', __dirname, { disabledHooks: { 'test-hooks': true } });
573
- gen.hooks = { 'test-hooks': [function a() { iteration++; }, function b() { iteration++; }] };
574
- await gen.launchHook('test-hooks');
575
- expect(iteration).toStrictEqual(0);
576
- });
577
-
578
- it('launch given hook where disabledHooks key has array format for given hook type', async () => {
579
- let iteration = 0;
580
- const gen = new Generator('testTemplate', __dirname, { disabledHooks: { 'test-hooks': ['a', 'b'] } });
581
- gen.hooks = { 'test-hooks': [function a() { iteration++; }, function b() { iteration++; }, function c() { iteration++; }] };
582
- await gen.launchHook('test-hooks');
583
- expect(iteration).toStrictEqual(1);
584
- });
585
-
586
- it('launch given hook where disabledHooks key has array format for given hook type', async () => {
587
- let iteration = 0;
588
- const gen = new Generator('testTemplate', __dirname, { disabledHooks: { 'test-hooks': 'c' } });
589
- gen.hooks = { 'test-hooks': [function a() { iteration++; }, function b() { iteration++; }, function c() { iteration++; }] };
590
- await gen.launchHook('test-hooks');
591
- expect(iteration).toStrictEqual(2);
592
- });
593
- });
594
-
595
- describe('#isHookAvailable', () => {
596
- it('given hook type not exist or has empty array', async () => {
597
- const gen = new Generator('testTemplate', __dirname);
598
- gen.hooks = { 'test-hooks': [] };
599
- expect(gen.isHookAvailable('foo-bar')).toStrictEqual(false);
600
- expect(gen.isHookAvailable('test-hooks')).toStrictEqual(false);
601
- });
602
-
603
- it('given hook type exist and has hooks', async () => {
604
- const gen = new Generator('testTemplate', __dirname);
605
- gen.hooks = { 'test-hooks': ['foo-bar'] };
606
- expect(gen.isHookAvailable('test-hooks')).toStrictEqual(true);
607
- });
608
-
609
- it('given hook type is disabled', async () => {
610
- const gen = new Generator('testTemplate', __dirname, { disabledHooks: { 'test-hooks': true } });
611
- gen.hooks = { 'test-hooks': ['foo-bar'] };
612
- expect(gen.isHookAvailable('test-hooks')).toStrictEqual(false);
613
- });
614
-
615
- it('for given hook type only some hooks are disabled', async () => {
616
- const gen = new Generator('testTemplate', __dirname, { disabledHooks: { 'test-hooks': ['fooBar'], 'string-test-hooks': 'fooBar' } });
617
- gen.hooks = { 'test-hooks': [function fooBar() {}, function barFoo() {}], 'string-test-hooks': [function fooBar() {}, function barFoo() {}] };
618
- expect(gen.isHookAvailable('test-hooks')).toStrictEqual(true);
619
- expect(gen.isHookAvailable('string-test-hooks')).toStrictEqual(true);
620
- });
621
-
622
- it('for given hook type whole hooks are disabled', async () => {
623
- const gen = new Generator('testTemplate', __dirname, { disabledHooks: { 'test-hooks': ['fooBar', 'barFoo'], 'string-test-hooks': 'fooBar' } });
624
- gen.hooks = { 'test-hooks': [function fooBar() {}, function barFoo() {}], 'string-test-hooks': [function fooBar() {}] };
625
- expect(gen.isHookAvailable('test-hooks')).toStrictEqual(false);
626
- expect(gen.isHookAvailable('string-test-hooks')).toStrictEqual(false);
627
- });
628
- });
629
- });