@sprucelabs/spruce-cli 15.1.8 → 15.2.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/__tests__/behavioral/tests/CreatingATest.test.ts"],"names":["CreatingBehavioralTestsTest","assert","isFunction","Action","execute","installTests","testFeature","getFeatureInstaller","getFeature","buildParentClassCandidates","candidates","doesInclude","label","name","testName","LintService","enableLinting","promise","type","nameReadable","nameCamel","namePascal","waitForInput","selectOptionBasedOnLabel","response","match","testUtil","assertFileByNameInGeneratedFiles","files","Service","build","doesThrowAsync","AbstractTestTest"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;IAEqBA,2B,WACnB,iB,UAKA,iB,UAaA,gBACA,2DADA,EAEA,2BAFA,C,UAIA,gBACA,2DADA,EAEA,sCAFA,C;;;;;;;;;;;;;2GAtBD;AAAA;AAAA;AAAA;AAAA;AAECC,6BAAOC,UAAP,CAAkB,KAAKC,MAAL,CAAY,MAAZ,EAAoB,QAApB,EAA8BC,OAAhD;;AAFD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;8HAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAEO,KAAKC,YAAL,CAAkB,mBAAlB,CAFP;;AAAA;AAIOC,gBAAAA,WAJP,GAIqB,KAAKC,mBAAL,GAA2BC,UAA3B,CAAsC,MAAtC,CAJrB;AAAA;AAAA,uBAK0BF,WAAW,CAACG,0BAAZ,EAL1B;;AAAA;AAKOC,gBAAAA,UALP;;AAOCT,6BAAOU,WAAP,CAAmBD,UAAnB,EAA+B;AAC9BE,kBAAAA,KAAK,EAAE,8CADuB;AAE9BC,kBAAAA,IAAI,EAAE;AAFwB,iBAA/B;;AAPD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;mHAaA,kBAQ+CC,QAR/C;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AASCC,wCAAYC,aAAZ;;AATD;AAAA,uBAUO,KAAKX,YAAL,EAVP;;AAAA;AAWOY,gBAAAA,OAXP,GAWiB,KAAKd,MAAL,CAAY,MAAZ,EAAoB,QAApB,EAA8BC,OAA9B,CAAsC;AACrDc,kBAAAA,IAAI,EAAE,YAD+C;AAErDC,kBAAAA,YAAY,EAAE,sBAFuC;AAGrDC,kBAAAA,SAAS,EAAE,oBAH0C;AAIrDC,kBAAAA,UAAU,EAAE;AAJyC,iBAAtC,CAXjB;AAAA;AAAA,uBAkBO,KAAKC,YAAL,EAlBP;;AAAA;AAoBC,qBAAKC,wBAAL,CAA8BT,QAA9B;AApBD;AAAA,uBAsBwBG,OAtBxB;;AAAA;AAsBOO,gBAAAA,QAtBP;AAwBOC,gBAAAA,KAxBP,GAwBeC,kBAASC,gCAAT,CACb,4BADa,EAEbH,QAAQ,CAACI,KAFI,CAxBf;;AA6BC3B,6BAAOU,WAAP,CAAmBc,KAAnB,EAA0B,YAA1B;;AA7BD;AAAA,uBA+BO,KAAKI,OAAL,CAAa,OAAb,EAAsBC,KAAtB,EA/BP;;AAAA;AAAA;AAAA,uBAiCO7B,aAAO8B,cAAP,CACL;AAAA,yBAAM,KAAI,CAACF,OAAL,CAAa,SAAb,EAAwBzB,OAAxB,CAAgC,WAAhC,CAAN;AAAA,iBADK,EAEL,2CAFK,CAjCP;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAnBwD4B,6B","sourcesContent":["import { test, assert } from '@sprucelabs/test'\nimport LintService from '../../../services/LintService'\nimport AbstractTestTest from '../../../tests/AbstractTestTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nexport default class CreatingBehavioralTestsTest extends AbstractTestTest {\n\t@test()\n\tprotected static async hasCreateAction() {\n\t\tassert.isFunction(this.Action('test', 'create').execute)\n\t}\n\n\t@test()\n\tprotected static async requiresInstallIfSkilLNotInstalled() {\n\t\tawait this.installTests('testsInNodeModule')\n\n\t\tconst testFeature = this.getFeatureInstaller().getFeature('test')\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tassert.doesInclude(candidates, {\n\t\t\tlabel: 'AbstractSpruceFixtureTest (requires install)',\n\t\t\tname: 'AbstractSpruceFixtureTest',\n\t\t})\n\t}\n\n\t@test(\n\t\t'can create behavioral test with AbstractSpruceFixtureTest',\n\t\t'AbstractSpruceFixtureTest'\n\t)\n\t@test(\n\t\t'can create behavioral test with AbstractSpruceFixtureTest',\n\t\t'AbstractStoreTest (requires install)'\n\t)\n\tprotected static async canCreateBehavioralTest(testName: string) {\n\t\tLintService.enableLinting()\n\t\tawait this.installTests()\n\t\tconst promise = this.Action('test', 'create').execute({\n\t\t\ttype: 'behavioral',\n\t\t\tnameReadable: 'Can book appointment',\n\t\t\tnameCamel: 'canBookAppointment',\n\t\t\tnamePascal: 'CanBookAppointment',\n\t\t})\n\n\t\tawait this.waitForInput()\n\n\t\tthis.selectOptionBasedOnLabel(testName)\n\n\t\tconst response = await promise\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresponse.files\n\t\t)\n\n\t\tassert.doesInclude(match, 'behavioral')\n\n\t\tawait this.Service('build').build()\n\n\t\tawait assert.doesThrowAsync(\n\t\t\t() => this.Service('command').execute('yarn test'),\n\t\t\t/false.*?does not equal.*?true/gis\n\t\t)\n\t}\n}\n"],"file":"CreatingATest.test.js"}
1
+ {"version":3,"sources":["../../../../src/__tests__/behavioral/tests/CreatingATest.test.ts"],"names":["CreatingBehavioralTestsTest","assert","isFunction","Action","execute","installTests","testFeature","getFeatureInstaller","getFeature","buildParentClassCandidates","candidates","doesInclude","label","name","testName","LintService","enableLinting","installAndStartTestActionAndWaitForInput","promise","selectOptionBasedOnLabel","response","match","testUtil","assertFileByNameInGeneratedFiles","files","Service","build","doesThrowAsync","testType","createTestSubDir","installStartTestSelectSubclassWaitForInput","uiAssert","assertSelectRenderChoice","ui","sendInput","dirs","dir","dirName","results","expectedPath","resolvePath","isEqual","path","file","resolveTestDir","diskUtil","writeFile","assertSelectDidNotRenderChoice","selectedSubClass","assertRendersSelect","newDir","createDir","testDirs","type","nameReadable","nameCamel","namePascal","waitForInput","AbstractTestTest"],"mappings":"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","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport LintService from '../../../services/LintService'\nimport AbstractTestTest from '../../../tests/AbstractTestTest'\nimport testUtil from '../../../tests/utilities/test.utility'\nimport uiAssert from '../../../tests/utilities/uiAssert.utility'\n\nexport default class CreatingBehavioralTestsTest extends AbstractTestTest {\n\t@test()\n\tprotected static async hasCreateAction() {\n\t\tassert.isFunction(this.Action('test', 'create').execute)\n\t}\n\n\t@test()\n\tprotected static async requiresInstallIfFeatureNotInstalled() {\n\t\tawait this.installTests('testsInNodeModule')\n\n\t\tconst testFeature = this.getFeatureInstaller().getFeature('test')\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tassert.doesInclude(candidates, {\n\t\t\tlabel: 'AbstractSpruceFixtureTest (requires install)',\n\t\t\tname: 'AbstractSpruceFixtureTest',\n\t\t})\n\t}\n\n\t@test(\n\t\t'can create behavioral test with AbstractSpruceFixtureTest',\n\t\t'AbstractSpruceFixtureTest'\n\t)\n\t@test(\n\t\t'can create behavioral test with AbstractSpruceFixtureTest',\n\t\t'AbstractStoreTest (requires install)'\n\t)\n\tprotected static async canCreateBehavioralTest(testName: string) {\n\t\tLintService.enableLinting()\n\t\tconst { promise } = await this.installAndStartTestActionAndWaitForInput()\n\n\t\tthis.selectOptionBasedOnLabel(testName)\n\n\t\tconst response = await promise\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresponse.files\n\t\t)\n\n\t\tassert.doesInclude(match, 'behavioral')\n\n\t\tawait this.Service('build').build()\n\n\t\tawait assert.doesThrowAsync(\n\t\t\t() => this.Service('command').execute('yarn test'),\n\t\t\t/false.*?does not equal.*?true/gis\n\t\t)\n\t}\n\n\t@test('finds folders inside behavioral', 'behavioral')\n\t@test('finds folders inside implementation', 'implementation')\n\tprotected static async promptsToSelectFolderIfInsideTestDir(\n\t\ttestType: string\n\t) {\n\t\tawait this.installTests()\n\n\t\tthis.createTestSubDir(testType, 'dummy1')\n\n\t\tconst { promise } = await this.installStartTestSelectSubclassWaitForInput(\n\t\t\ttestType\n\t\t)\n\n\t\tuiAssert.assertSelectRenderChoice(this.ui, '.', testType)\n\t\tuiAssert.assertSelectRenderChoice(this.ui, `dummy1`, `${testType}/dummy1`)\n\n\t\tawait this.ui.sendInput('.')\n\n\t\tawait promise\n\t}\n\n\t@test()\n\tprotected static async listsManyDirsIfExistInsideTestDir() {\n\t\tawait this.installTests()\n\n\t\tconst dirs = ['dir1', 'dir2', 'dir3']\n\n\t\tfor (const dir of dirs) {\n\t\t\tthis.createTestSubDir('behavioral', dir)\n\t\t}\n\n\t\tconst { promise } = await this.installStartTestSelectSubclassWaitForInput()\n\n\t\tfor (const dir of dirs) {\n\t\t\tuiAssert.assertSelectRenderChoice(this.ui, `${dir}`, `behavioral/${dir}`)\n\t\t}\n\n\t\tawait this.ui.sendInput('.')\n\n\t\tawait promise\n\t}\n\n\t@test('can select subdir 1', 'test')\n\t@test('can select subdir 2', 'test-2')\n\tprotected static async selectingAnOptionRendersToSubDir(dirName: string) {\n\t\tawait this.installTests()\n\t\tthis.createTestSubDir('behavioral', dirName)\n\n\t\tconst { promise } = await this.installStartTestSelectSubclassWaitForInput(\n\t\t\t'behavioral'\n\t\t)\n\n\t\tawait this.ui.sendInput(`${dirName}`)\n\n\t\tconst results = await promise\n\n\t\tconst expectedPath = this.resolvePath(\n\t\t\t'src',\n\t\t\t'__tests__',\n\t\t\t'behavioral',\n\t\t\tdirName,\n\t\t\t'CanBookAppointment.test.ts'\n\t\t)\n\n\t\tassert.isEqual(expectedPath, results.files?.[0]?.path)\n\t}\n\n\t@test()\n\tprotected static async doesNotListFiles() {\n\t\tawait this.installTests()\n\t\tthis.createTestSubDir('behavioral', 'subdir')\n\n\t\tconst file = this.resolveTestDir('behavioral', 'test.ts')\n\t\tdiskUtil.writeFile(file, 'what the!?')\n\n\t\tconst { promise } = await this.installStartTestSelectSubclassWaitForInput()\n\n\t\tuiAssert.assertSelectDidNotRenderChoice(\n\t\t\tthis.ui,\n\t\t\t'test',\n\t\t\t`behavioral/test/test.ts`\n\t\t)\n\n\t\tawait promise\n\t}\n\n\tprivate static async installStartTestSelectSubclassWaitForInput(\n\t\ttestType?: string,\n\t\tselectedSubClass?: string\n\t) {\n\t\tconst { promise } = await this.installAndStartTestActionAndWaitForInput(\n\t\t\ttestType\n\t\t)\n\n\t\tawait this.ui.sendInput(selectedSubClass ?? '')\n\n\t\tawait uiAssert.assertRendersSelect(this.ui)\n\n\t\treturn { promise }\n\t}\n\n\tprivate static createTestSubDir(...testDirs: string[]) {\n\t\tconst newDir = this.resolveTestDir(...testDirs)\n\t\tdiskUtil.createDir(newDir)\n\t}\n\n\tprivate static resolveTestDir(...testDirs: string[]) {\n\t\treturn this.resolvePath('src', '__tests__', ...testDirs)\n\t}\n\n\tprivate static async installAndStartTestActionAndWaitForInput(\n\t\ttestType = 'behavioral'\n\t) {\n\t\tawait this.installTests()\n\t\tconst promise = this.Action('test', 'create').execute({\n\t\t\ttype: testType,\n\t\t\tnameReadable: 'Can book appointment',\n\t\t\tnameCamel: 'canBookAppointment',\n\t\t\tnamePascal: 'CanBookAppointment',\n\t\t})\n\n\t\tawait this.waitForInput()\n\t\treturn { promise }\n\t}\n}\n"],"file":"CreatingATest.test.js"}
@@ -7,6 +7,8 @@ export default class CreateAction extends AbstractAction<OptionsSchema> {
7
7
  optionsSchema: SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema;
8
8
  invocationMessage: string;
9
9
  execute(options: Options): Promise<FeatureActionResponse>;
10
+ private promptForSubDir;
11
+ private promptForParentTestClassAndOptionallyInstallDependencies;
10
12
  private optionallyInstallFeatureBasedOnSelection;
11
13
  private buildParentClassFromCandidate;
12
14
  }
@@ -67,7 +67,7 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
67
67
  key: "execute",
68
68
  value: function () {
69
69
  var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(options) {
70
- var normalizedOptions, testDestinationDir, namePascal, nameCamel, type, resolvedDestination, testFeature, candidates, parentTestClass, idx, match, writer, results;
70
+ var normalizedOptions, testDestinationDir, namePascal, nameCamel, type, resolvedDestination, testFeature, parentTestClass, candidates, writer, results;
71
71
  return _regenerator["default"].wrap(function _callee$(_context) {
72
72
  while (1) {
73
73
  switch (_context.prev = _context.next) {
@@ -77,19 +77,135 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
77
77
  resolvedDestination = _spruceSkillUtils.diskUtil.resolvePath(this.cwd, testDestinationDir, type);
78
78
  this.ui.startLoading('Checking potential parent test classes');
79
79
  testFeature = this.parent;
80
- _context.next = 7;
80
+ this.ui.stopLoading();
81
+ _context.next = 8;
81
82
  return testFeature.buildParentClassCandidates();
82
83
 
83
- case 7:
84
+ case 8:
84
85
  candidates = _context.sent;
85
- this.ui.stopLoading();
86
86
 
87
87
  if (!(candidates.length > 0)) {
88
- _context.next = 19;
88
+ _context.next = 13;
89
89
  break;
90
90
  }
91
91
 
92
92
  _context.next = 12;
93
+ return this.promptForParentTestClassAndOptionallyInstallDependencies(candidates, parentTestClass, resolvedDestination);
94
+
95
+ case 12:
96
+ parentTestClass = _context.sent;
97
+
98
+ case 13:
99
+ if (!_spruceSkillUtils.diskUtil.doesDirExist(resolvedDestination)) {
100
+ _context.next = 17;
101
+ break;
102
+ }
103
+
104
+ _context.next = 16;
105
+ return this.promptForSubDir(resolvedDestination, type);
106
+
107
+ case 16:
108
+ resolvedDestination = _context.sent;
109
+
110
+ case 17:
111
+ this.ui.startLoading('Generating test file...');
112
+ writer = this.Writer('test');
113
+ _context.next = 21;
114
+ return writer.generateTest(resolvedDestination, _objectSpread(_objectSpread({}, normalizedOptions), {}, {
115
+ type: type,
116
+ nameCamel: nameCamel,
117
+ parentTestClass: parentTestClass,
118
+ namePascal: namePascal !== null && namePascal !== void 0 ? namePascal : _spruceSkillUtils.namesUtil.toPascal(nameCamel)
119
+ }));
120
+
121
+ case 21:
122
+ results = _context.sent;
123
+ return _context.abrupt("return", {
124
+ files: results,
125
+ hints: ["run `spruce test` in your skill when you're ready!"]
126
+ });
127
+
128
+ case 23:
129
+ case "end":
130
+ return _context.stop();
131
+ }
132
+ }
133
+ }, _callee, this);
134
+ }));
135
+
136
+ function execute(_x) {
137
+ return _execute.apply(this, arguments);
138
+ }
139
+
140
+ return execute;
141
+ }()
142
+ }, {
143
+ key: "promptForSubDir",
144
+ value: function () {
145
+ var _promptForSubDir = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(resolvedDestination, type) {
146
+ var subdirs, match;
147
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
148
+ while (1) {
149
+ switch (_context2.prev = _context2.next) {
150
+ case 0:
151
+ subdirs = _spruceSkillUtils.diskUtil.readDir(resolvedDestination).filter(function (d) {
152
+ return _spruceSkillUtils.diskUtil.isDir(_spruceSkillUtils.diskUtil.resolvePath(resolvedDestination, d));
153
+ });
154
+
155
+ if (!(subdirs.length > 0)) {
156
+ _context2.next = 6;
157
+ break;
158
+ }
159
+
160
+ _context2.next = 4;
161
+ return this.ui.prompt({
162
+ type: 'select',
163
+ label: 'Where should I write this test?',
164
+ isRequired: true,
165
+ options: {
166
+ choices: [{
167
+ value: '.',
168
+ label: "".concat(type)
169
+ }].concat((0, _toConsumableArray2["default"])(subdirs.map(function (dir) {
170
+ return {
171
+ value: "".concat(dir),
172
+ label: "".concat(type, "/").concat(dir)
173
+ };
174
+ })))
175
+ }
176
+ });
177
+
178
+ case 4:
179
+ match = _context2.sent;
180
+ resolvedDestination = _spruceSkillUtils.diskUtil.resolvePath(resolvedDestination, match);
181
+
182
+ case 6:
183
+ return _context2.abrupt("return", resolvedDestination);
184
+
185
+ case 7:
186
+ case "end":
187
+ return _context2.stop();
188
+ }
189
+ }
190
+ }, _callee2, this);
191
+ }));
192
+
193
+ function promptForSubDir(_x2, _x3) {
194
+ return _promptForSubDir.apply(this, arguments);
195
+ }
196
+
197
+ return promptForSubDir;
198
+ }()
199
+ }, {
200
+ key: "promptForParentTestClassAndOptionallyInstallDependencies",
201
+ value: function () {
202
+ var _promptForParentTestClassAndOptionallyInstallDependencies = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(candidates, parentTestClass, resolvedDestination) {
203
+ var idx, match;
204
+ return _regenerator["default"].wrap(function _callee3$(_context3) {
205
+ while (1) {
206
+ switch (_context3.prev = _context3.next) {
207
+ case 0:
208
+ _context3.next = 2;
93
209
  return this.ui.prompt({
94
210
  type: 'select',
95
211
  isRequired: true,
@@ -107,86 +223,71 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
107
223
  }
108
224
  });
109
225
 
110
- case 12:
111
- idx = _context.sent;
226
+ case 2:
227
+ idx = _context3.sent;
112
228
 
113
229
  if (!(idx !== '' && candidates[+idx])) {
114
- _context.next = 19;
230
+ _context3.next = 9;
115
231
  break;
116
232
  }
117
233
 
118
234
  match = candidates[+idx];
119
235
 
120
236
  if (!match) {
121
- _context.next = 19;
237
+ _context3.next = 9;
122
238
  break;
123
239
  }
124
240
 
125
- _context.next = 18;
241
+ _context3.next = 8;
126
242
  return this.optionallyInstallFeatureBasedOnSelection(match);
127
243
 
128
- case 18:
244
+ case 8:
129
245
  parentTestClass = this.buildParentClassFromCandidate(match, resolvedDestination);
130
246
 
131
- case 19:
132
- this.ui.startLoading('Generating test file...');
133
- writer = this.Writer('test');
134
- _context.next = 23;
135
- return writer.generateTest(resolvedDestination, _objectSpread(_objectSpread({}, normalizedOptions), {}, {
136
- type: type,
137
- nameCamel: nameCamel,
138
- parentTestClass: parentTestClass,
139
- namePascal: namePascal !== null && namePascal !== void 0 ? namePascal : _spruceSkillUtils.namesUtil.toPascal(nameCamel)
140
- }));
141
-
142
- case 23:
143
- results = _context.sent;
144
- return _context.abrupt("return", {
145
- files: results,
146
- hints: ["run `spruce test` in your skill when you're ready!"]
147
- });
247
+ case 9:
248
+ return _context3.abrupt("return", parentTestClass);
148
249
 
149
- case 25:
250
+ case 10:
150
251
  case "end":
151
- return _context.stop();
252
+ return _context3.stop();
152
253
  }
153
254
  }
154
- }, _callee, this);
255
+ }, _callee3, this);
155
256
  }));
156
257
 
157
- function execute(_x) {
158
- return _execute.apply(this, arguments);
258
+ function promptForParentTestClassAndOptionallyInstallDependencies(_x4, _x5, _x6) {
259
+ return _promptForParentTestClassAndOptionallyInstallDependencies.apply(this, arguments);
159
260
  }
160
261
 
161
- return execute;
262
+ return promptForParentTestClassAndOptionallyInstallDependencies;
162
263
  }()
163
264
  }, {
164
265
  key: "optionallyInstallFeatureBasedOnSelection",
165
266
  value: function () {
166
- var _optionallyInstallFeatureBasedOnSelection = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(match) {
267
+ var _optionallyInstallFeatureBasedOnSelection = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(match) {
167
268
  var isInstalled;
168
- return _regenerator["default"].wrap(function _callee2$(_context2) {
269
+ return _regenerator["default"].wrap(function _callee4$(_context4) {
169
270
  while (1) {
170
- switch (_context2.prev = _context2.next) {
271
+ switch (_context4.prev = _context4.next) {
171
272
  case 0:
172
273
  if (!match.featureCode) {
173
- _context2.next = 9;
274
+ _context4.next = 9;
174
275
  break;
175
276
  }
176
277
 
177
- _context2.next = 3;
278
+ _context4.next = 3;
178
279
  return this.featureInstaller.isInstalled(match.featureCode);
179
280
 
180
281
  case 3:
181
- isInstalled = _context2.sent;
282
+ isInstalled = _context4.sent;
182
283
 
183
284
  if (isInstalled) {
184
- _context2.next = 9;
285
+ _context4.next = 9;
185
286
  break;
186
287
  }
187
288
 
188
289
  this.ui.startLoading("Installing ".concat(match.name, "..."));
189
- _context2.next = 8;
290
+ _context4.next = 8;
190
291
  return this.featureInstaller.install({
191
292
  features: [{
192
293
  code: match.featureCode
@@ -198,13 +299,13 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
198
299
 
199
300
  case 9:
200
301
  case "end":
201
- return _context2.stop();
302
+ return _context4.stop();
202
303
  }
203
304
  }
204
- }, _callee2, this);
305
+ }, _callee4, this);
205
306
  }));
206
307
 
207
- function optionallyInstallFeatureBasedOnSelection(_x2) {
308
+ function optionallyInstallFeatureBasedOnSelection(_x7) {
208
309
  return _optionallyInstallFeatureBasedOnSelection.apply(this, arguments);
209
310
  }
210
311
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/features/test/actions/CreateAction.ts"],"names":["CreateAction","createTestActionSchema","options","normalizedOptions","validateAndNormalizeOptions","testDestinationDir","namePascal","nameCamel","type","resolvedDestination","diskUtil","resolvePath","cwd","ui","startLoading","testFeature","parent","buildParentClassCandidates","candidates","stopLoading","length","prompt","isRequired","label","choices","value","map","candidate","idx","match","optionallyInstallFeatureBasedOnSelection","parentTestClass","buildParentClassFromCandidate","writer","Writer","generateTest","namesUtil","toPascal","results","files","hints","featureCode","featureInstaller","isInstalled","name","install","features","code","isDefaultExport","importPath","pathUtil","relative","path","replace","extname","AbstractAction"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport createTestActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport TestFeature, { ParentClassCandidate } from '../TestFeature'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptions\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = createTestActionSchema\n\tpublic invocationMessage = 'Creating a test... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { testDestinationDir, namePascal, nameCamel, type } =\n\t\t\tnormalizedOptions\n\n\t\tconst resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\ttestDestinationDir,\n\t\t\ttype\n\t\t)\n\n\t\tthis.ui.startLoading('Checking potential parent test classes')\n\n\t\tconst testFeature = this.parent as TestFeature\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tthis.ui.stopLoading()\n\n\t\tlet parentTestClass:\n\t\t\t| undefined\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\n\t\tif (candidates.length > 0) {\n\t\t\tconst idx = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tisRequired: true,\n\t\t\t\tlabel: 'Which abstract test class do you want to extend?',\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: [\n\t\t\t\t\t\t{ value: '', label: 'AbstractSpruceTest (default)' },\n\t\t\t\t\t\t...candidates.map((candidate, idx) => ({\n\t\t\t\t\t\t\tvalue: `${idx}`,\n\t\t\t\t\t\t\tlabel: candidate.label,\n\t\t\t\t\t\t})),\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tif (idx !== '' && candidates[+idx]) {\n\t\t\t\tconst match = candidates[+idx]\n\n\t\t\t\tif (match) {\n\t\t\t\t\tawait this.optionallyInstallFeatureBasedOnSelection(match)\n\n\t\t\t\t\tparentTestClass = this.buildParentClassFromCandidate(\n\t\t\t\t\t\tmatch,\n\t\t\t\t\t\tresolvedDestination\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.ui.startLoading('Generating test file...')\n\n\t\tconst writer = this.Writer('test')\n\n\t\tconst results = await writer.generateTest(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\ttype,\n\t\t\tnameCamel,\n\t\t\tparentTestClass,\n\t\t\tnamePascal: namePascal ?? namesUtil.toPascal(nameCamel),\n\t\t})\n\n\t\treturn {\n\t\t\tfiles: results,\n\t\t\thints: [\"run `spruce test` in your skill when you're ready!\"],\n\t\t}\n\t}\n\tprivate async optionallyInstallFeatureBasedOnSelection(\n\t\tmatch: ParentClassCandidate\n\t) {\n\t\tif (match.featureCode) {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\tmatch.featureCode\n\t\t\t)\n\n\t\t\tif (!isInstalled) {\n\t\t\t\tthis.ui.startLoading(`Installing ${match.name}...`)\n\t\t\t\tawait this.featureInstaller.install({\n\t\t\t\t\tfeatures: [{ code: match.featureCode as any }],\n\t\t\t\t})\n\t\t\t\tthis.ui.stopLoading()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildParentClassFromCandidate(\n\t\tmatch: ParentClassCandidate,\n\t\tresolvedDestination: string\n\t): {\n\t\tname: string\n\t\tlabel: string\n\t\timportPath: string\n\t\tisDefaultExport: boolean\n\t} {\n\t\treturn {\n\t\t\tname: match.name,\n\t\t\tlabel: match.label,\n\t\t\tisDefaultExport: match.isDefaultExport,\n\t\t\timportPath:\n\t\t\t\tmatch.import ??\n\t\t\t\tpathUtil.relative(\n\t\t\t\t\tresolvedDestination,\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tmatch.path.replace(pathUtil.extname(match.path), '')\n\t\t\t\t),\n\t\t}\n\t}\n}\n"],"file":"CreateAction.js"}
1
+ {"version":3,"sources":["../../../../src/features/test/actions/CreateAction.ts"],"names":["CreateAction","createTestActionSchema","options","normalizedOptions","validateAndNormalizeOptions","testDestinationDir","namePascal","nameCamel","type","resolvedDestination","diskUtil","resolvePath","cwd","ui","startLoading","testFeature","parent","stopLoading","buildParentClassCandidates","candidates","length","promptForParentTestClassAndOptionallyInstallDependencies","parentTestClass","doesDirExist","promptForSubDir","writer","Writer","generateTest","namesUtil","toPascal","results","files","hints","subdirs","readDir","filter","d","isDir","prompt","label","isRequired","choices","value","map","dir","match","candidate","idx","optionallyInstallFeatureBasedOnSelection","buildParentClassFromCandidate","featureCode","featureInstaller","isInstalled","name","install","features","code","isDefaultExport","importPath","pathUtil","relative","path","replace","extname","AbstractAction"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport createTestActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport TestFeature, { ParentClassCandidate } from '../TestFeature'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptions\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = createTestActionSchema\n\tpublic invocationMessage = 'Creating a test... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { testDestinationDir, namePascal, nameCamel, type } =\n\t\t\tnormalizedOptions\n\n\t\tlet resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\ttestDestinationDir,\n\t\t\ttype\n\t\t)\n\n\t\tthis.ui.startLoading('Checking potential parent test classes')\n\n\t\tconst testFeature = this.parent as TestFeature\n\n\t\tthis.ui.stopLoading()\n\n\t\tlet parentTestClass:\n\t\t\t| undefined\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tif (candidates.length > 0) {\n\t\t\tparentTestClass =\n\t\t\t\tawait this.promptForParentTestClassAndOptionallyInstallDependencies(\n\t\t\t\t\tcandidates,\n\t\t\t\t\tparentTestClass,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t}\n\n\t\tif (diskUtil.doesDirExist(resolvedDestination)) {\n\t\t\tresolvedDestination = await this.promptForSubDir(\n\t\t\t\tresolvedDestination,\n\t\t\t\ttype\n\t\t\t)\n\t\t}\n\n\t\tthis.ui.startLoading('Generating test file...')\n\n\t\tconst writer = this.Writer('test')\n\n\t\tconst results = await writer.generateTest(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\ttype,\n\t\t\tnameCamel,\n\t\t\tparentTestClass,\n\t\t\tnamePascal: namePascal ?? namesUtil.toPascal(nameCamel),\n\t\t})\n\n\t\treturn {\n\t\t\tfiles: results,\n\t\t\thints: [\"run `spruce test` in your skill when you're ready!\"],\n\t\t}\n\t}\n\tprivate async promptForSubDir(resolvedDestination: string, type: string) {\n\t\tconst subdirs = diskUtil\n\t\t\t.readDir(resolvedDestination)\n\t\t\t.filter((d) =>\n\t\t\t\tdiskUtil.isDir(diskUtil.resolvePath(resolvedDestination, d))\n\t\t\t)\n\n\t\tif (subdirs.length > 0) {\n\t\t\tconst match = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Where should I write this test?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: '.',\n\t\t\t\t\t\t\tlabel: `${type}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...subdirs.map((dir) => ({\n\t\t\t\t\t\t\tvalue: `${dir}`,\n\t\t\t\t\t\t\tlabel: `${type}/${dir}`,\n\t\t\t\t\t\t})),\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tresolvedDestination = diskUtil.resolvePath(resolvedDestination, match)\n\t\t}\n\t\treturn resolvedDestination\n\t}\n\n\tprivate async promptForParentTestClassAndOptionallyInstallDependencies(\n\t\tcandidates: ParentClassCandidate[],\n\t\tparentTestClass:\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\t\t\t| undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tconst idx = await this.ui.prompt({\n\t\t\ttype: 'select',\n\t\t\tisRequired: true,\n\t\t\tlabel: 'Which abstract test class do you want to extend?',\n\t\t\toptions: {\n\t\t\t\tchoices: [\n\t\t\t\t\t{ value: '', label: 'AbstractSpruceTest (default)' },\n\t\t\t\t\t...candidates.map((candidate, idx) => ({\n\t\t\t\t\t\tvalue: `${idx}`,\n\t\t\t\t\t\tlabel: candidate.label,\n\t\t\t\t\t})),\n\t\t\t\t],\n\t\t\t},\n\t\t})\n\n\t\tif (idx !== '' && candidates[+idx]) {\n\t\t\tconst match = candidates[+idx]\n\n\t\t\tif (match) {\n\t\t\t\tawait this.optionallyInstallFeatureBasedOnSelection(match)\n\n\t\t\t\tparentTestClass = this.buildParentClassFromCandidate(\n\t\t\t\t\tmatch,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\treturn parentTestClass\n\t}\n\n\tprivate async optionallyInstallFeatureBasedOnSelection(\n\t\tmatch: ParentClassCandidate\n\t) {\n\t\tif (match.featureCode) {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\tmatch.featureCode\n\t\t\t)\n\n\t\t\tif (!isInstalled) {\n\t\t\t\tthis.ui.startLoading(`Installing ${match.name}...`)\n\t\t\t\tawait this.featureInstaller.install({\n\t\t\t\t\tfeatures: [{ code: match.featureCode as any }],\n\t\t\t\t})\n\t\t\t\tthis.ui.stopLoading()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildParentClassFromCandidate(\n\t\tmatch: ParentClassCandidate,\n\t\tresolvedDestination: string\n\t): {\n\t\tname: string\n\t\tlabel: string\n\t\timportPath: string\n\t\tisDefaultExport: boolean\n\t} {\n\t\treturn {\n\t\t\tname: match.name,\n\t\t\tlabel: match.label,\n\t\t\tisDefaultExport: match.isDefaultExport,\n\t\t\timportPath:\n\t\t\t\tmatch.import ??\n\t\t\t\tpathUtil.relative(\n\t\t\t\t\tresolvedDestination,\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tmatch.path.replace(pathUtil.extname(match.path), '')\n\t\t\t\t),\n\t\t}\n\t}\n}\n"],"file":"CreateAction.js"}
@@ -1,7 +1,8 @@
1
1
  import SpyInterface from '../../interfaces/SpyInterface';
2
- declare const uiAssertUtil: {
3
- assertRendersSelect(ui: SpyInterface): Promise<void>;
2
+ declare const uiAssert: {
3
+ assertRendersSelect(ui: SpyInterface): Promise<any>;
4
4
  assertSelectDidNotRenderChoice(ui: SpyInterface, value: string, label: string): void;
5
+ assertSelectRenderChoice(ui: SpyInterface, value: string, label: string): void;
5
6
  assertRendersConfirmWriteFile(ui: SpyInterface): Promise<void>;
6
7
  };
7
- export default uiAssertUtil;
8
+ export default uiAssert;
@@ -13,7 +13,7 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/
13
13
 
14
14
  var _test = require("@sprucelabs/test");
15
15
 
16
- var uiAssertUtil = {
16
+ var uiAssert = {
17
17
  assertRendersSelect: function assertRendersSelect(ui) {
18
18
  return (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee() {
19
19
  var last;
@@ -29,7 +29,9 @@ var uiAssertUtil = {
29
29
 
30
30
  _test.assert.isTruthy(last.options.options.choices, "I expected a select, I did not find one!");
31
31
 
32
- case 4:
32
+ return _context.abrupt("return", last.options);
33
+
34
+ case 5:
33
35
  case "end":
34
36
  return _context.stop();
35
37
  }
@@ -45,6 +47,14 @@ var uiAssertUtil = {
45
47
  label: label
46
48
  });
47
49
  },
50
+ assertSelectRenderChoice: function assertSelectRenderChoice(ui, value, label) {
51
+ var last = ui.getLastInvocation();
52
+
53
+ _test.assert.doesInclude(last.options.options.choices, {
54
+ value: value,
55
+ label: label
56
+ });
57
+ },
48
58
  assertRendersConfirmWriteFile: function assertRendersConfirmWriteFile(ui) {
49
59
  return (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
50
60
  var last;
@@ -80,6 +90,6 @@ var uiAssertUtil = {
80
90
  }))();
81
91
  }
82
92
  };
83
- var _default = uiAssertUtil;
93
+ var _default = uiAssert;
84
94
  exports["default"] = _default;
85
95
  //# sourceMappingURL=uiAssert.utility.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/tests/utilities/uiAssert.utility.ts"],"names":["uiAssertUtil","assertRendersSelect","ui","waitForInput","last","getLastInvocation","assert","isTruthy","options","choices","assertSelectDidNotRenderChoice","value","label","doesNotInclude","assertRendersConfirmWriteFile","isEqual","type","isEqualDeep"],"mappings":";;;;;;;;;;;;;AAAA;;AAGA,IAAMA,YAAY,GAAG;AACdC,EAAAA,mBADc,+BACMC,EADN,EACwB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACrCA,EAAE,CAACC,YAAH,EADqC;;AAAA;AAGrCC,cAAAA,IAHqC,GAG9BF,EAAE,CAACG,iBAAH,EAH8B;;AAI3CC,2BAAOC,QAAP,CACCH,IAAI,CAACI,OAAL,CAAaA,OAAb,CAAqBC,OADtB;;AAJ2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ3C,GATmB;AAWpBC,EAAAA,8BAXoB,0CAYnBR,EAZmB,EAanBS,KAbmB,EAcnBC,KAdmB,EAelB;AACD,QAAMR,IAAI,GAAGF,EAAE,CAACG,iBAAH,EAAb;;AAEAC,iBAAOO,cAAP,CAAsBT,IAAI,CAACI,OAAL,CAAaA,OAAb,CAAqBC,OAA3C,EAAoD;AACnDE,MAAAA,KAAK,EAALA,KADmD;AAEnDC,MAAAA,KAAK,EAALA;AAFmD,KAApD;AAIA,GAtBmB;AAwBdE,EAAAA,6BAxBc,yCAwBgBZ,EAxBhB,EAwBkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAC/CA,EAAE,CAACC,YAAH,EAD+C;;AAAA;AAG/CC,cAAAA,IAH+C,GAGxCF,EAAE,CAACG,iBAAH,EAHwC;;AAKrDC,2BAAOS,OAAP,CAAeX,IAAI,CAACI,OAAL,CAAaQ,IAA5B,EAAkC,QAAlC;;AACAV,2BAAOW,WAAP,CAAmBb,IAAI,CAACI,OAAL,CAAaA,OAAb,CAAqBC,OAAxC,EAAiD,CAChD;AACCG,gBAAAA,KAAK,EAAE,WADR;AAECD,gBAAAA,KAAK,EAAE;AAFR,eADgD,EAKhD;AAAEA,gBAAAA,KAAK,EAAE,MAAT;AAAiBC,gBAAAA,KAAK,EAAE;AAAxB,eALgD,EAMhD;AAAED,gBAAAA,KAAK,EAAE,YAAT;AAAuBC,gBAAAA,KAAK,EAAE;AAA9B,eANgD,CAAjD;;AANqD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcrD;AAtCmB,CAArB;eAyCeZ,Y","sourcesContent":["import { assert } from '@sprucelabs/test'\nimport SpyInterface from '../../interfaces/SpyInterface'\n\nconst uiAssertUtil = {\n\tasync assertRendersSelect(ui: SpyInterface) {\n\t\tawait ui.waitForInput()\n\n\t\tconst last = ui.getLastInvocation()\n\t\tassert.isTruthy(\n\t\t\tlast.options.options.choices,\n\t\t\t`I expected a select, I did not find one!`\n\t\t)\n\t},\n\n\tassertSelectDidNotRenderChoice(\n\t\tui: SpyInterface,\n\t\tvalue: string,\n\t\tlabel: string\n\t) {\n\t\tconst last = ui.getLastInvocation()\n\n\t\tassert.doesNotInclude(last.options.options.choices, {\n\t\t\tvalue,\n\t\t\tlabel,\n\t\t})\n\t},\n\n\tasync assertRendersConfirmWriteFile(ui: SpyInterface) {\n\t\tawait ui.waitForInput()\n\n\t\tconst last = ui.getLastInvocation()\n\n\t\tassert.isEqual(last.options.type, 'select')\n\t\tassert.isEqualDeep(last.options.options.choices, [\n\t\t\t{\n\t\t\t\tlabel: 'Overwrite',\n\t\t\t\tvalue: 'overwrite',\n\t\t\t},\n\t\t\t{ value: 'skip', label: 'Skip' },\n\t\t\t{ value: 'alwaysSkip', label: 'Always skip' },\n\t\t])\n\t},\n}\n\nexport default uiAssertUtil\n"],"file":"uiAssert.utility.js"}
1
+ {"version":3,"sources":["../../../src/tests/utilities/uiAssert.utility.ts"],"names":["uiAssert","assertRendersSelect","ui","waitForInput","last","getLastInvocation","assert","isTruthy","options","choices","assertSelectDidNotRenderChoice","value","label","doesNotInclude","assertSelectRenderChoice","doesInclude","assertRendersConfirmWriteFile","isEqual","type","isEqualDeep"],"mappings":";;;;;;;;;;;;;AAAA;;AAGA,IAAMA,QAAQ,GAAG;AACVC,EAAAA,mBADU,+BACUC,EADV,EAC4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBACrCA,EAAE,CAACC,YAAH,EADqC;;AAAA;AAGrCC,cAAAA,IAHqC,GAG9BF,EAAE,CAACG,iBAAH,EAH8B;;AAI3CC,2BAAOC,QAAP,CACCH,IAAI,CAACI,OAAL,CAAaA,OAAb,CAAqBC,OADtB;;AAJ2C,+CASpCL,IAAI,CAACI,OAT+B;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAU3C,GAXe;AAahBE,EAAAA,8BAbgB,0CAcfR,EAde,EAefS,KAfe,EAgBfC,KAhBe,EAiBd;AACD,QAAMR,IAAI,GAAGF,EAAE,CAACG,iBAAH,EAAb;;AAEAC,iBAAOO,cAAP,CAAsBT,IAAI,CAACI,OAAL,CAAaA,OAAb,CAAqBC,OAA3C,EAAoD;AACnDE,MAAAA,KAAK,EAALA,KADmD;AAEnDC,MAAAA,KAAK,EAALA;AAFmD,KAApD;AAIA,GAxBe;AA0BhBE,EAAAA,wBA1BgB,oCA0BSZ,EA1BT,EA0B2BS,KA1B3B,EA0B0CC,KA1B1C,EA0ByD;AACxE,QAAMR,IAAI,GAAGF,EAAE,CAACG,iBAAH,EAAb;;AAEAC,iBAAOS,WAAP,CAAmBX,IAAI,CAACI,OAAL,CAAaA,OAAb,CAAqBC,OAAxC,EAAiD;AAChDE,MAAAA,KAAK,EAALA,KADgD;AAEhDC,MAAAA,KAAK,EAALA;AAFgD,KAAjD;AAIA,GAjCe;AAmCVI,EAAAA,6BAnCU,yCAmCoBd,EAnCpB,EAmCsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAC/CA,EAAE,CAACC,YAAH,EAD+C;;AAAA;AAG/CC,cAAAA,IAH+C,GAGxCF,EAAE,CAACG,iBAAH,EAHwC;;AAKrDC,2BAAOW,OAAP,CAAeb,IAAI,CAACI,OAAL,CAAaU,IAA5B,EAAkC,QAAlC;;AACAZ,2BAAOa,WAAP,CAAmBf,IAAI,CAACI,OAAL,CAAaA,OAAb,CAAqBC,OAAxC,EAAiD,CAChD;AACCG,gBAAAA,KAAK,EAAE,WADR;AAECD,gBAAAA,KAAK,EAAE;AAFR,eADgD,EAKhD;AAAEA,gBAAAA,KAAK,EAAE,MAAT;AAAiBC,gBAAAA,KAAK,EAAE;AAAxB,eALgD,EAMhD;AAAED,gBAAAA,KAAK,EAAE,YAAT;AAAuBC,gBAAAA,KAAK,EAAE;AAA9B,eANgD,CAAjD;;AANqD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcrD;AAjDe,CAAjB;eAoDeZ,Q","sourcesContent":["import { assert } from '@sprucelabs/test'\nimport SpyInterface from '../../interfaces/SpyInterface'\n\nconst uiAssert = {\n\tasync assertRendersSelect(ui: SpyInterface) {\n\t\tawait ui.waitForInput()\n\n\t\tconst last = ui.getLastInvocation()\n\t\tassert.isTruthy(\n\t\t\tlast.options.options.choices,\n\t\t\t`I expected a select, I did not find one!`\n\t\t)\n\n\t\treturn last.options\n\t},\n\n\tassertSelectDidNotRenderChoice(\n\t\tui: SpyInterface,\n\t\tvalue: string,\n\t\tlabel: string\n\t) {\n\t\tconst last = ui.getLastInvocation()\n\n\t\tassert.doesNotInclude(last.options.options.choices, {\n\t\t\tvalue,\n\t\t\tlabel,\n\t\t})\n\t},\n\n\tassertSelectRenderChoice(ui: SpyInterface, value: string, label: string) {\n\t\tconst last = ui.getLastInvocation()\n\n\t\tassert.doesInclude(last.options.options.choices, {\n\t\t\tvalue,\n\t\t\tlabel,\n\t\t})\n\t},\n\n\tasync assertRendersConfirmWriteFile(ui: SpyInterface) {\n\t\tawait ui.waitForInput()\n\n\t\tconst last = ui.getLastInvocation()\n\n\t\tassert.isEqual(last.options.type, 'select')\n\t\tassert.isEqualDeep(last.options.options.choices, [\n\t\t\t{\n\t\t\t\tlabel: 'Overwrite',\n\t\t\t\tvalue: 'overwrite',\n\t\t\t},\n\t\t\t{ value: 'skip', label: 'Skip' },\n\t\t\t{ value: 'alwaysSkip', label: 'Always skip' },\n\t\t])\n\t},\n}\n\nexport default uiAssert\n"],"file":"uiAssert.utility.js"}
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  ]
19
19
  },
20
20
  "license": "MIT",
21
- "version": "15.1.8",
21
+ "version": "15.2.0",
22
22
  "bin": {
23
23
  "spruce": "./build/index.js"
24
24
  },
@@ -88,7 +88,7 @@
88
88
  "@sprucelabs/spruce-event-utils": "^18.0.70",
89
89
  "@sprucelabs/spruce-skill-booter": "^24.0.53",
90
90
  "@sprucelabs/spruce-skill-utils": "^24.1.16",
91
- "@sprucelabs/spruce-templates": "^15.1.8",
91
+ "@sprucelabs/spruce-templates": "^15.2.0",
92
92
  "@typescript-eslint/eslint-plugin": "^5.11.0",
93
93
  "@typescript-eslint/parser": "^5.11.0",
94
94
  "cfonts": "^2.10.0",
@@ -597,5 +597,5 @@
597
597
  "ora"
598
598
  ]
599
599
  },
600
- "gitHead": "93dac960f32a40a55c761aeaa42b6dc73704a3e6"
600
+ "gitHead": "ec064c3ab66d4a4252077a10eeb41265041f3bae"
601
601
  }
@@ -1,7 +1,7 @@
1
1
  import { test, assert } from '@sprucelabs/test'
2
2
  import { errorAssertUtil } from '@sprucelabs/test-utils'
3
3
  import AbstractSkillTest from '../../tests/AbstractSkillTest'
4
- import uiAssertUtil from '../../tests/utilities/uiAssert.utility'
4
+ import uiAssert from '../../tests/utilities/uiAssert.utility'
5
5
 
6
6
  export default class ConfiguringDependenciesTest extends AbstractSkillTest {
7
7
  protected static skillCacheKey = 'skills'
@@ -107,7 +107,7 @@ export default class ConfiguringDependenciesTest extends AbstractSkillTest {
107
107
 
108
108
  await this.waitForInput()
109
109
 
110
- uiAssertUtil.assertSelectDidNotRenderChoice(
110
+ uiAssert.assertSelectDidNotRenderChoice(
111
111
  this.ui,
112
112
  this.parentSkill.slug,
113
113
  this.parentSkill.name
@@ -2,7 +2,7 @@ import { diskUtil } from '@sprucelabs/spruce-skill-utils'
2
2
  import { test, assert } from '@sprucelabs/test'
3
3
  import CommandService from '../../services/CommandService'
4
4
  import AbstractCliTest from '../../tests/AbstractCliTest'
5
- import uiAssertUtil from '../../tests/utilities/uiAssert.utility'
5
+ import uiAssert from '../../tests/utilities/uiAssert.utility'
6
6
 
7
7
  export default class UpgradingANodeModuleTest extends AbstractCliTest {
8
8
  protected static async beforeEach() {
@@ -58,7 +58,7 @@ export default class UpgradingANodeModuleTest extends AbstractCliTest {
58
58
 
59
59
  const promise = this.Action('node', 'upgrade').execute({})
60
60
 
61
- await uiAssertUtil.assertRendersConfirmWriteFile(this.ui)
61
+ await uiAssert.assertRendersConfirmWriteFile(this.ui)
62
62
 
63
63
  assert.isEqual(
64
64
  diskUtil.readFile(this.resolvePath('src/index.ts')),
@@ -10,7 +10,7 @@ import { CliInterface } from '../../../cli'
10
10
  import { FeatureActionResponse } from '../../../features/features.types'
11
11
  import AbstractEventTest from '../../../tests/AbstractEventTest'
12
12
  import testUtil from '../../../tests/utilities/test.utility'
13
- import uiAssertUtil from '../../../tests/utilities/uiAssert.utility'
13
+ import uiAssert from '../../../tests/utilities/uiAssert.utility'
14
14
  import { RegisteredSkill } from '../../../types/cli.types'
15
15
  import actionUtil from '../../../utilities/action.utility'
16
16
 
@@ -159,7 +159,7 @@ export default createFormEmitPayloadBuilder
159
159
  nameCamel: EVENT_CAMEL,
160
160
  })
161
161
 
162
- await uiAssertUtil.assertRendersSelect(this.ui)
162
+ await uiAssert.assertRendersSelect(this.ui)
163
163
 
164
164
  this.ui.reset()
165
165
  }