@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.
- package/CHANGELOG.md +35 -0
- package/build/__tests__/behavioral/AddingADependency.test.js.map +1 -1
- package/build/__tests__/behavioral/UpgradingANodeModule.test.js.map +1 -1
- package/build/__tests__/behavioral/events/CreatingAnEvent.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/CreatingATest.test.d.ts +9 -1
- package/build/__tests__/behavioral/tests/CreatingATest.test.js +316 -26
- package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.d.ts +5 -0
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +331 -160
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
- package/build/features/test/actions/CreateAction.d.ts +2 -0
- package/build/features/test/actions/CreateAction.js +147 -46
- package/build/features/test/actions/CreateAction.js.map +1 -1
- package/build/tests/utilities/uiAssert.utility.d.ts +4 -3
- package/build/tests/utilities/uiAssert.utility.js +13 -3
- package/build/tests/utilities/uiAssert.utility.js.map +1 -1
- package/package.json +26 -26
- package/src/__tests__/behavioral/AddingADependency.test.ts +2 -2
- package/src/__tests__/behavioral/UpgradingANodeModule.test.ts +2 -2
- package/src/__tests__/behavioral/events/CreatingAnEvent.test.ts +2 -2
- package/src/__tests__/behavioral/tests/CreatingATest.test.ts +125 -11
- package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +62 -23
- package/src/features/test/actions/CreateAction.ts +83 -28
- 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,
|
|
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
|
-
|
|
80
|
+
this.ui.stopLoading();
|
|
81
|
+
_context.next = 8;
|
|
81
82
|
return testFeature.buildParentClassCandidates();
|
|
82
83
|
|
|
83
|
-
case
|
|
84
|
+
case 8:
|
|
84
85
|
candidates = _context.sent;
|
|
85
|
-
this.ui.stopLoading();
|
|
86
86
|
|
|
87
|
-
if (!(
|
|
88
|
-
_context.next =
|
|
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
|
|
111
|
-
idx =
|
|
226
|
+
case 2:
|
|
227
|
+
idx = _context3.sent;
|
|
112
228
|
|
|
113
229
|
if (!(idx !== '' && candidates[+idx])) {
|
|
114
|
-
|
|
230
|
+
_context3.next = 9;
|
|
115
231
|
break;
|
|
116
232
|
}
|
|
117
233
|
|
|
118
234
|
match = candidates[+idx];
|
|
119
235
|
|
|
120
236
|
if (!match) {
|
|
121
|
-
|
|
237
|
+
_context3.next = 9;
|
|
122
238
|
break;
|
|
123
239
|
}
|
|
124
240
|
|
|
125
|
-
|
|
241
|
+
_context3.next = 8;
|
|
126
242
|
return this.optionallyInstallFeatureBasedOnSelection(match);
|
|
127
243
|
|
|
128
|
-
case
|
|
244
|
+
case 8:
|
|
129
245
|
parentTestClass = this.buildParentClassFromCandidate(match, resolvedDestination);
|
|
130
246
|
|
|
131
|
-
case
|
|
132
|
-
|
|
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
|
|
250
|
+
case 10:
|
|
150
251
|
case "end":
|
|
151
|
-
return
|
|
252
|
+
return _context3.stop();
|
|
152
253
|
}
|
|
153
254
|
}
|
|
154
|
-
},
|
|
255
|
+
}, _callee3, this);
|
|
155
256
|
}));
|
|
156
257
|
|
|
157
|
-
function
|
|
158
|
-
return
|
|
258
|
+
function promptForParentTestClassAndOptionallyInstallDependencies(_x4, _x5, _x6) {
|
|
259
|
+
return _promptForParentTestClassAndOptionallyInstallDependencies.apply(this, arguments);
|
|
159
260
|
}
|
|
160
261
|
|
|
161
|
-
return
|
|
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
|
|
267
|
+
var _optionallyInstallFeatureBasedOnSelection = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(match) {
|
|
167
268
|
var isInstalled;
|
|
168
|
-
return _regenerator["default"].wrap(function
|
|
269
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
169
270
|
while (1) {
|
|
170
|
-
switch (
|
|
271
|
+
switch (_context4.prev = _context4.next) {
|
|
171
272
|
case 0:
|
|
172
273
|
if (!match.featureCode) {
|
|
173
|
-
|
|
274
|
+
_context4.next = 9;
|
|
174
275
|
break;
|
|
175
276
|
}
|
|
176
277
|
|
|
177
|
-
|
|
278
|
+
_context4.next = 3;
|
|
178
279
|
return this.featureInstaller.isInstalled(match.featureCode);
|
|
179
280
|
|
|
180
281
|
case 3:
|
|
181
|
-
isInstalled =
|
|
282
|
+
isInstalled = _context4.sent;
|
|
182
283
|
|
|
183
284
|
if (isInstalled) {
|
|
184
|
-
|
|
285
|
+
_context4.next = 9;
|
|
185
286
|
break;
|
|
186
287
|
}
|
|
187
288
|
|
|
188
289
|
this.ui.startLoading("Installing ".concat(match.name, "..."));
|
|
189
|
-
|
|
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
|
|
302
|
+
return _context4.stop();
|
|
202
303
|
}
|
|
203
304
|
}
|
|
204
|
-
},
|
|
305
|
+
}, _callee4, this);
|
|
205
306
|
}));
|
|
206
307
|
|
|
207
|
-
function optionallyInstallFeatureBasedOnSelection(
|
|
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
|
|
3
|
-
assertRendersSelect(ui: SpyInterface): Promise<
|
|
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
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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":["
|
|
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.
|
|
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.
|
|
80
|
-
"@sprucelabs/heartwood-view-controllers": "^63.3.
|
|
81
|
-
"@sprucelabs/jest-json-reporter": "^6.0.
|
|
82
|
-
"@sprucelabs/mercury-client": "^21.0.
|
|
83
|
-
"@sprucelabs/mercury-event-emitter": "^21.0.
|
|
84
|
-
"@sprucelabs/mercury-types": "^27.0.
|
|
85
|
-
"@sprucelabs/schema": "^26.0.
|
|
86
|
-
"@sprucelabs/spruce-core-schemas": "^23.0.
|
|
87
|
-
"@sprucelabs/spruce-event-plugin": "^24.0.
|
|
88
|
-
"@sprucelabs/spruce-event-utils": "^18.0.
|
|
89
|
-
"@sprucelabs/spruce-skill-booter": "^24.0.
|
|
90
|
-
"@sprucelabs/spruce-skill-utils": "^24.1.
|
|
91
|
-
"@sprucelabs/spruce-templates": "^15.
|
|
92
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
93
|
-
"@typescript-eslint/parser": "^5.
|
|
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.
|
|
123
|
-
"@sprucelabs/jest-sheets-reporter": "^1.3.
|
|
124
|
-
"@sprucelabs/mercury-core-events": "^2.0.
|
|
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.
|
|
127
|
-
"@sprucelabs/spruce-deploy-plugin": "^24.0.
|
|
128
|
-
"@sprucelabs/spruce-store-plugin": "^24.0.
|
|
129
|
-
"@sprucelabs/spruce-test-fixtures": "^24.0.
|
|
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.
|
|
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.
|
|
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": "
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
162
|
+
await uiAssert.assertRendersSelect(this.ui)
|
|
163
163
|
|
|
164
164
|
this.ui.reset()
|
|
165
165
|
}
|