@sprucelabs/spruce-cli 14.26.16 → 14.27.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 +35 -0
- package/build/.spruce/errors/errors.types.d.ts +19 -0
- package/build/.spruce/errors/options.types.d.ts +4 -1
- package/build/.spruce/errors/spruceCli/dependencyExists.schema.d.ts +3 -0
- package/build/.spruce/errors/spruceCli/dependencyExists.schema.js +28 -0
- package/build/.spruce/errors/spruceCli/dependencyExists.schema.js.map +1 -0
- package/build/__tests__/behavioral/AddingADependency.test.d.ts +6 -3
- package/build/__tests__/behavioral/AddingADependency.test.js +116 -44
- package/build/__tests__/behavioral/AddingADependency.test.js.map +1 -1
- package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js +2 -2
- package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js.map +1 -1
- package/build/__tests__/behavioral/LoggingInAsASkill.test.js +4 -4
- package/build/__tests__/behavioral/LoggingInAsASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/ManagingDependencies.test.js +3 -3
- package/build/__tests__/behavioral/ManagingDependencies.test.js.map +1 -1
- package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js +1 -1
- package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js.map +1 -1
- package/build/__tests__/behavioral/SettingRemote.test.js +1 -1
- package/build/__tests__/behavioral/SettingRemote.test.js.map +1 -1
- package/build/__tests__/behavioral/SettingUpVscode.test.js +3 -3
- package/build/__tests__/behavioral/SettingUpVscode.test.js.map +1 -1
- package/build/__tests__/behavioral/TestingDataStores.test.js +2 -2
- package/build/__tests__/behavioral/TestingDataStores.test.js.map +1 -1
- package/build/__tests__/behavioral/events/CreatingAListener.test.js +2 -2
- package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
- package/build/__tests__/behavioral/events/CreatingAnEvent.test.d.ts +3 -2
- package/build/__tests__/behavioral/events/CreatingAnEvent.test.js +156 -106
- package/build/__tests__/behavioral/events/CreatingAnEvent.test.js.map +1 -1
- package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js +6 -9
- package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js +7 -4
- package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/skill/UpgradingASkill.test.js +7 -7
- package/build/__tests__/behavioral/skill/UpgradingASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/skill/UpgradingASkill3.test.js +2 -2
- package/build/__tests__/behavioral/skill/UpgradingASkill3.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +1 -1
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
- package/build/__tests__/behavioral/views/CreatingASkillView.test.js +3 -3
- package/build/__tests__/behavioral/views/CreatingASkillView.test.js.map +1 -1
- package/build/__tests__/behavioral/views/TestingViewControllers.test.js +2 -2
- package/build/__tests__/behavioral/views/TestingViewControllers.test.js.map +1 -1
- package/build/__tests__/implementation/ActionExecuter2.test.js +3 -3
- package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
- package/build/errors/SpruceError.js +4 -0
- package/build/errors/SpruceError.js.map +1 -1
- package/build/errors/dependencyExists.builder.d.ts +11 -0
- package/build/errors/dependencyExists.builder.js +22 -0
- package/build/errors/dependencyExists.builder.js.map +1 -0
- package/build/features/AbstractAction.js +1 -1
- package/build/features/AbstractAction.js.map +1 -1
- package/build/features/dependencies/actions/AddAction.js +22 -15
- package/build/features/dependencies/actions/AddAction.js.map +1 -1
- package/build/features/event/actions/CreateAction.js +1 -1
- package/build/features/event/actions/CreateAction.js.map +1 -1
- package/build/interfaces/SpyInterface.d.ts +1 -1
- package/build/interfaces/SpyInterface.js +2 -2
- package/build/interfaces/SpyInterface.js.map +1 -1
- package/build/services/DependencyService.d.ts +1 -0
- package/build/services/DependencyService.js +18 -0
- package/build/services/DependencyService.js.map +1 -1
- package/build/tests/AbstractCliTest.js +1 -1
- package/build/tests/AbstractCliTest.js.map +1 -1
- package/build/tests/utilities/uiAssert.utility.d.ts +6 -0
- package/build/tests/utilities/uiAssert.utility.js +51 -0
- package/build/tests/utilities/uiAssert.utility.js.map +1 -0
- package/package.json +30 -28
- package/src/.spruce/errors/errors.types.ts +29 -0
- package/src/.spruce/errors/options.types.ts +4 -1
- package/src/.spruce/errors/spruceCli/dependencyExists.schema.ts +22 -0
- package/src/__tests__/behavioral/AddingADependency.test.ts +45 -8
- package/src/__tests__/behavioral/InstallingASkillAtAnOrg.test.ts +3 -3
- package/src/__tests__/behavioral/LoggingInAsASkill.test.ts +4 -4
- package/src/__tests__/behavioral/ManagingDependencies.test.ts +3 -3
- package/src/__tests__/behavioral/RememberingUpgradeSelections.test.ts +1 -1
- package/src/__tests__/behavioral/SettingRemote.test.ts +1 -1
- package/src/__tests__/behavioral/SettingUpVscode.test.ts +3 -3
- package/src/__tests__/behavioral/TestingDataStores.test.ts +2 -2
- package/src/__tests__/behavioral/events/CreatingAListener.test.ts +2 -2
- package/src/__tests__/behavioral/events/CreatingAnEvent.test.ts +44 -22
- package/src/__tests__/behavioral/events/KeepingEventsInSync2.test.ts +1 -1
- package/src/__tests__/behavioral/schemas/KeepingSchemasInSync.test.ts +2 -0
- package/src/__tests__/behavioral/skill/UpgradingASkill.test.ts +7 -7
- package/src/__tests__/behavioral/skill/UpgradingASkill3.test.ts +2 -2
- package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +1 -1
- package/src/__tests__/behavioral/views/CreatingASkillView.test.ts +3 -3
- package/src/__tests__/behavioral/views/TestingViewControllers.test.ts +2 -2
- package/src/__tests__/implementation/ActionExecuter2.test.ts +3 -3
- package/src/errors/SpruceError.ts +4 -0
- package/src/errors/dependencyExists.builder.ts +12 -0
- package/src/features/AbstractAction.ts +1 -4
- package/src/features/dependencies/actions/AddAction.ts +12 -5
- package/src/features/event/actions/CreateAction.ts +4 -1
- package/src/interfaces/SpyInterface.ts +1 -1
- package/src/services/DependencyService.ts +14 -0
- package/src/tests/AbstractCliTest.ts +1 -1
- package/src/tests/utilities/uiAssert.utility.ts +29 -0
|
@@ -968,6 +968,35 @@ export declare namespace SpruceErrors.SpruceCli {
|
|
|
968
968
|
|
|
969
969
|
|
|
970
970
|
|
|
971
|
+
export declare namespace SpruceErrors.SpruceCli {
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
export interface DependencyExists {
|
|
975
|
+
|
|
976
|
+
|
|
977
|
+
'namespace': string
|
|
978
|
+
}
|
|
979
|
+
|
|
980
|
+
export interface DependencyExistsSchema extends SpruceSchema.Schema {
|
|
981
|
+
id: 'dependencyExists',
|
|
982
|
+
namespace: 'SpruceCli',
|
|
983
|
+
name: 'Dependency exists',
|
|
984
|
+
fields: {
|
|
985
|
+
/** . */
|
|
986
|
+
'namespace': {
|
|
987
|
+
type: 'text',
|
|
988
|
+
isRequired: true,
|
|
989
|
+
options: undefined
|
|
990
|
+
},
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
|
|
994
|
+
export type DependencyExistsEntity = SchemaEntity<SpruceErrors.SpruceCli.DependencyExistsSchema>
|
|
995
|
+
|
|
996
|
+
}
|
|
997
|
+
|
|
998
|
+
|
|
999
|
+
|
|
971
1000
|
export declare namespace SpruceErrors.SpruceCli {
|
|
972
1001
|
|
|
973
1002
|
/** Autoloader creation failed */
|
|
@@ -94,6 +94,9 @@ export interface DirectoryEmptyErrorOptions extends SpruceErrors.SpruceCli.Direc
|
|
|
94
94
|
export interface DeployFailedErrorOptions extends SpruceErrors.SpruceCli.DeployFailed, ISpruceErrorOptions {
|
|
95
95
|
code: 'DEPLOY_FAILED'
|
|
96
96
|
}
|
|
97
|
+
export interface DependencyExistsErrorOptions extends SpruceErrors.SpruceCli.DependencyExists, ISpruceErrorOptions {
|
|
98
|
+
code: 'DEPENDENCY_EXISTS'
|
|
99
|
+
}
|
|
97
100
|
export interface CreateAutoloaderFailedErrorOptions extends SpruceErrors.SpruceCli.CreateAutoloaderFailed, ISpruceErrorOptions {
|
|
98
101
|
code: 'CREATE_AUTOLOADER_FAILED'
|
|
99
102
|
}
|
|
@@ -119,6 +122,6 @@ export interface ActionCancelledErrorOptions extends SpruceErrors.SpruceCli.Acti
|
|
|
119
122
|
code: 'ACTION_CANCELLED'
|
|
120
123
|
}
|
|
121
124
|
|
|
122
|
-
type ErrorOptions = | VscodeNotInstalledErrorOptions | TransportAlreadyExistsErrorOptions | ThemeExistsErrorOptions | TestFailedErrorOptions | StoreExistsErrorOptions | SkillViewExistsErrorOptions | SkillNotRegisteredErrorOptions | SkillNotFoundErrorOptions | SchemaTemplateItemBuildingFailedErrorOptions | SchemaFailedToImportErrorOptions | SchemaExistsErrorOptions | NotLoggedInErrorOptions | NotImplementedErrorOptions | NoSkillsRegisteredErrorOptions | NoOrganizationsFoundErrorOptions | MissingDependenciesErrorOptions | MercuryResponseErrorErrorOptions | LintFailedErrorOptions | InvalidTestDirectoryErrorOptions | InvalidFeatureCodeErrorOptions | InvalidEventContractErrorOptions | InvalidCommandErrorOptions | GenericErrorOptions | FileExistsErrorOptions | FeatureNotInstalledErrorOptions | FailedToImportErrorOptions | ExecutingCommandFailedErrorOptions | DockerNotStartedErrorOptions | DirectoryNotSkillErrorOptions | DirectoryEmptyErrorOptions | DeployFailedErrorOptions | CreateAutoloaderFailedErrorOptions | CommandNotImplementedErrorOptions | CommandBlockedErrorOptions | CommandAbortedErrorOptions | CacheNotEnabledErrorOptions | BuildFailedErrorOptions | BootErrorErrorOptions | ActionCancelledErrorOptions
|
|
125
|
+
type ErrorOptions = | VscodeNotInstalledErrorOptions | TransportAlreadyExistsErrorOptions | ThemeExistsErrorOptions | TestFailedErrorOptions | StoreExistsErrorOptions | SkillViewExistsErrorOptions | SkillNotRegisteredErrorOptions | SkillNotFoundErrorOptions | SchemaTemplateItemBuildingFailedErrorOptions | SchemaFailedToImportErrorOptions | SchemaExistsErrorOptions | NotLoggedInErrorOptions | NotImplementedErrorOptions | NoSkillsRegisteredErrorOptions | NoOrganizationsFoundErrorOptions | MissingDependenciesErrorOptions | MercuryResponseErrorErrorOptions | LintFailedErrorOptions | InvalidTestDirectoryErrorOptions | InvalidFeatureCodeErrorOptions | InvalidEventContractErrorOptions | InvalidCommandErrorOptions | GenericErrorOptions | FileExistsErrorOptions | FeatureNotInstalledErrorOptions | FailedToImportErrorOptions | ExecutingCommandFailedErrorOptions | DockerNotStartedErrorOptions | DirectoryNotSkillErrorOptions | DirectoryEmptyErrorOptions | DeployFailedErrorOptions | DependencyExistsErrorOptions | CreateAutoloaderFailedErrorOptions | CommandNotImplementedErrorOptions | CommandBlockedErrorOptions | CommandAbortedErrorOptions | CacheNotEnabledErrorOptions | BuildFailedErrorOptions | BootErrorErrorOptions | ActionCancelledErrorOptions
|
|
123
126
|
|
|
124
127
|
export default ErrorOptions
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { SchemaRegistry } from '@sprucelabs/schema'
|
|
2
|
+
import { SpruceErrors } from '../errors.types'
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
const dependencyExistsSchema: SpruceErrors.SpruceCli.DependencyExistsSchema = {
|
|
7
|
+
id: 'dependencyExists',
|
|
8
|
+
namespace: 'SpruceCli',
|
|
9
|
+
name: 'Dependency exists',
|
|
10
|
+
fields: {
|
|
11
|
+
/** . */
|
|
12
|
+
'namespace': {
|
|
13
|
+
type: 'text',
|
|
14
|
+
isRequired: true,
|
|
15
|
+
options: undefined
|
|
16
|
+
},
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
SchemaRegistry.getInstance().trackSchema(dependencyExistsSchema)
|
|
21
|
+
|
|
22
|
+
export default dependencyExistsSchema
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { test, assert } from '@sprucelabs/test'
|
|
2
2
|
import { errorAssertUtil } from '@sprucelabs/test-utils'
|
|
3
3
|
import AbstractSkillTest from '../../tests/AbstractSkillTest'
|
|
4
|
+
import uiAssertUtil from '../../tests/utilities/uiAssert.utility'
|
|
4
5
|
|
|
5
6
|
export default class ConfiguringDependenciesTest extends AbstractSkillTest {
|
|
6
7
|
protected static skillCacheKey = 'skills'
|
|
8
|
+
private static parentSkill: {
|
|
9
|
+
id: string
|
|
10
|
+
slug: string
|
|
11
|
+
name: string
|
|
12
|
+
}
|
|
7
13
|
|
|
8
14
|
@test()
|
|
9
15
|
protected static async hasAddDependencyAction() {
|
|
@@ -11,7 +17,7 @@ export default class ConfiguringDependenciesTest extends AbstractSkillTest {
|
|
|
11
17
|
}
|
|
12
18
|
|
|
13
19
|
@test()
|
|
14
|
-
protected static async
|
|
20
|
+
protected static async errorsWhenPassedBadNamespace() {
|
|
15
21
|
await this.getSkillFixture().registerCurrentSkill({
|
|
16
22
|
name: 'current skill in adding deps',
|
|
17
23
|
})
|
|
@@ -26,30 +32,44 @@ export default class ConfiguringDependenciesTest extends AbstractSkillTest {
|
|
|
26
32
|
}
|
|
27
33
|
|
|
28
34
|
@test()
|
|
29
|
-
protected static async
|
|
30
|
-
const
|
|
35
|
+
protected static async succeedsWhenPassedGoodNamespace() {
|
|
36
|
+
const parentSkill = await this.getSkillFixture().seedDemoSkill({
|
|
31
37
|
name: 'dependent skill',
|
|
32
38
|
})
|
|
33
39
|
|
|
34
40
|
const results = await this.Action('dependency', 'add').execute({
|
|
35
|
-
namespace:
|
|
41
|
+
namespace: parentSkill.slug,
|
|
36
42
|
})
|
|
37
43
|
|
|
38
44
|
assert.isFalsy(results.errors)
|
|
39
45
|
|
|
46
|
+
this.parentSkill = parentSkill
|
|
47
|
+
|
|
40
48
|
const settings = this.Service('settings')
|
|
41
49
|
const dependencies = settings.get('dependencies')
|
|
42
50
|
|
|
43
51
|
assert.isEqualDeep(dependencies, [
|
|
44
52
|
{
|
|
45
|
-
id:
|
|
46
|
-
namespace:
|
|
53
|
+
id: parentSkill.id,
|
|
54
|
+
namespace: parentSkill.slug,
|
|
47
55
|
},
|
|
48
56
|
])
|
|
49
57
|
}
|
|
50
58
|
|
|
51
59
|
@test()
|
|
52
|
-
protected static async
|
|
60
|
+
protected static async cantAddDependencyTwice() {
|
|
61
|
+
const err = assert.doesThrow(() =>
|
|
62
|
+
this.Service('dependency').add({
|
|
63
|
+
id: this.parentSkill.id,
|
|
64
|
+
namespace: this.parentSkill.slug,
|
|
65
|
+
})
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
errorAssertUtil.assertError(err, 'DEPENDENCY_EXISTS')
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@test()
|
|
72
|
+
protected static async asksToSelectSkillWhenNoNamespacePassed() {
|
|
53
73
|
const otherSkill = await this.getSkillFixture().seedDemoSkill({
|
|
54
74
|
name: 'dependent skill',
|
|
55
75
|
})
|
|
@@ -58,7 +78,7 @@ export default class ConfiguringDependenciesTest extends AbstractSkillTest {
|
|
|
58
78
|
|
|
59
79
|
await this.waitForInput()
|
|
60
80
|
|
|
61
|
-
const last = this.ui.
|
|
81
|
+
const last = this.ui.getLastInvocation()
|
|
62
82
|
|
|
63
83
|
assert.doesInclude(last.options.options.choices, {
|
|
64
84
|
value: otherSkill.slug,
|
|
@@ -79,6 +99,23 @@ export default class ConfiguringDependenciesTest extends AbstractSkillTest {
|
|
|
79
99
|
})
|
|
80
100
|
}
|
|
81
101
|
|
|
102
|
+
@test()
|
|
103
|
+
protected static async doesNotShowSkillsThatAreAlreadySetAsADependency() {
|
|
104
|
+
await this.getPersonFixture().loginAsDemoPerson()
|
|
105
|
+
|
|
106
|
+
void this.Action('dependency', 'add').execute({})
|
|
107
|
+
|
|
108
|
+
await this.waitForInput()
|
|
109
|
+
|
|
110
|
+
uiAssertUtil.assertSelectDidNotRenderChoice(
|
|
111
|
+
this.ui,
|
|
112
|
+
this.parentSkill.slug,
|
|
113
|
+
this.parentSkill.name
|
|
114
|
+
)
|
|
115
|
+
|
|
116
|
+
this.ui.reset()
|
|
117
|
+
}
|
|
118
|
+
|
|
82
119
|
@test()
|
|
83
120
|
protected static async canAddSkillThatWasCreatedBySomeoneElse() {
|
|
84
121
|
const skill = await this.getSkillFixture().seedDemoSkill({
|
|
@@ -91,10 +91,10 @@ export default class InstallingASkillAtAnOrgTest extends AbstractCliTest {
|
|
|
91
91
|
await this.waitForInput()
|
|
92
92
|
|
|
93
93
|
assert.doesInclude(
|
|
94
|
-
this.ui.
|
|
94
|
+
this.ui.getLastInvocation().command,
|
|
95
95
|
'confirm',
|
|
96
96
|
`ui didn't get back a confirm, got back \n\n${assertUtil.stringify(
|
|
97
|
-
this.ui.
|
|
97
|
+
this.ui.getLastInvocation()
|
|
98
98
|
)}`
|
|
99
99
|
)
|
|
100
100
|
|
|
@@ -132,7 +132,7 @@ export default class InstallingASkillAtAnOrgTest extends AbstractCliTest {
|
|
|
132
132
|
|
|
133
133
|
await this.waitForInput()
|
|
134
134
|
|
|
135
|
-
assert.doesInclude(this.ui.
|
|
135
|
+
assert.doesInclude(this.ui.getLastInvocation().options, {
|
|
136
136
|
type: 'select',
|
|
137
137
|
})
|
|
138
138
|
|
|
@@ -33,7 +33,7 @@ export default class LoggingInAsASkillTest extends AbstractSkillTest {
|
|
|
33
33
|
|
|
34
34
|
await this.waitForInput()
|
|
35
35
|
|
|
36
|
-
assert.doesInclude(this.ui.
|
|
36
|
+
assert.doesInclude(this.ui.getLastInvocation().options.label, 'Phone')
|
|
37
37
|
|
|
38
38
|
this.ui.reset()
|
|
39
39
|
}
|
|
@@ -85,10 +85,10 @@ export default class LoggingInAsASkillTest extends AbstractSkillTest {
|
|
|
85
85
|
|
|
86
86
|
await this.waitForInput()
|
|
87
87
|
|
|
88
|
-
assert.doesInclude(this.ui.
|
|
89
|
-
assert.doesInclude(this.ui.
|
|
88
|
+
assert.doesInclude(this.ui.getLastInvocation().command, 'prompt')
|
|
89
|
+
assert.doesInclude(this.ui.getLastInvocation().options.type, 'select')
|
|
90
90
|
assert.isEqualDeep(
|
|
91
|
-
this.ui.
|
|
91
|
+
this.ui.getLastInvocation().options.options.choices,
|
|
92
92
|
[this.skill1, this.skill2].map((s) => ({
|
|
93
93
|
label: s.name,
|
|
94
94
|
value: s.id,
|
|
@@ -23,7 +23,7 @@ export default class ManagingDependenciesTest extends AbstractSkillTest {
|
|
|
23
23
|
|
|
24
24
|
await this.waitForInput()
|
|
25
25
|
|
|
26
|
-
const last = this.ui.
|
|
26
|
+
const last = this.ui.getLastInvocation()
|
|
27
27
|
|
|
28
28
|
assert.isEqual(last.options.type, 'select')
|
|
29
29
|
|
|
@@ -55,7 +55,7 @@ export default class ManagingDependenciesTest extends AbstractSkillTest {
|
|
|
55
55
|
|
|
56
56
|
await this.waitForInput()
|
|
57
57
|
|
|
58
|
-
const last = this.ui.
|
|
58
|
+
const last = this.ui.getLastInvocation()
|
|
59
59
|
|
|
60
60
|
assert.isEqualDeep(last.options.value, [skill1.id])
|
|
61
61
|
|
|
@@ -104,7 +104,7 @@ export default class ManagingDependenciesTest extends AbstractSkillTest {
|
|
|
104
104
|
|
|
105
105
|
await this.waitForInput()
|
|
106
106
|
|
|
107
|
-
const last = this.ui.
|
|
107
|
+
const last = this.ui.getLastInvocation()
|
|
108
108
|
|
|
109
109
|
assert.doesNotInclude(last.options.options.choices, {
|
|
110
110
|
value: skill.id,
|
|
@@ -65,7 +65,7 @@ export default class RememberingUpgradeSelectionsTest extends AbstractSkillTest
|
|
|
65
65
|
|
|
66
66
|
await this.waitForInput()
|
|
67
67
|
|
|
68
|
-
const last = this.ui.
|
|
68
|
+
const last = this.ui.getLastInvocation()
|
|
69
69
|
|
|
70
70
|
assert.doesInclude(last, {
|
|
71
71
|
'options.options.choices[].value': FILE_ACTION_ALWAYS_SKIP,
|
|
@@ -15,7 +15,7 @@ export default class SettingUpVscodeTest extends AbstractCliTest {
|
|
|
15
15
|
|
|
16
16
|
await this.waitForInput()
|
|
17
17
|
|
|
18
|
-
assert.isEqualDeep(this.ui.
|
|
18
|
+
assert.isEqualDeep(this.ui.getLastInvocation(), {
|
|
19
19
|
command: 'confirm',
|
|
20
20
|
options: 'Want me to setup debugging for you?',
|
|
21
21
|
})
|
|
@@ -24,7 +24,7 @@ export default class SettingUpVscodeTest extends AbstractCliTest {
|
|
|
24
24
|
|
|
25
25
|
await this.waitForInput()
|
|
26
26
|
|
|
27
|
-
assert.isEqualDeep(this.ui.
|
|
27
|
+
assert.isEqualDeep(this.ui.getLastInvocation(), {
|
|
28
28
|
command: 'confirm',
|
|
29
29
|
options:
|
|
30
30
|
'Want me to setup vscode settings for building, testing and linting on save?',
|
|
@@ -34,7 +34,7 @@ export default class SettingUpVscodeTest extends AbstractCliTest {
|
|
|
34
34
|
|
|
35
35
|
await this.waitForInput()
|
|
36
36
|
|
|
37
|
-
assert.isEqualDeep(this.ui.
|
|
37
|
+
assert.isEqualDeep(this.ui.getLastInvocation(), {
|
|
38
38
|
command: 'confirm',
|
|
39
39
|
options: 'Want me to setup tasks for building and testing?',
|
|
40
40
|
})
|
|
@@ -21,7 +21,7 @@ export default class TestingDataStoresTest extends AbstractSkillTest {
|
|
|
21
21
|
|
|
22
22
|
await this.waitForInput()
|
|
23
23
|
|
|
24
|
-
const last = this.ui.
|
|
24
|
+
const last = this.ui.getLastInvocation()
|
|
25
25
|
assert.isTruthy(last.options.options.choices)
|
|
26
26
|
assert.doesInclude(last.options.options.choices, {
|
|
27
27
|
label: 'AbstractStoreTest (requires install)',
|
|
@@ -43,7 +43,7 @@ export default class TestingDataStoresTest extends AbstractSkillTest {
|
|
|
43
43
|
|
|
44
44
|
await this.waitForInput()
|
|
45
45
|
|
|
46
|
-
const last = this.ui.
|
|
46
|
+
const last = this.ui.getLastInvocation()
|
|
47
47
|
assert.isTruthy(last.options.options.choices)
|
|
48
48
|
assert.doesInclude(last.options.options.choices, {
|
|
49
49
|
label: 'AbstractStoreTest',
|
|
@@ -96,7 +96,7 @@ export default class CreatingAListenerTest extends AbstractEventTest {
|
|
|
96
96
|
|
|
97
97
|
await this.waitForInput()
|
|
98
98
|
|
|
99
|
-
let lastInvocation = this.ui.
|
|
99
|
+
let lastInvocation = this.ui.getLastInvocation()
|
|
100
100
|
|
|
101
101
|
assert.isEqual(lastInvocation.command, 'prompt')
|
|
102
102
|
assert.doesInclude(lastInvocation.options.label, 'namespace')
|
|
@@ -105,7 +105,7 @@ export default class CreatingAListenerTest extends AbstractEventTest {
|
|
|
105
105
|
|
|
106
106
|
await this.waitForInput()
|
|
107
107
|
|
|
108
|
-
lastInvocation = this.ui.
|
|
108
|
+
lastInvocation = this.ui.getLastInvocation()
|
|
109
109
|
|
|
110
110
|
assert.doesInclude(lastInvocation.options.label, 'event')
|
|
111
111
|
|
|
@@ -10,6 +10,7 @@ import { CliInterface } from '../../../cli'
|
|
|
10
10
|
import { FeatureActionResponse } from '../../../features/features.types'
|
|
11
11
|
import AbstractEventTest from '../../../tests/AbstractEventTest'
|
|
12
12
|
import testUtil from '../../../tests/utilities/test.utility'
|
|
13
|
+
import uiAssertUtil from '../../../tests/utilities/uiAssert.utility'
|
|
13
14
|
import { RegisteredSkill } from '../../../types/cli.types'
|
|
14
15
|
import actionUtil from '../../../utilities/action.utility'
|
|
15
16
|
|
|
@@ -29,7 +30,16 @@ export default class CreatingAnEventTest extends AbstractEventTest {
|
|
|
29
30
|
@test()
|
|
30
31
|
protected static async cantCreateEventWithoutBeingRegistered() {
|
|
31
32
|
await this.FeatureFixture().installCachedFeatures('events')
|
|
32
|
-
|
|
33
|
+
|
|
34
|
+
const results = await this.Action('event', 'create').execute({
|
|
35
|
+
nameReadable: EVENT_NAME_READABLE,
|
|
36
|
+
nameKebab: EVENT_NAME,
|
|
37
|
+
nameCamel: EVENT_CAMEL,
|
|
38
|
+
version: this.expectedVersion,
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
assert.isArray(results.errors)
|
|
42
|
+
errorAssertUtil.assertError(results.errors[0], 'SKILL_NOT_REGISTERED')
|
|
33
43
|
}
|
|
34
44
|
|
|
35
45
|
@test()
|
|
@@ -71,7 +81,7 @@ export default class CreatingAnEventTest extends AbstractEventTest {
|
|
|
71
81
|
}
|
|
72
82
|
|
|
73
83
|
@test()
|
|
74
|
-
protected static async
|
|
84
|
+
protected static async createsEventWithPayloadsPermissionsAndOptions() {
|
|
75
85
|
const { results, cli, skill } = await this.createEvent()
|
|
76
86
|
assert.isFalsy(results.errors)
|
|
77
87
|
|
|
@@ -137,27 +147,50 @@ export default createFormEmitPayloadBuilder
|
|
|
137
147
|
assert.isFalsy(syncResults.errors)
|
|
138
148
|
}
|
|
139
149
|
|
|
140
|
-
|
|
150
|
+
@test()
|
|
151
|
+
protected static async asksForVersionIfPreviousVersionExistsOnDifferentDay() {
|
|
152
|
+
await this.createEvent({
|
|
153
|
+
version: versionUtil.generateVersion('2020_01_10').constValue,
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
void this.Action('event', 'create').execute({
|
|
157
|
+
nameReadable: EVENT_NAME_READABLE,
|
|
158
|
+
nameKebab: EVENT_NAME,
|
|
159
|
+
nameCamel: EVENT_CAMEL,
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
await uiAssertUtil.assertRendersSelect(this.ui)
|
|
163
|
+
|
|
164
|
+
this.ui.reset()
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
private static async createEvent(options?: { version?: string }) {
|
|
141
168
|
const cli = await this.FeatureFixture().installCachedFeatures('events')
|
|
142
169
|
|
|
143
|
-
const skill = await this.
|
|
144
|
-
{
|
|
145
|
-
name: 'my new skill',
|
|
146
|
-
},
|
|
147
|
-
{
|
|
148
|
-
phone: process.env.DEMO_NUMBER_CREATING_AN_EVENT,
|
|
149
|
-
}
|
|
150
|
-
)
|
|
170
|
+
const skill = await this.registerCurrentSkill()
|
|
151
171
|
|
|
152
172
|
const results = await this.Action('event', 'create').execute({
|
|
153
173
|
nameReadable: EVENT_NAME_READABLE,
|
|
154
174
|
nameKebab: EVENT_NAME,
|
|
155
175
|
nameCamel: EVENT_CAMEL,
|
|
176
|
+
version: this.expectedVersion,
|
|
177
|
+
...options,
|
|
156
178
|
})
|
|
157
179
|
|
|
158
180
|
return { results, cli, skill }
|
|
159
181
|
}
|
|
160
182
|
|
|
183
|
+
private static async registerCurrentSkill() {
|
|
184
|
+
return await this.getSkillFixture().registerCurrentSkill(
|
|
185
|
+
{
|
|
186
|
+
name: 'my new skill',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
phone: process.env.DEMO_NUMBER_CREATING_AN_EVENT,
|
|
190
|
+
}
|
|
191
|
+
)
|
|
192
|
+
}
|
|
193
|
+
|
|
161
194
|
private static async assertCreatesOptionsFile(
|
|
162
195
|
results: FeatureActionResponse
|
|
163
196
|
) {
|
|
@@ -219,17 +252,6 @@ export default createFormEmitPayloadBuilder
|
|
|
219
252
|
}
|
|
220
253
|
}
|
|
221
254
|
|
|
222
|
-
protected static async assertCantCreateWithoutBeingRegistered() {
|
|
223
|
-
const results = await this.Action('event', 'create').execute({
|
|
224
|
-
nameReadable: EVENT_NAME_READABLE,
|
|
225
|
-
nameKebab: EVENT_NAME,
|
|
226
|
-
nameCamel: EVENT_CAMEL,
|
|
227
|
-
})
|
|
228
|
-
|
|
229
|
-
assert.isArray(results.errors)
|
|
230
|
-
errorAssertUtil.assertError(results.errors[0], 'SKILL_NOT_REGISTERED')
|
|
231
|
-
}
|
|
232
|
-
|
|
233
255
|
private static async assertReturnsEventFromHealthCheck(
|
|
234
256
|
cli: CliInterface,
|
|
235
257
|
skill: RegisteredSkill
|
|
@@ -231,6 +231,8 @@ export default class KeepsSchemasInSyncTest extends AbstractSchemaTest {
|
|
|
231
231
|
nameCamel: 'testSchema',
|
|
232
232
|
})
|
|
233
233
|
|
|
234
|
+
assert.isFalsy(createResponse.errors)
|
|
235
|
+
|
|
234
236
|
const builderPath = testUtil.assertFileByNameInGeneratedFiles(
|
|
235
237
|
'testSchema.builder.ts',
|
|
236
238
|
createResponse.files
|
|
@@ -117,7 +117,7 @@ export default class UpgradingASkillTest extends AbstractCliTest {
|
|
|
117
117
|
|
|
118
118
|
await this.assertFailedHealthCheck(cli)
|
|
119
119
|
|
|
120
|
-
const last = this.ui.
|
|
120
|
+
const last = this.ui.getLastInvocation()
|
|
121
121
|
|
|
122
122
|
assert.doesInclude(last, {
|
|
123
123
|
'options.options.choices[].value': FILE_ACTION_OVERWRITE,
|
|
@@ -251,7 +251,7 @@ export default class UpgradingASkillTest extends AbstractCliTest {
|
|
|
251
251
|
|
|
252
252
|
await this.waitForInput()
|
|
253
253
|
|
|
254
|
-
const last = this.ui.
|
|
254
|
+
const last = this.ui.getLastInvocation()
|
|
255
255
|
|
|
256
256
|
assert.isEqual(last.command, 'prompt')
|
|
257
257
|
assert.doesInclude(last.options.options.choices, { value: 'skip' })
|
|
@@ -277,14 +277,14 @@ export default class UpgradingASkillTest extends AbstractCliTest {
|
|
|
277
277
|
|
|
278
278
|
await this.waitForInput()
|
|
279
279
|
|
|
280
|
-
let last = this.ui.
|
|
280
|
+
let last = this.ui.getLastInvocation()
|
|
281
281
|
|
|
282
282
|
assert.isEqual(last.command, 'prompt')
|
|
283
283
|
await this.ui.sendInput('skip')
|
|
284
284
|
|
|
285
285
|
await this.waitForInput()
|
|
286
286
|
|
|
287
|
-
last = this.ui.
|
|
287
|
+
last = this.ui.getLastInvocation()
|
|
288
288
|
|
|
289
289
|
assert.isEqual(last.command, 'prompt')
|
|
290
290
|
await this.ui.sendInput('skip')
|
|
@@ -307,7 +307,7 @@ export default class UpgradingASkillTest extends AbstractCliTest {
|
|
|
307
307
|
|
|
308
308
|
await this.waitForInput()
|
|
309
309
|
|
|
310
|
-
let last = this.ui.
|
|
310
|
+
let last = this.ui.getLastInvocation()
|
|
311
311
|
|
|
312
312
|
assert.isEqual(last.command, 'prompt')
|
|
313
313
|
await this.ui.sendInput('skipAll')
|
|
@@ -329,7 +329,7 @@ export default class UpgradingASkillTest extends AbstractCliTest {
|
|
|
329
329
|
|
|
330
330
|
await this.waitForInput()
|
|
331
331
|
|
|
332
|
-
let last = this.ui.
|
|
332
|
+
let last = this.ui.getLastInvocation()
|
|
333
333
|
|
|
334
334
|
assert.isEqual(last.command, 'prompt')
|
|
335
335
|
await this.ui.sendInput('overwrite')
|
|
@@ -431,7 +431,7 @@ export default class UpgradingASkillTest extends AbstractCliTest {
|
|
|
431
431
|
|
|
432
432
|
await this.waitForInput()
|
|
433
433
|
|
|
434
|
-
const last = this.ui.
|
|
434
|
+
const last = this.ui.getLastInvocation()
|
|
435
435
|
return { last, promise }
|
|
436
436
|
}
|
|
437
437
|
|
|
@@ -96,12 +96,12 @@ export default class UpgradingASkillTest extends AbstractCliTest {
|
|
|
96
96
|
|
|
97
97
|
await this.waitForInput()
|
|
98
98
|
|
|
99
|
-
let last = this.ui.
|
|
99
|
+
let last = this.ui.getLastInvocation()
|
|
100
100
|
|
|
101
101
|
assert.isEqual(last.command, 'prompt')
|
|
102
102
|
await this.ui.sendInput('overwrite')
|
|
103
103
|
|
|
104
|
-
last = this.ui.
|
|
104
|
+
last = this.ui.getLastInvocation()
|
|
105
105
|
|
|
106
106
|
assert.isEqual(last.command, 'prompt')
|
|
107
107
|
await this.ui.sendInput('overwrite')
|
|
@@ -185,7 +185,7 @@ export default class SelectingAnAbstractTestClassTest extends AbstractTestTest {
|
|
|
185
185
|
|
|
186
186
|
await this.waitForInput()
|
|
187
187
|
|
|
188
|
-
const last = this.ui.
|
|
188
|
+
const last = this.ui.getLastInvocation()
|
|
189
189
|
const { choices } = last.options.options ?? {}
|
|
190
190
|
|
|
191
191
|
return { promise, choices } as {
|
|
@@ -30,7 +30,7 @@ export default class CreatingASkillViewTest extends AbstractSkillTest {
|
|
|
30
30
|
|
|
31
31
|
await this.waitForInput()
|
|
32
32
|
|
|
33
|
-
const last = this.ui.
|
|
33
|
+
const last = this.ui.getLastInvocation()
|
|
34
34
|
|
|
35
35
|
assert.isEqual(last.command, 'confirm')
|
|
36
36
|
|
|
@@ -90,7 +90,7 @@ export default class CreatingASkillViewTest extends AbstractSkillTest {
|
|
|
90
90
|
|
|
91
91
|
await this.waitForInput()
|
|
92
92
|
|
|
93
|
-
let last = this.ui.
|
|
93
|
+
let last = this.ui.getLastInvocation()
|
|
94
94
|
|
|
95
95
|
assert.isEqual(last.command, 'prompt')
|
|
96
96
|
|
|
@@ -120,7 +120,7 @@ export default class CreatingASkillViewTest extends AbstractSkillTest {
|
|
|
120
120
|
|
|
121
121
|
await this.waitForInput()
|
|
122
122
|
|
|
123
|
-
const last = this.ui.
|
|
123
|
+
const last = this.ui.getLastInvocation()
|
|
124
124
|
|
|
125
125
|
assert.isEqual(last.command, 'prompt')
|
|
126
126
|
assert.doesInclude(last.options.options.choices, {
|
|
@@ -15,7 +15,7 @@ export default class TestingViewControllersTest extends AbstractSkillTest {
|
|
|
15
15
|
|
|
16
16
|
await this.waitForInput()
|
|
17
17
|
|
|
18
|
-
const last = this.ui.
|
|
18
|
+
const last = this.ui.getLastInvocation()
|
|
19
19
|
assert.doesInclude(last.options.options.choices, {
|
|
20
20
|
label: 'AbstractViewControllerTest (requires install)',
|
|
21
21
|
})
|
|
@@ -29,7 +29,7 @@ export default class TestingViewControllersTest extends AbstractSkillTest {
|
|
|
29
29
|
|
|
30
30
|
await this.waitForInput()
|
|
31
31
|
|
|
32
|
-
const last = this.ui.
|
|
32
|
+
const last = this.ui.getLastInvocation()
|
|
33
33
|
assert.doesInclude(last.options.options.choices, {
|
|
34
34
|
label: 'AbstractViewControllerTest',
|
|
35
35
|
})
|
|
@@ -107,7 +107,7 @@ export default class FeatureCommandExecuterContTest extends AbstractSchemaTest {
|
|
|
107
107
|
|
|
108
108
|
await this.waitForInput()
|
|
109
109
|
|
|
110
|
-
assert.doesNotInclude(this.ui.
|
|
110
|
+
assert.doesNotInclude(this.ui.getLastInvocation(), {
|
|
111
111
|
command: 'prompt',
|
|
112
112
|
options: {
|
|
113
113
|
type: 'select',
|
|
@@ -158,7 +158,7 @@ export default class FeatureCommandExecuterContTest extends AbstractSchemaTest {
|
|
|
158
158
|
await this.waitForInput()
|
|
159
159
|
|
|
160
160
|
this.ui.reset()
|
|
161
|
-
const lastQuestion = this.ui.
|
|
161
|
+
const lastQuestion = this.ui.getLastInvocation()
|
|
162
162
|
|
|
163
163
|
assert.isEqual(lastQuestion.command, 'prompt')
|
|
164
164
|
assert.doesInclude(
|
|
@@ -227,7 +227,7 @@ export default class FeatureCommandExecuterContTest extends AbstractSchemaTest {
|
|
|
227
227
|
assert.doesInclude(message, /2 required/gi)
|
|
228
228
|
assert.doesInclude(message, /1 optional/gi)
|
|
229
229
|
|
|
230
|
-
assert.doesInclude(this.ui.
|
|
230
|
+
assert.doesInclude(this.ui.getLastInvocation(), {
|
|
231
231
|
command: 'prompt',
|
|
232
232
|
options: {
|
|
233
233
|
type: 'select',
|
|
@@ -252,6 +252,10 @@ export default class SpruceError extends AbstractSpruceError<ErrorOptions> {
|
|
|
252
252
|
message = `A transport named '${options.name}' already exists!`
|
|
253
253
|
break
|
|
254
254
|
|
|
255
|
+
case 'DEPENDENCY_EXISTS':
|
|
256
|
+
message = `You already have ${options.namespace} as a dependency!`
|
|
257
|
+
break
|
|
258
|
+
|
|
255
259
|
default:
|
|
256
260
|
message = super.friendlyMessage()
|
|
257
261
|
}
|