@sprucelabs/spruce-cli 15.1.8 → 15.2.3

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 (24) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/build/__tests__/behavioral/AddingADependency.test.js.map +1 -1
  3. package/build/__tests__/behavioral/UpgradingANodeModule.test.js.map +1 -1
  4. package/build/__tests__/behavioral/events/CreatingAnEvent.test.js.map +1 -1
  5. package/build/__tests__/behavioral/tests/CreatingATest.test.d.ts +9 -1
  6. package/build/__tests__/behavioral/tests/CreatingATest.test.js +316 -26
  7. package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
  8. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.d.ts +5 -0
  9. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +331 -160
  10. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
  11. package/build/features/test/actions/CreateAction.d.ts +2 -0
  12. package/build/features/test/actions/CreateAction.js +147 -46
  13. package/build/features/test/actions/CreateAction.js.map +1 -1
  14. package/build/tests/utilities/uiAssert.utility.d.ts +4 -3
  15. package/build/tests/utilities/uiAssert.utility.js +13 -3
  16. package/build/tests/utilities/uiAssert.utility.js.map +1 -1
  17. package/package.json +26 -26
  18. package/src/__tests__/behavioral/AddingADependency.test.ts +2 -2
  19. package/src/__tests__/behavioral/UpgradingANodeModule.test.ts +2 -2
  20. package/src/__tests__/behavioral/events/CreatingAnEvent.test.ts +2 -2
  21. package/src/__tests__/behavioral/tests/CreatingATest.test.ts +125 -11
  22. package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +62 -23
  23. package/src/features/test/actions/CreateAction.ts +83 -28
  24. package/src/tests/utilities/uiAssert.utility.ts +13 -2
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts"],"names":["expectedAbstractTests","featuresWithRegisteredTests","featureCode","className","SelectingAnAbstractTestClassTest","installTests","copyTestFiles","executeCreateUntilAbstractClassSelection","choices","promise","expected","assert","doesInclude","label","selectOptionBasedOnLabel","results","testUtil","assertFileByNameInGeneratedFiles","files","Service","build","doesThrowAsync","execute","cli","on","abstractClasses","name","isFalsy","errors","match","contents","diskUtil","readFile","CommandService","setMockResponse","RegExp","code","testFeature","getFeatureInstaller","getFeature","feat","install","features","buildParentClassCandidates","candidates","isTruthy","find","cwd","createRandomTempDir","c","includes","isInstalled","isFalse","ui","sendInput","value","isTrue","source","resolveTestPath","destination","resolvePath","copyDir","Action","type","nameReadable","nameCamel","waitForInput","last","getLastInvocation","options","AbstractTestTest"],"mappings":"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","sourcesContent":["import { SelectChoice } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport { FeatureCode } from '../../../features/features.types'\nimport CommandService from '../../../services/CommandService'\nimport AbstractTestTest from '../../../tests/AbstractTestTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nconst expectedAbstractTests = [\n\t'AbstractSpruceTest (default)',\n\t'AbstractStoreTest (requires install)',\n\t'AbstractViewControllerTest (requires install)',\n\t'AbstractSpruceFixtureTest',\n\t'AbstractTest',\n\t'AbstractTest2',\n\t'AbstractBananaTestDifferentThanFileName',\n]\n\nconst featuresWithRegisteredTests: {\n\tfeatureCode: FeatureCode\n\tclassName: string\n}[] = [\n\t{ featureCode: 'store', className: 'AbstractStoreTest' },\n\t{ featureCode: 'view', className: 'AbstractViewControllerTest' },\n]\n\nexport default class SelectingAnAbstractTestClassTest extends AbstractTestTest {\n\t@test()\n\tprotected static async asksForYouToSelectABaseClass() {\n\t\tawait this.installTests()\n\t\tawait this.copyTestFiles()\n\n\t\tconst { choices, promise } =\n\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\tfor (const expected of expectedAbstractTests) {\n\t\t\tassert.doesInclude(choices, { label: expected })\n\t\t}\n\n\t\tthis.selectOptionBasedOnLabel('AbstractBananaTestDifferentThanFileName')\n\n\t\tconst results = await promise\n\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresults.files\n\t\t)\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()\n\tprotected static async canSelectAbstractTestBasedOnEventEmitter() {\n\t\tconst cli = await this.installTests()\n\t\tvoid cli.on('test.register-abstract-test-classes', async () => {\n\t\t\treturn {\n\t\t\t\tabstractClasses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'TestClass',\n\t\t\t\t\t\tlabel: 'TestClass',\n\t\t\t\t\t\timport: '@sprucelabs/another-lib',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'TestClass2',\n\t\t\t\t\t\tlabel: 'TestClass2',\n\t\t\t\t\t\timport: '@sprucelabs/another-lib',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t})\n\n\t\tconst { choices, promise } =\n\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\tassert.doesInclude(choices, {\n\t\t\tlabel: 'TestClass',\n\t\t})\n\n\t\tassert.doesInclude(choices, {\n\t\t\tlabel: 'TestClass2',\n\t\t})\n\n\t\tthis.selectOptionBasedOnLabel('TestClass2')\n\n\t\tconst results = await promise\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tconst contents = diskUtil.readFile(match)\n\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t\"import { TestClass2 } from '@sprucelabs/another-lib'\"\n\t\t)\n\n\t\tassert.doesInclude(contents, 'extends TestClass2')\n\t}\n\n\t@test()\n\tprotected static async installingAFeatureRemovesLabelFromName() {\n\t\tCommandService.setMockResponse(new RegExp(/npm.*?install .*?/gis), {\n\t\t\tcode: 0,\n\t\t})\n\n\t\tawait this.installTests()\n\n\t\tconst testFeature = this.getFeatureInstaller().getFeature('test')\n\n\t\tfor (const feat of featuresWithRegisteredTests) {\n\t\t\tawait this.getFeatureInstaller().install({\n\t\t\t\tfeatures: [\n\t\t\t\t\t{\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\tcode: feat.featureCode,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\t\tassert.isTruthy(\n\t\t\t\tcandidates.find(({ name }) => {\n\t\t\t\t\treturn name === feat.className\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\t}\n\n\t@test()\n\tprotected static async selectingUninistalledTestInstallsTheFeature() {\n\t\tCommandService.setMockResponse(new RegExp(/npm.*?install .*?/gis), {\n\t\t\tcode: 0,\n\t\t})\n\n\t\tfor (const feat of featuresWithRegisteredTests) {\n\t\t\tthis.cwd = diskUtil.createRandomTempDir()\n\t\t\tawait this.installTests()\n\n\t\t\tconst { choices, promise } =\n\t\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\t\tconst match = choices.find((c: any) => c.label.includes(feat.className))\n\n\t\t\tassert.isTruthy(match)\n\n\t\t\tlet isInstalled = await this.getFeatureInstaller().isInstalled(\n\t\t\t\tfeat.featureCode as any\n\t\t\t)\n\t\t\tassert.isFalse(isInstalled)\n\n\t\t\tawait this.ui.sendInput(match?.value)\n\n\t\t\tawait promise\n\n\t\t\tisInstalled = await this.getFeatureInstaller().isInstalled(\n\t\t\t\tfeat.featureCode as any\n\t\t\t)\n\t\t\tassert.isTrue(isInstalled)\n\t\t}\n\t}\n\n\tprivate static async copyTestFiles() {\n\t\tconst source = this.resolveTestPath('abstract_tests')\n\t\tconst destination = this.resolvePath('src')\n\n\t\tawait diskUtil.copyDir(source, destination)\n\t}\n\n\tprivate static async executeCreateUntilAbstractClassSelection() {\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})\n\n\t\tawait this.waitForInput()\n\n\t\tconst last = this.ui.getLastInvocation()\n\t\tconst { choices } = last.options.options ?? {}\n\n\t\treturn { promise, choices } as {\n\t\t\tpromise: Promise<any>\n\t\t\tchoices: SelectChoice[]\n\t\t}\n\t}\n}\n"],"file":"SelectingAnAbstractTestClass.test.js"}
1
+ {"version":3,"sources":["../../../../src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts"],"names":["expectedAbstractTests","featuresWithRegisteredTests","featureCode","className","SelectingAnAbstractTestClassTest","installCopyTestFilesSelectLocalAbstractTest","promise","results","testUtil","assertFileByNameInGeneratedFiles","files","buildAndAssertTestFailsAsExpected","testDir","resolvePath","diskUtil","createDir","installAndCopyTestFiles","invokeCreateActionAndWaitForInput","ui","sendInput","waitForInput","selectOptionBasedOnLabel","installTests","cli","on","abstractClasses","name","label","executeCreateUntilAbstractClassSelection","choices","assert","doesInclude","isFalsy","errors","match","contents","readFile","CommandService","setMockResponse","RegExp","code","testFeature","getFeatureInstaller","getFeature","feat","install","features","buildParentClassCandidates","candidates","isTruthy","find","cwd","createRandomTempDir","c","includes","isInstalled","isFalse","value","isTrue","Service","build","doesThrowAsync","execute","expected","copyTestFiles","source","resolveTestPath","destination","copyDir","last","getLastInvocation","options","Action","type","nameReadable","nameCamel","AbstractTestTest"],"mappings":"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","sourcesContent":["import { SelectChoice } from '@sprucelabs/schema'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport { FeatureCode } from '../../../features/features.types'\nimport CommandService from '../../../services/CommandService'\nimport AbstractTestTest from '../../../tests/AbstractTestTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nconst expectedAbstractTests = [\n\t'AbstractSpruceTest (default)',\n\t'AbstractStoreTest (requires install)',\n\t'AbstractViewControllerTest (requires install)',\n\t'AbstractSpruceFixtureTest',\n\t'AbstractTest',\n\t'AbstractTest2',\n\t'AbstractBananaTestDifferentThanFileName',\n]\n\nconst featuresWithRegisteredTests: {\n\tfeatureCode: FeatureCode\n\tclassName: string\n}[] = [\n\t{ featureCode: 'store', className: 'AbstractStoreTest' },\n\t{ featureCode: 'view', className: 'AbstractViewControllerTest' },\n]\n\nexport default class SelectingAnAbstractTestClassTest extends AbstractTestTest {\n\t@test()\n\tprotected static async asksForYouToSelectABaseClass() {\n\t\tconst { promise } = await this.installCopyTestFilesSelectLocalAbstractTest()\n\n\t\tconst results = await promise\n\n\t\ttestUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tawait this.buildAndAssertTestFailsAsExpected()\n\t}\n\n\t@test()\n\tprotected static async canSelectAbstractClassWhileSelectingSubDir() {\n\t\tconst testDir = this.resolvePath('src', '__tests__', 'behavioral', 'taco')\n\t\tdiskUtil.createDir(testDir)\n\n\t\tawait this.installAndCopyTestFiles()\n\n\t\tconst { promise } = await this.invokeCreateActionAndWaitForInput()\n\n\t\tawait this.ui.sendInput('taco')\n\n\t\tawait this.waitForInput()\n\n\t\tthis.selectOptionBasedOnLabel('AbstractBananaTestDifferentThanFileName')\n\n\t\tawait promise\n\n\t\tawait this.buildAndAssertTestFailsAsExpected()\n\t}\n\n\t@test()\n\tprotected static async canSelectAbstractTestBasedOnEventEmitter() {\n\t\tconst cli = await this.installTests()\n\t\tvoid cli.on('test.register-abstract-test-classes', async () => {\n\t\t\treturn {\n\t\t\t\tabstractClasses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'TestClass',\n\t\t\t\t\t\tlabel: 'TestClass',\n\t\t\t\t\t\timport: '@sprucelabs/another-lib',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'TestClass2',\n\t\t\t\t\t\tlabel: 'TestClass2',\n\t\t\t\t\t\timport: '@sprucelabs/another-lib',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t})\n\n\t\tconst { choices, promise } =\n\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\tassert.doesInclude(choices, {\n\t\t\tlabel: 'TestClass',\n\t\t})\n\n\t\tassert.doesInclude(choices, {\n\t\t\tlabel: 'TestClass2',\n\t\t})\n\n\t\tthis.selectOptionBasedOnLabel('TestClass2')\n\n\t\tconst results = await promise\n\n\t\tassert.isFalsy(results.errors)\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresults.files\n\t\t)\n\n\t\tconst contents = diskUtil.readFile(match)\n\n\t\tassert.doesInclude(\n\t\t\tcontents,\n\t\t\t\"import { TestClass2 } from '@sprucelabs/another-lib'\"\n\t\t)\n\n\t\tassert.doesInclude(contents, 'extends TestClass2')\n\t}\n\n\t@test()\n\tprotected static async installingAFeatureRemovesLabelFromName() {\n\t\tCommandService.setMockResponse(new RegExp(/npm.*?install .*?/gis), {\n\t\t\tcode: 0,\n\t\t})\n\n\t\tawait this.installTests()\n\n\t\tconst testFeature = this.getFeatureInstaller().getFeature('test')\n\n\t\tfor (const feat of featuresWithRegisteredTests) {\n\t\t\tawait this.getFeatureInstaller().install({\n\t\t\t\tfeatures: [\n\t\t\t\t\t{\n\t\t\t\t\t\t//@ts-ignore\n\t\t\t\t\t\tcode: feat.featureCode,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t})\n\n\t\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\t\tassert.isTruthy(\n\t\t\t\tcandidates.find(({ name }) => {\n\t\t\t\t\treturn name === feat.className\n\t\t\t\t})\n\t\t\t)\n\t\t}\n\t}\n\n\t@test()\n\tprotected static async selectingUninistalledTestInstallsTheFeature() {\n\t\tCommandService.setMockResponse(new RegExp(/npm.*?install .*?/gis), {\n\t\t\tcode: 0,\n\t\t})\n\n\t\tfor (const feat of featuresWithRegisteredTests) {\n\t\t\tthis.cwd = diskUtil.createRandomTempDir()\n\t\t\tawait this.installTests()\n\n\t\t\tconst { choices, promise } =\n\t\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\t\tconst match = choices.find((c: any) => c.label.includes(feat.className))\n\n\t\t\tassert.isTruthy(match)\n\n\t\t\tlet isInstalled = await this.getFeatureInstaller().isInstalled(\n\t\t\t\tfeat.featureCode as any\n\t\t\t)\n\t\t\tassert.isFalse(isInstalled)\n\n\t\t\tawait this.ui.sendInput(match?.value)\n\n\t\t\tawait promise\n\n\t\t\tisInstalled = await this.getFeatureInstaller().isInstalled(\n\t\t\t\tfeat.featureCode as any\n\t\t\t)\n\t\t\tassert.isTrue(isInstalled)\n\t\t}\n\t}\n\n\tprivate static async buildAndAssertTestFailsAsExpected() {\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\tprivate static async installCopyTestFilesSelectLocalAbstractTest() {\n\t\tawait this.installAndCopyTestFiles()\n\n\t\tconst { choices, promise } =\n\t\t\tawait this.executeCreateUntilAbstractClassSelection()\n\n\t\tfor (const expected of expectedAbstractTests) {\n\t\t\tassert.doesInclude(choices, { label: expected })\n\t\t}\n\n\t\tthis.selectOptionBasedOnLabel('AbstractBananaTestDifferentThanFileName')\n\n\t\treturn { promise }\n\t}\n\n\tprivate static async installAndCopyTestFiles() {\n\t\tawait this.installTests()\n\t\tawait this.copyTestFiles()\n\t}\n\n\tprivate static async copyTestFiles() {\n\t\tconst source = this.resolveTestPath('abstract_tests')\n\t\tconst destination = this.resolvePath('src')\n\n\t\tawait diskUtil.copyDir(source, destination)\n\t}\n\n\tprivate static async executeCreateUntilAbstractClassSelection() {\n\t\tconst { promise } = await this.invokeCreateActionAndWaitForInput()\n\n\t\tconst last = this.ui.getLastInvocation()\n\t\tconst { choices } = last.options.options ?? {}\n\n\t\treturn { promise, choices } as {\n\t\t\tpromise: Promise<any>\n\t\t\tchoices: SelectChoice[]\n\t\t}\n\t}\n\n\tprivate static async invokeCreateActionAndWaitForInput() {\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})\n\n\t\tawait this.waitForInput()\n\t\treturn { promise }\n\t}\n}\n"],"file":"SelectingAnAbstractTestClass.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
- if (!(candidates.length > 0)) {
88
- _context.next = 19;
87
+ if (!_spruceSkillUtils.diskUtil.doesDirExist(resolvedDestination)) {
88
+ _context.next = 13;
89
89
  break;
90
90
  }
91
91
 
92
92
  _context.next = 12;
93
+ return this.promptForSubDir(resolvedDestination, type);
94
+
95
+ case 12:
96
+ resolvedDestination = _context.sent;
97
+
98
+ case 13:
99
+ if (!(candidates.length > 0)) {
100
+ _context.next = 17;
101
+ break;
102
+ }
103
+
104
+ _context.next = 16;
105
+ return this.promptForParentTestClassAndOptionallyInstallDependencies(candidates, parentTestClass, resolvedDestination);
106
+
107
+ case 16:
108
+ parentTestClass = _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","doesDirExist","promptForSubDir","length","promptForParentTestClassAndOptionallyInstallDependencies","parentTestClass","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 (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\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\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.3",
22
22
  "bin": {
23
23
  "spruce": "./build/index.js"
24
24
  },
@@ -76,21 +76,21 @@
76
76
  "@babel/plugin-proposal-decorators": "^7.17.2",
77
77
  "@babel/runtime": "^7.17.2",
78
78
  "@jest/reporters": "^27.5.1",
79
- "@sprucelabs/error": "^5.0.397",
80
- "@sprucelabs/heartwood-view-controllers": "^63.3.12",
81
- "@sprucelabs/jest-json-reporter": "^6.0.324",
82
- "@sprucelabs/mercury-client": "^21.0.50",
83
- "@sprucelabs/mercury-event-emitter": "^21.0.50",
84
- "@sprucelabs/mercury-types": "^27.0.70",
85
- "@sprucelabs/schema": "^26.0.66",
86
- "@sprucelabs/spruce-core-schemas": "^23.0.68",
87
- "@sprucelabs/spruce-event-plugin": "^24.0.53",
88
- "@sprucelabs/spruce-event-utils": "^18.0.70",
89
- "@sprucelabs/spruce-skill-booter": "^24.0.53",
90
- "@sprucelabs/spruce-skill-utils": "^24.1.16",
91
- "@sprucelabs/spruce-templates": "^15.1.8",
92
- "@typescript-eslint/eslint-plugin": "^5.11.0",
93
- "@typescript-eslint/parser": "^5.11.0",
79
+ "@sprucelabs/error": "^5.0.398",
80
+ "@sprucelabs/heartwood-view-controllers": "^63.3.22",
81
+ "@sprucelabs/jest-json-reporter": "^6.0.325",
82
+ "@sprucelabs/mercury-client": "^21.0.56",
83
+ "@sprucelabs/mercury-event-emitter": "^21.0.56",
84
+ "@sprucelabs/mercury-types": "^27.0.78",
85
+ "@sprucelabs/schema": "^26.0.73",
86
+ "@sprucelabs/spruce-core-schemas": "^23.0.76",
87
+ "@sprucelabs/spruce-event-plugin": "^24.0.60",
88
+ "@sprucelabs/spruce-event-utils": "^18.0.78",
89
+ "@sprucelabs/spruce-skill-booter": "^24.0.60",
90
+ "@sprucelabs/spruce-skill-utils": "^24.1.24",
91
+ "@sprucelabs/spruce-templates": "^15.2.3",
92
+ "@typescript-eslint/eslint-plugin": "^5.12.0",
93
+ "@typescript-eslint/parser": "^5.12.0",
94
94
  "cfonts": "^2.10.0",
95
95
  "chalk": "^4.1.2",
96
96
  "chokidar": "^3.5.3",
@@ -119,16 +119,16 @@
119
119
  "uuid": "^8.3.2"
120
120
  },
121
121
  "devDependencies": {
122
- "@sprucelabs/data-stores": "^8.0.73",
123
- "@sprucelabs/jest-sheets-reporter": "^1.3.8",
124
- "@sprucelabs/mercury-core-events": "^2.0.71",
122
+ "@sprucelabs/data-stores": "^8.0.81",
123
+ "@sprucelabs/jest-sheets-reporter": "^1.3.9",
124
+ "@sprucelabs/mercury-core-events": "^2.0.79",
125
125
  "@sprucelabs/resolve-path-aliases": "^1.0.260",
126
- "@sprucelabs/spruce-conversation-plugin": "^24.0.53",
127
- "@sprucelabs/spruce-deploy-plugin": "^24.0.53",
128
- "@sprucelabs/spruce-store-plugin": "^24.0.53",
129
- "@sprucelabs/spruce-test-fixtures": "^24.0.53",
126
+ "@sprucelabs/spruce-conversation-plugin": "^24.0.60",
127
+ "@sprucelabs/spruce-deploy-plugin": "^24.0.60",
128
+ "@sprucelabs/spruce-store-plugin": "^24.0.60",
129
+ "@sprucelabs/spruce-test-fixtures": "^24.0.60",
130
130
  "@sprucelabs/test": "^7.7.280",
131
- "@sprucelabs/test-utils": "^3.0.410",
131
+ "@sprucelabs/test-utils": "^3.0.412",
132
132
  "@types/blessed": "^0.1.19",
133
133
  "@types/eslint": "^8.4.1",
134
134
  "@types/fs-extra": "^9.0.13",
@@ -138,7 +138,7 @@
138
138
  "@types/lodash": "^4.14.178",
139
139
  "@types/md5": "^2.3.2",
140
140
  "@types/mkdirp": "^1.0.2",
141
- "@types/node": "^17.0.17",
141
+ "@types/node": "^17.0.18",
142
142
  "@types/promise.allsettled": "^1.0.3",
143
143
  "@types/ps-node": "^0.1.1",
144
144
  "@types/rimraf": "^3.0.2",
@@ -597,5 +597,5 @@
597
597
  "ora"
598
598
  ]
599
599
  },
600
- "gitHead": "93dac960f32a40a55c761aeaa42b6dc73704a3e6"
600
+ "gitHead": "7a84631f192343ce2a5914e62f41da51ef3e4f6b"
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
  }