@sprucelabs/spruce-cli 15.1.8 → 15.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -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 +322 -26
- package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
- package/build/features/test/actions/CreateAction.d.ts +2 -0
- package/build/features/test/actions/CreateAction.js +146 -45
- 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 +3 -3
- 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 +129 -10
- 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/CreatingATest.test.ts"],"names":["CreatingBehavioralTestsTest","assert","isFunction","Action","execute","installTests","testFeature","getFeatureInstaller","getFeature","buildParentClassCandidates","candidates","doesInclude","label","name","testName","LintService","enableLinting","promise","type","nameReadable","nameCamel","namePascal","waitForInput","selectOptionBasedOnLabel","response","match","testUtil","assertFileByNameInGeneratedFiles","files","Service","build","doesThrowAsync","AbstractTestTest"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;;;IAEqBA,2B,WACnB,iB,UAKA,iB,UAaA,gBACA,2DADA,EAEA,2BAFA,C,UAIA,gBACA,2DADA,EAEA,sCAFA,C;;;;;;;;;;;;;2GAtBD;AAAA;AAAA;AAAA;AAAA;AAECC,6BAAOC,UAAP,CAAkB,KAAKC,MAAL,CAAY,MAAZ,EAAoB,QAApB,EAA8BC,OAAhD;;AAFD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;8HAKA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAEO,KAAKC,YAAL,CAAkB,mBAAlB,CAFP;;AAAA;AAIOC,gBAAAA,WAJP,GAIqB,KAAKC,mBAAL,GAA2BC,UAA3B,CAAsC,MAAtC,CAJrB;AAAA;AAAA,uBAK0BF,WAAW,CAACG,0BAAZ,EAL1B;;AAAA;AAKOC,gBAAAA,UALP;;AAOCT,6BAAOU,WAAP,CAAmBD,UAAnB,EAA+B;AAC9BE,kBAAAA,KAAK,EAAE,8CADuB;AAE9BC,kBAAAA,IAAI,EAAE;AAFwB,iBAA/B;;AAPD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;;mHAaA,kBAQ+CC,QAR/C;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AASCC,wCAAYC,aAAZ;;AATD;AAAA,uBAUO,KAAKX,YAAL,EAVP;;AAAA;AAWOY,gBAAAA,OAXP,GAWiB,KAAKd,MAAL,CAAY,MAAZ,EAAoB,QAApB,EAA8BC,OAA9B,CAAsC;AACrDc,kBAAAA,IAAI,EAAE,YAD+C;AAErDC,kBAAAA,YAAY,EAAE,sBAFuC;AAGrDC,kBAAAA,SAAS,EAAE,oBAH0C;AAIrDC,kBAAAA,UAAU,EAAE;AAJyC,iBAAtC,CAXjB;AAAA;AAAA,uBAkBO,KAAKC,YAAL,EAlBP;;AAAA;AAoBC,qBAAKC,wBAAL,CAA8BT,QAA9B;AApBD;AAAA,uBAsBwBG,OAtBxB;;AAAA;AAsBOO,gBAAAA,QAtBP;AAwBOC,gBAAAA,KAxBP,GAwBeC,kBAASC,gCAAT,CACb,4BADa,EAEbH,QAAQ,CAACI,KAFI,CAxBf;;AA6BC3B,6BAAOU,WAAP,CAAmBc,KAAnB,EAA0B,YAA1B;;AA7BD;AAAA,uBA+BO,KAAKI,OAAL,CAAa,OAAb,EAAsBC,KAAtB,EA/BP;;AAAA;AAAA;AAAA,uBAiCO7B,aAAO8B,cAAP,CACL;AAAA,yBAAM,KAAI,CAACF,OAAL,CAAa,SAAb,EAAwBzB,OAAxB,CAAgC,WAAhC,CAAN;AAAA,iBADK,EAEL,2CAFK,CAjCP;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;EAnBwD4B,6B","sourcesContent":["import { test, assert } from '@sprucelabs/test'\nimport LintService from '../../../services/LintService'\nimport AbstractTestTest from '../../../tests/AbstractTestTest'\nimport testUtil from '../../../tests/utilities/test.utility'\n\nexport default class CreatingBehavioralTestsTest extends AbstractTestTest {\n\t@test()\n\tprotected static async hasCreateAction() {\n\t\tassert.isFunction(this.Action('test', 'create').execute)\n\t}\n\n\t@test()\n\tprotected static async requiresInstallIfSkilLNotInstalled() {\n\t\tawait this.installTests('testsInNodeModule')\n\n\t\tconst testFeature = this.getFeatureInstaller().getFeature('test')\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tassert.doesInclude(candidates, {\n\t\t\tlabel: 'AbstractSpruceFixtureTest (requires install)',\n\t\t\tname: 'AbstractSpruceFixtureTest',\n\t\t})\n\t}\n\n\t@test(\n\t\t'can create behavioral test with AbstractSpruceFixtureTest',\n\t\t'AbstractSpruceFixtureTest'\n\t)\n\t@test(\n\t\t'can create behavioral test with AbstractSpruceFixtureTest',\n\t\t'AbstractStoreTest (requires install)'\n\t)\n\tprotected static async canCreateBehavioralTest(testName: string) {\n\t\tLintService.enableLinting()\n\t\tawait this.installTests()\n\t\tconst promise = this.Action('test', 'create').execute({\n\t\t\ttype: 'behavioral',\n\t\t\tnameReadable: 'Can book appointment',\n\t\t\tnameCamel: 'canBookAppointment',\n\t\t\tnamePascal: 'CanBookAppointment',\n\t\t})\n\n\t\tawait this.waitForInput()\n\n\t\tthis.selectOptionBasedOnLabel(testName)\n\n\t\tconst response = await promise\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresponse.files\n\t\t)\n\n\t\tassert.doesInclude(match, 'behavioral')\n\n\t\tawait this.Service('build').build()\n\n\t\tawait assert.doesThrowAsync(\n\t\t\t() => this.Service('command').execute('yarn test'),\n\t\t\t/false.*?does not equal.*?true/gis\n\t\t)\n\t}\n}\n"],"file":"CreatingATest.test.js"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/__tests__/behavioral/tests/CreatingATest.test.ts"],"names":["CreatingBehavioralTestsTest","assert","isFunction","Action","execute","installTests","testFeature","getFeatureInstaller","getFeature","buildParentClassCandidates","candidates","doesInclude","label","name","testName","LintService","enableLinting","installAndStartTestActionAndWaitForInput","promise","selectOptionBasedOnLabel","response","match","testUtil","assertFileByNameInGeneratedFiles","files","Service","build","doesThrowAsync","testType","createTestSubDir","installStartTestSelectSubclassWaitForInput","uiAssert","assertSelectRenderChoice","ui","sendInput","dirs","dir","dirName","results","expectedPath","resolvePath","isEqual","path","file","resolveTestDir","diskUtil","writeFile","assertSelectDidNotRenderChoice","selectedSubClass","assertRendersSelect","newDir","createDir","testDirs","type","nameReadable","nameCamel","namePascal","waitForInput","AbstractTestTest"],"mappings":"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","sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { test, assert } from '@sprucelabs/test'\nimport LintService from '../../../services/LintService'\nimport AbstractTestTest from '../../../tests/AbstractTestTest'\nimport testUtil from '../../../tests/utilities/test.utility'\nimport uiAssert from '../../../tests/utilities/uiAssert.utility'\n\nexport default class CreatingBehavioralTestsTest extends AbstractTestTest {\n\t@test()\n\tprotected static async hasCreateAction() {\n\t\tassert.isFunction(this.Action('test', 'create').execute)\n\t}\n\n\t@test()\n\tprotected static async requiresInstallIfFeatureNotInstalled() {\n\t\tawait this.installTests('testsInNodeModule')\n\n\t\tconst testFeature = this.getFeatureInstaller().getFeature('test')\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tassert.doesInclude(candidates, {\n\t\t\tlabel: 'AbstractSpruceFixtureTest (requires install)',\n\t\t\tname: 'AbstractSpruceFixtureTest',\n\t\t})\n\t}\n\n\t@test(\n\t\t'can create behavioral test with AbstractSpruceFixtureTest',\n\t\t'AbstractSpruceFixtureTest'\n\t)\n\t@test(\n\t\t'can create behavioral test with AbstractSpruceFixtureTest',\n\t\t'AbstractStoreTest (requires install)'\n\t)\n\tprotected static async canCreateBehavioralTest(testName: string) {\n\t\tLintService.enableLinting()\n\t\tconst { promise } = await this.installAndStartTestActionAndWaitForInput()\n\n\t\tthis.selectOptionBasedOnLabel(testName)\n\n\t\tconst response = await promise\n\n\t\tconst match = testUtil.assertFileByNameInGeneratedFiles(\n\t\t\t'CanBookAppointment.test.ts',\n\t\t\tresponse.files\n\t\t)\n\n\t\tassert.doesInclude(match, 'behavioral')\n\n\t\tawait this.Service('build').build()\n\n\t\tawait assert.doesThrowAsync(\n\t\t\t() => this.Service('command').execute('yarn test'),\n\t\t\t/false.*?does not equal.*?true/gis\n\t\t)\n\t}\n\n\t@test('finds folders inside behavioral', 'behavioral')\n\t@test('finds folders inside implementation', 'implementation')\n\tprotected static async promptsToSelectFolderIfInsideTestDir(\n\t\ttestType: string\n\t) {\n\t\tawait this.installTests()\n\n\t\tthis.createTestSubDir(testType, 'dummy1')\n\n\t\tconst { promise } = await this.installStartTestSelectSubclassWaitForInput(\n\t\t\ttestType\n\t\t)\n\n\t\tuiAssert.assertSelectRenderChoice(this.ui, '.', testType)\n\t\tuiAssert.assertSelectRenderChoice(this.ui, `dummy1`, `${testType}/dummy1`)\n\n\t\tawait this.ui.sendInput('.')\n\n\t\tawait promise\n\t}\n\n\t@test()\n\tprotected static async listsManyDirsIfExistInsideTestDir() {\n\t\tawait this.installTests()\n\n\t\tconst dirs = ['dir1', 'dir2', 'dir3']\n\n\t\tfor (const dir of dirs) {\n\t\t\tthis.createTestSubDir('behavioral', dir)\n\t\t}\n\n\t\tconst { promise } = await this.installStartTestSelectSubclassWaitForInput()\n\n\t\tfor (const dir of dirs) {\n\t\t\tuiAssert.assertSelectRenderChoice(this.ui, `${dir}`, `behavioral/${dir}`)\n\t\t}\n\n\t\tawait this.ui.sendInput('.')\n\n\t\tawait promise\n\t}\n\n\t@test('can select subdir 1', 'test')\n\t@test('can select subdir 2', 'test-2')\n\tprotected static async selectingAnOptionRendersToSubDir(dirName: string) {\n\t\tawait this.installTests()\n\t\tthis.createTestSubDir('behavioral', dirName)\n\n\t\tconst { promise } = await this.installStartTestSelectSubclassWaitForInput(\n\t\t\t'behavioral'\n\t\t)\n\n\t\tawait this.ui.sendInput(`${dirName}`)\n\n\t\tconst results = await promise\n\n\t\tconst expectedPath = this.resolvePath(\n\t\t\t'src',\n\t\t\t'__tests__',\n\t\t\t'behavioral',\n\t\t\tdirName,\n\t\t\t'CanBookAppointment.test.ts'\n\t\t)\n\n\t\tassert.isEqual(expectedPath, results.files?.[0]?.path)\n\t}\n\n\t@test()\n\tprotected static async doesNotListFiles() {\n\t\tawait this.installTests()\n\t\tthis.createTestSubDir('behavioral', 'subdir')\n\n\t\tconst file = this.resolveTestDir('behavioral', 'test.ts')\n\t\tdiskUtil.writeFile(file, 'what the!?')\n\n\t\tconst { promise } = await this.installStartTestSelectSubclassWaitForInput()\n\n\t\tuiAssert.assertSelectDidNotRenderChoice(\n\t\t\tthis.ui,\n\t\t\t'test',\n\t\t\t`behavioral/test/test.ts`\n\t\t)\n\n\t\tawait promise\n\t}\n\n\tprivate static async installStartTestSelectSubclassWaitForInput(\n\t\ttestType?: string,\n\t\tselectedSubClass?: string\n\t) {\n\t\tconst { promise } = await this.installAndStartTestActionAndWaitForInput(\n\t\t\ttestType\n\t\t)\n\n\t\tawait this.ui.sendInput(selectedSubClass ?? '')\n\n\t\tawait uiAssert.assertRendersSelect(this.ui)\n\n\t\treturn { promise }\n\t}\n\n\tprivate static createTestSubDir(...testDirs: string[]) {\n\t\tconst newDir = this.resolveTestDir(...testDirs)\n\t\tdiskUtil.createDir(newDir)\n\t}\n\n\tprivate static resolveTestDir(...testDirs: string[]) {\n\t\treturn this.resolvePath('src', '__tests__', ...testDirs)\n\t}\n\n\tprivate static async installAndStartTestActionAndWaitForInput(\n\t\ttestType = 'behavioral'\n\t) {\n\t\tawait this.installTests()\n\t\tconst promise = this.Action('test', 'create').execute({\n\t\t\ttype: testType,\n\t\t\tnameReadable: 'Can book appointment',\n\t\t\tnameCamel: 'canBookAppointment',\n\t\t\tnamePascal: 'CanBookAppointment',\n\t\t})\n\n\t\tawait this.waitForInput()\n\t\treturn { promise }\n\t}\n}\n"],"file":"CreatingATest.test.js"}
|
|
@@ -7,6 +7,8 @@ export default class CreateAction extends AbstractAction<OptionsSchema> {
|
|
|
7
7
|
optionsSchema: SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema;
|
|
8
8
|
invocationMessage: string;
|
|
9
9
|
execute(options: Options): Promise<FeatureActionResponse>;
|
|
10
|
+
private promptForSubDir;
|
|
11
|
+
private promptForParentTestClassAndOptionallyInstallDependencies;
|
|
10
12
|
private optionallyInstallFeatureBasedOnSelection;
|
|
11
13
|
private buildParentClassFromCandidate;
|
|
12
14
|
}
|
|
@@ -67,7 +67,7 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
|
|
|
67
67
|
key: "execute",
|
|
68
68
|
value: function () {
|
|
69
69
|
var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(options) {
|
|
70
|
-
var normalizedOptions, testDestinationDir, namePascal, nameCamel, type, resolvedDestination, testFeature,
|
|
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
87
|
if (!(candidates.length > 0)) {
|
|
88
|
-
_context.next =
|
|
88
|
+
_context.next = 13;
|
|
89
89
|
break;
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
_context.next = 12;
|
|
93
|
+
return this.promptForParentTestClassAndOptionallyInstallDependencies(candidates, parentTestClass, resolvedDestination);
|
|
94
|
+
|
|
95
|
+
case 12:
|
|
96
|
+
parentTestClass = _context.sent;
|
|
97
|
+
|
|
98
|
+
case 13:
|
|
99
|
+
if (!_spruceSkillUtils.diskUtil.doesDirExist(resolvedDestination)) {
|
|
100
|
+
_context.next = 17;
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
_context.next = 16;
|
|
105
|
+
return this.promptForSubDir(resolvedDestination, type);
|
|
106
|
+
|
|
107
|
+
case 16:
|
|
108
|
+
resolvedDestination = _context.sent;
|
|
109
|
+
|
|
110
|
+
case 17:
|
|
111
|
+
this.ui.startLoading('Generating test file...');
|
|
112
|
+
writer = this.Writer('test');
|
|
113
|
+
_context.next = 21;
|
|
114
|
+
return writer.generateTest(resolvedDestination, _objectSpread(_objectSpread({}, normalizedOptions), {}, {
|
|
115
|
+
type: type,
|
|
116
|
+
nameCamel: nameCamel,
|
|
117
|
+
parentTestClass: parentTestClass,
|
|
118
|
+
namePascal: namePascal !== null && namePascal !== void 0 ? namePascal : _spruceSkillUtils.namesUtil.toPascal(nameCamel)
|
|
119
|
+
}));
|
|
120
|
+
|
|
121
|
+
case 21:
|
|
122
|
+
results = _context.sent;
|
|
123
|
+
return _context.abrupt("return", {
|
|
124
|
+
files: results,
|
|
125
|
+
hints: ["run `spruce test` in your skill when you're ready!"]
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
case 23:
|
|
129
|
+
case "end":
|
|
130
|
+
return _context.stop();
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}, _callee, this);
|
|
134
|
+
}));
|
|
135
|
+
|
|
136
|
+
function execute(_x) {
|
|
137
|
+
return _execute.apply(this, arguments);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
return execute;
|
|
141
|
+
}()
|
|
142
|
+
}, {
|
|
143
|
+
key: "promptForSubDir",
|
|
144
|
+
value: function () {
|
|
145
|
+
var _promptForSubDir = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(resolvedDestination, type) {
|
|
146
|
+
var subdirs, match;
|
|
147
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
148
|
+
while (1) {
|
|
149
|
+
switch (_context2.prev = _context2.next) {
|
|
150
|
+
case 0:
|
|
151
|
+
subdirs = _spruceSkillUtils.diskUtil.readDir(resolvedDestination).filter(function (d) {
|
|
152
|
+
return _spruceSkillUtils.diskUtil.isDir(_spruceSkillUtils.diskUtil.resolvePath(resolvedDestination, d));
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
if (!(subdirs.length > 0)) {
|
|
156
|
+
_context2.next = 6;
|
|
157
|
+
break;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
_context2.next = 4;
|
|
161
|
+
return this.ui.prompt({
|
|
162
|
+
type: 'select',
|
|
163
|
+
label: 'Where should I write this test?',
|
|
164
|
+
isRequired: true,
|
|
165
|
+
options: {
|
|
166
|
+
choices: [{
|
|
167
|
+
value: '.',
|
|
168
|
+
label: "".concat(type)
|
|
169
|
+
}].concat((0, _toConsumableArray2["default"])(subdirs.map(function (dir) {
|
|
170
|
+
return {
|
|
171
|
+
value: "".concat(dir),
|
|
172
|
+
label: "".concat(type, "/").concat(dir)
|
|
173
|
+
};
|
|
174
|
+
})))
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
case 4:
|
|
179
|
+
match = _context2.sent;
|
|
180
|
+
resolvedDestination = _spruceSkillUtils.diskUtil.resolvePath(resolvedDestination, match);
|
|
181
|
+
|
|
182
|
+
case 6:
|
|
183
|
+
return _context2.abrupt("return", resolvedDestination);
|
|
184
|
+
|
|
185
|
+
case 7:
|
|
186
|
+
case "end":
|
|
187
|
+
return _context2.stop();
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}, _callee2, this);
|
|
191
|
+
}));
|
|
192
|
+
|
|
193
|
+
function promptForSubDir(_x2, _x3) {
|
|
194
|
+
return _promptForSubDir.apply(this, arguments);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return promptForSubDir;
|
|
198
|
+
}()
|
|
199
|
+
}, {
|
|
200
|
+
key: "promptForParentTestClassAndOptionallyInstallDependencies",
|
|
201
|
+
value: function () {
|
|
202
|
+
var _promptForParentTestClassAndOptionallyInstallDependencies = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(candidates, parentTestClass, resolvedDestination) {
|
|
203
|
+
var idx, match;
|
|
204
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
205
|
+
while (1) {
|
|
206
|
+
switch (_context3.prev = _context3.next) {
|
|
207
|
+
case 0:
|
|
208
|
+
_context3.next = 2;
|
|
93
209
|
return this.ui.prompt({
|
|
94
210
|
type: 'select',
|
|
95
211
|
isRequired: true,
|
|
@@ -107,86 +223,71 @@ var CreateAction = /*#__PURE__*/function (_AbstractAction) {
|
|
|
107
223
|
}
|
|
108
224
|
});
|
|
109
225
|
|
|
110
|
-
case
|
|
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","length","promptForParentTestClassAndOptionallyInstallDependencies","parentTestClass","doesDirExist","promptForSubDir","writer","Writer","generateTest","namesUtil","toPascal","results","files","hints","subdirs","readDir","filter","d","isDir","prompt","label","isRequired","choices","value","map","dir","match","candidate","idx","optionallyInstallFeatureBasedOnSelection","buildParentClassFromCandidate","featureCode","featureInstaller","isInstalled","name","install","features","code","isDefaultExport","importPath","pathUtil","relative","path","replace","extname","AbstractAction"],"mappings":"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","sourcesContent":["import pathUtil from 'path'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { SpruceSchemas } from '#spruce/schemas/schemas.types'\nimport createTestActionSchema from '#spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport TestFeature, { ParentClassCandidate } from '../TestFeature'\n\ntype OptionsSchema = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptionsSchema\ntype Options = SpruceSchemas.SpruceCli.v2020_07_22.CreateTestOptions\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = createTestActionSchema\n\tpublic invocationMessage = 'Creating a test... 🛡'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst normalizedOptions = this.validateAndNormalizeOptions(options)\n\t\tconst { testDestinationDir, namePascal, nameCamel, type } =\n\t\t\tnormalizedOptions\n\n\t\tlet resolvedDestination = diskUtil.resolvePath(\n\t\t\tthis.cwd,\n\t\t\ttestDestinationDir,\n\t\t\ttype\n\t\t)\n\n\t\tthis.ui.startLoading('Checking potential parent test classes')\n\n\t\tconst testFeature = this.parent as TestFeature\n\n\t\tthis.ui.stopLoading()\n\n\t\tlet parentTestClass:\n\t\t\t| undefined\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\n\t\tconst candidates = await testFeature.buildParentClassCandidates()\n\n\t\tif (candidates.length > 0) {\n\t\t\tparentTestClass =\n\t\t\t\tawait this.promptForParentTestClassAndOptionallyInstallDependencies(\n\t\t\t\t\tcandidates,\n\t\t\t\t\tparentTestClass,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t}\n\n\t\tif (diskUtil.doesDirExist(resolvedDestination)) {\n\t\t\tresolvedDestination = await this.promptForSubDir(\n\t\t\t\tresolvedDestination,\n\t\t\t\ttype\n\t\t\t)\n\t\t}\n\n\t\tthis.ui.startLoading('Generating test file...')\n\n\t\tconst writer = this.Writer('test')\n\n\t\tconst results = await writer.generateTest(resolvedDestination, {\n\t\t\t...normalizedOptions,\n\t\t\ttype,\n\t\t\tnameCamel,\n\t\t\tparentTestClass,\n\t\t\tnamePascal: namePascal ?? namesUtil.toPascal(nameCamel),\n\t\t})\n\n\t\treturn {\n\t\t\tfiles: results,\n\t\t\thints: [\"run `spruce test` in your skill when you're ready!\"],\n\t\t}\n\t}\n\tprivate async promptForSubDir(resolvedDestination: string, type: string) {\n\t\tconst subdirs = diskUtil\n\t\t\t.readDir(resolvedDestination)\n\t\t\t.filter((d) =>\n\t\t\t\tdiskUtil.isDir(diskUtil.resolvePath(resolvedDestination, d))\n\t\t\t)\n\n\t\tif (subdirs.length > 0) {\n\t\t\tconst match = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Where should I write this test?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvalue: '.',\n\t\t\t\t\t\t\tlabel: `${type}`,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t...subdirs.map((dir) => ({\n\t\t\t\t\t\t\tvalue: `${dir}`,\n\t\t\t\t\t\t\tlabel: `${type}/${dir}`,\n\t\t\t\t\t\t})),\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t})\n\n\t\t\tresolvedDestination = diskUtil.resolvePath(resolvedDestination, match)\n\t\t}\n\t\treturn resolvedDestination\n\t}\n\n\tprivate async promptForParentTestClassAndOptionallyInstallDependencies(\n\t\tcandidates: ParentClassCandidate[],\n\t\tparentTestClass:\n\t\t\t| { name: string; importPath: string; isDefaultExport: boolean }\n\t\t\t| undefined,\n\t\tresolvedDestination: string\n\t) {\n\t\tconst idx = await this.ui.prompt({\n\t\t\ttype: 'select',\n\t\t\tisRequired: true,\n\t\t\tlabel: 'Which abstract test class do you want to extend?',\n\t\t\toptions: {\n\t\t\t\tchoices: [\n\t\t\t\t\t{ value: '', label: 'AbstractSpruceTest (default)' },\n\t\t\t\t\t...candidates.map((candidate, idx) => ({\n\t\t\t\t\t\tvalue: `${idx}`,\n\t\t\t\t\t\tlabel: candidate.label,\n\t\t\t\t\t})),\n\t\t\t\t],\n\t\t\t},\n\t\t})\n\n\t\tif (idx !== '' && candidates[+idx]) {\n\t\t\tconst match = candidates[+idx]\n\n\t\t\tif (match) {\n\t\t\t\tawait this.optionallyInstallFeatureBasedOnSelection(match)\n\n\t\t\t\tparentTestClass = this.buildParentClassFromCandidate(\n\t\t\t\t\tmatch,\n\t\t\t\t\tresolvedDestination\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\treturn parentTestClass\n\t}\n\n\tprivate async optionallyInstallFeatureBasedOnSelection(\n\t\tmatch: ParentClassCandidate\n\t) {\n\t\tif (match.featureCode) {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled(\n\t\t\t\tmatch.featureCode\n\t\t\t)\n\n\t\t\tif (!isInstalled) {\n\t\t\t\tthis.ui.startLoading(`Installing ${match.name}...`)\n\t\t\t\tawait this.featureInstaller.install({\n\t\t\t\t\tfeatures: [{ code: match.featureCode as any }],\n\t\t\t\t})\n\t\t\t\tthis.ui.stopLoading()\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate buildParentClassFromCandidate(\n\t\tmatch: ParentClassCandidate,\n\t\tresolvedDestination: string\n\t): {\n\t\tname: string\n\t\tlabel: string\n\t\timportPath: string\n\t\tisDefaultExport: boolean\n\t} {\n\t\treturn {\n\t\t\tname: match.name,\n\t\t\tlabel: match.label,\n\t\t\tisDefaultExport: match.isDefaultExport,\n\t\t\timportPath:\n\t\t\t\tmatch.import ??\n\t\t\t\tpathUtil.relative(\n\t\t\t\t\tresolvedDestination,\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tmatch.path.replace(pathUtil.extname(match.path), '')\n\t\t\t\t),\n\t\t}\n\t}\n}\n"],"file":"CreateAction.js"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import SpyInterface from '../../interfaces/SpyInterface';
|
|
2
|
-
declare const
|
|
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.0",
|
|
22
22
|
"bin": {
|
|
23
23
|
"spruce": "./build/index.js"
|
|
24
24
|
},
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"@sprucelabs/spruce-event-utils": "^18.0.70",
|
|
89
89
|
"@sprucelabs/spruce-skill-booter": "^24.0.53",
|
|
90
90
|
"@sprucelabs/spruce-skill-utils": "^24.1.16",
|
|
91
|
-
"@sprucelabs/spruce-templates": "^15.
|
|
91
|
+
"@sprucelabs/spruce-templates": "^15.2.0",
|
|
92
92
|
"@typescript-eslint/eslint-plugin": "^5.11.0",
|
|
93
93
|
"@typescript-eslint/parser": "^5.11.0",
|
|
94
94
|
"cfonts": "^2.10.0",
|
|
@@ -597,5 +597,5 @@
|
|
|
597
597
|
"ora"
|
|
598
598
|
]
|
|
599
599
|
},
|
|
600
|
-
"gitHead": "
|
|
600
|
+
"gitHead": "ec064c3ab66d4a4252077a10eeb41265041f3bae"
|
|
601
601
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { test, assert } from '@sprucelabs/test'
|
|
2
2
|
import { errorAssertUtil } from '@sprucelabs/test-utils'
|
|
3
3
|
import AbstractSkillTest from '../../tests/AbstractSkillTest'
|
|
4
|
-
import
|
|
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
|
}
|