@sprucelabs/spruce-cli 15.2.23 → 15.2.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/build/__tests__/behavioral/AddingADependency.test.js +3 -1
  3. package/build/__tests__/behavioral/AddingADependency.test.js.map +1 -1
  4. package/build/__tests__/behavioral/DeployingASkill.test.js +20 -20
  5. package/build/__tests__/behavioral/DeployingASkill.test.js.map +1 -1
  6. package/build/__tests__/behavioral/EnablingAndDisablingCache.test.js +12 -12
  7. package/build/__tests__/behavioral/EnablingAndDisablingCache.test.js.map +1 -1
  8. package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js +3 -1
  9. package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js.map +1 -1
  10. package/build/__tests__/behavioral/LoggingInAsASkill.test.js +4 -2
  11. package/build/__tests__/behavioral/LoggingInAsASkill.test.js.map +1 -1
  12. package/build/__tests__/behavioral/RebuildingASkill.test.js +2 -2
  13. package/build/__tests__/behavioral/RebuildingASkill.test.js.map +1 -1
  14. package/build/__tests__/behavioral/RegisteringEventsOnBoot.test.js +6 -4
  15. package/build/__tests__/behavioral/RegisteringEventsOnBoot.test.js.map +1 -1
  16. package/build/__tests__/behavioral/RegisteringGlobalEvents.test.js +3 -1
  17. package/build/__tests__/behavioral/RegisteringGlobalEvents.test.js.map +1 -1
  18. package/build/__tests__/behavioral/RegisteringSkillViewOnBoot.test.js +3 -1
  19. package/build/__tests__/behavioral/RegisteringSkillViewOnBoot.test.js.map +1 -1
  20. package/build/__tests__/behavioral/SettingUpASkillForTesting.test.js +5 -3
  21. package/build/__tests__/behavioral/SettingUpASkillForTesting.test.js.map +1 -1
  22. package/build/__tests__/behavioral/WatchingSkillViews.test.js +6 -6
  23. package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +1 -1
  24. package/build/__tests__/behavioral/events/CreatingAListener.test.d.ts +5 -0
  25. package/build/__tests__/behavioral/events/CreatingAListener.test.js +242 -119
  26. package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
  27. package/build/__tests__/behavioral/events/CreatingAnEvent.test.js +3 -1
  28. package/build/__tests__/behavioral/events/CreatingAnEvent.test.js.map +1 -1
  29. package/build/__tests__/behavioral/node/CreatingANodeModule.test.js +1 -1
  30. package/build/__tests__/behavioral/node/CreatingANodeModule.test.js.map +1 -1
  31. package/build/__tests__/behavioral/skill/CreatingASkill.test.js +1 -1
  32. package/build/__tests__/behavioral/skill/CreatingASkill.test.js.map +1 -1
  33. package/build/__tests__/behavioral/stores/CreatingADataStore.test.js +2 -2
  34. package/build/__tests__/behavioral/stores/CreatingADataStore.test.js.map +1 -1
  35. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.d.ts +1 -1
  36. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +8 -8
  37. package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
  38. package/build/__tests__/behavioral/{UpdatingDependencies.test.d.ts → upgrading/UpdatingDependencies.test.d.ts} +1 -1
  39. package/build/__tests__/behavioral/{UpdatingDependencies.test.js → upgrading/UpdatingDependencies.test.js} +1 -1
  40. package/build/__tests__/behavioral/upgrading/UpdatingDependencies.test.js.map +1 -0
  41. package/build/__tests__/behavioral/{UpdatingDependencies2.test.d.ts → upgrading/UpdatingDependencies2.test.d.ts} +1 -1
  42. package/build/__tests__/behavioral/{UpdatingDependencies2.test.js → upgrading/UpdatingDependencies2.test.js} +4 -4
  43. package/build/__tests__/behavioral/upgrading/UpdatingDependencies2.test.js.map +1 -0
  44. package/build/__tests__/behavioral/{UpgradingANodeModule.test.d.ts → upgrading/UpgradingANodeModule.test.d.ts} +1 -1
  45. package/build/__tests__/behavioral/{UpgradingANodeModule.test.js → upgrading/UpgradingANodeModule.test.js} +7 -7
  46. package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js.map +1 -0
  47. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill.test.d.ts +0 -0
  48. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill.test.js +3 -14
  49. package/build/__tests__/behavioral/upgrading/UpgradingASkill.test.js.map +1 -0
  50. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill2.test.d.ts +0 -0
  51. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill2.test.js +4 -13
  52. package/build/__tests__/behavioral/upgrading/UpgradingASkill2.test.js.map +1 -0
  53. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill3.test.d.ts +0 -0
  54. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill3.test.js +6 -6
  55. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill3.test.js.map +1 -1
  56. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill4.test.d.ts +0 -0
  57. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill4.test.js +3 -3
  58. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill4.test.js.map +1 -1
  59. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill5.test.d.ts +0 -0
  60. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill5.test.js +2 -2
  61. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingASkill5.test.js.map +1 -1
  62. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingWithListeners.test.d.ts +0 -0
  63. package/build/__tests__/behavioral/{skill → upgrading}/UpgradingWithListeners.test.js +4 -8
  64. package/build/__tests__/behavioral/upgrading/UpgradingWithListeners.test.js.map +1 -0
  65. package/build/__tests__/behavioral/{UpgradingWithSandboxFeatureInstalled.test.d.ts → upgrading/UpgradingWithSandboxFeatureInstalled.test.d.ts} +3 -3
  66. package/build/__tests__/behavioral/{UpgradingWithSandboxFeatureInstalled.test.js → upgrading/UpgradingWithSandboxFeatureInstalled.test.js} +14 -14
  67. package/build/__tests__/behavioral/upgrading/UpgradingWithSandboxFeatureInstalled.test.js.map +1 -0
  68. package/build/__tests__/implementation/ActionExecuter2.test.js +1 -1
  69. package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
  70. package/build/__tests__/implementation/ActionExecuter4.test.js +2 -2
  71. package/build/__tests__/implementation/ActionExecuter4.test.js.map +1 -1
  72. package/build/__tests__/implementation/EventStore.test.js +7 -2
  73. package/build/__tests__/implementation/EventStore.test.js.map +1 -1
  74. package/build/__tests__/implementation/LintService.test.js +2 -2
  75. package/build/__tests__/implementation/LintService.test.js.map +1 -1
  76. package/build/__tests__/implementation/PkgService.test.js +2 -2
  77. package/build/__tests__/implementation/PkgService.test.js.map +1 -1
  78. package/build/__tests__/implementation/StoreFeature.test.js +1 -1
  79. package/build/__tests__/implementation/StoreFeature.test.js.map +1 -1
  80. package/build/cli.js +1 -1
  81. package/build/cli.js.map +1 -1
  82. package/build/features/event/EventFeature.d.ts +1 -0
  83. package/build/features/event/EventFeature.js +89 -56
  84. package/build/features/event/EventFeature.js.map +1 -1
  85. package/build/features/event/actions/ListenAction.d.ts +1 -0
  86. package/build/features/event/actions/ListenAction.js +23 -31
  87. package/build/features/event/actions/ListenAction.js.map +1 -1
  88. package/build/features/event/stores/EventStore.d.ts +6 -5
  89. package/build/features/event/stores/EventStore.js +10 -7
  90. package/build/features/event/stores/EventStore.js.map +1 -1
  91. package/build/features/store/StoreFeature.d.ts +1 -1
  92. package/build/features/store/StoreFeature.js +15 -14
  93. package/build/features/store/StoreFeature.js.map +1 -1
  94. package/build/services/CommandService.d.ts +1 -1
  95. package/build/services/CommandService.js +2 -2
  96. package/build/services/CommandService.js.map +1 -1
  97. package/build/tests/AbstractCliTest.d.ts +2 -0
  98. package/build/tests/AbstractCliTest.js +9 -2
  99. package/build/tests/AbstractCliTest.js.map +1 -1
  100. package/build/tests/CommandFaker.d.ts +8 -0
  101. package/build/tests/CommandFaker.js +54 -0
  102. package/build/tests/CommandFaker.js.map +1 -0
  103. package/build/tests/cleanTestData.js +9 -10
  104. package/build/tests/cleanTestData.js.map +1 -1
  105. package/build/tests/constants.d.ts +8 -0
  106. package/build/tests/constants.js +28 -0
  107. package/build/tests/constants.js.map +1 -0
  108. package/package.json +69 -69
  109. package/src/__tests__/behavioral/AddingADependency.test.ts +2 -1
  110. package/src/__tests__/behavioral/DeployingASkill.test.ts +20 -20
  111. package/src/__tests__/behavioral/EnablingAndDisablingCache.test.ts +12 -12
  112. package/src/__tests__/behavioral/InstallingASkillAtAnOrg.test.ts +2 -1
  113. package/src/__tests__/behavioral/LoggingInAsASkill.test.ts +3 -2
  114. package/src/__tests__/behavioral/RebuildingASkill.test.ts +2 -2
  115. package/src/__tests__/behavioral/RegisteringEventsOnBoot.test.ts +3 -5
  116. package/src/__tests__/behavioral/RegisteringGlobalEvents.test.ts +2 -1
  117. package/src/__tests__/behavioral/RegisteringSkillViewOnBoot.test.ts +2 -1
  118. package/src/__tests__/behavioral/SettingUpASkillForTesting.test.ts +4 -3
  119. package/src/__tests__/behavioral/WatchingSkillViews.test.ts +6 -6
  120. package/src/__tests__/behavioral/events/CreatingAListener.test.ts +54 -7
  121. package/src/__tests__/behavioral/events/CreatingAnEvent.test.ts +2 -1
  122. package/src/__tests__/behavioral/node/CreatingANodeModule.test.ts +1 -1
  123. package/src/__tests__/behavioral/skill/CreatingASkill.test.ts +1 -1
  124. package/src/__tests__/behavioral/stores/CreatingADataStore.test.ts +2 -2
  125. package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +3 -3
  126. package/src/__tests__/behavioral/{UpdatingDependencies.test.ts → upgrading/UpdatingDependencies.test.ts} +2 -2
  127. package/src/__tests__/behavioral/{UpdatingDependencies2.test.ts → upgrading/UpdatingDependencies2.test.ts} +6 -6
  128. package/src/__tests__/behavioral/{UpgradingANodeModule.test.ts → upgrading/UpgradingANodeModule.test.ts} +7 -7
  129. package/src/__tests__/behavioral/{skill → upgrading}/UpgradingASkill.test.ts +3 -11
  130. package/src/__tests__/behavioral/{skill → upgrading}/UpgradingASkill2.test.ts +4 -7
  131. package/src/__tests__/behavioral/{skill → upgrading}/UpgradingASkill3.test.ts +6 -6
  132. package/src/__tests__/behavioral/{skill → upgrading}/UpgradingASkill4.test.ts +3 -3
  133. package/src/__tests__/behavioral/{skill → upgrading}/UpgradingASkill5.test.ts +2 -2
  134. package/src/__tests__/behavioral/{skill → upgrading}/UpgradingWithListeners.test.ts +3 -5
  135. package/src/__tests__/behavioral/{UpgradingWithSandboxFeatureInstalled.test.ts → upgrading/UpgradingWithSandboxFeatureInstalled.test.ts} +5 -5
  136. package/src/__tests__/implementation/ActionExecuter2.test.ts +1 -1
  137. package/src/__tests__/implementation/ActionExecuter4.test.ts +2 -2
  138. package/src/__tests__/implementation/EventStore.test.ts +3 -1
  139. package/src/__tests__/implementation/LintService.test.ts +2 -2
  140. package/src/__tests__/implementation/PkgService.test.ts +4 -7
  141. package/src/__tests__/implementation/StoreFeature.test.ts +1 -1
  142. package/src/cli.ts +1 -1
  143. package/src/features/event/EventFeature.ts +14 -11
  144. package/src/features/event/actions/ListenAction.ts +22 -12
  145. package/src/features/event/stores/EventStore.ts +17 -12
  146. package/src/features/store/StoreFeature.ts +6 -5
  147. package/src/services/CommandService.ts +1 -4
  148. package/src/tests/AbstractCliTest.ts +6 -1
  149. package/src/tests/CommandFaker.ts +24 -0
  150. package/src/tests/cleanTestData.ts +2 -19
  151. package/src/tests/constants.ts +17 -0
  152. package/build/__tests__/behavioral/UpdatingDependencies.test.js.map +0 -1
  153. package/build/__tests__/behavioral/UpdatingDependencies2.test.js.map +0 -1
  154. package/build/__tests__/behavioral/UpgradingANodeModule.test.js.map +0 -1
  155. package/build/__tests__/behavioral/UpgradingWithSandboxFeatureInstalled.test.js.map +0 -1
  156. package/build/__tests__/behavioral/skill/UpgradingASkill.test.js.map +0 -1
  157. package/build/__tests__/behavioral/skill/UpgradingASkill2.test.js.map +0 -1
  158. package/build/__tests__/behavioral/skill/UpgradingWithListeners.test.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  import { diskUtil } from '@sprucelabs/spruce-skill-utils'
2
2
  import { test, assert } from '@sprucelabs/test'
3
- import CommandService from '../../services/CommandService'
4
- import AbstractCliTest from '../../tests/AbstractCliTest'
5
- import uiAssert from '../../tests/utilities/uiAssert.utility'
3
+ import CommandService from '../../../services/CommandService'
4
+ import AbstractCliTest from '../../../tests/AbstractCliTest'
5
+ import uiAssert from '../../../tests/utilities/uiAssert.utility'
6
6
 
7
7
  export default class UpgradingANodeModuleTest extends AbstractCliTest {
8
8
  protected static async beforeEach() {
@@ -16,9 +16,9 @@ export default class UpgradingANodeModuleTest extends AbstractCliTest {
16
16
 
17
17
  @test()
18
18
  protected static async buildErrorsGetPassedThroughToResults() {
19
- CommandService.setMockResponse(/yarn (add|install)/gis, { code: 0 })
20
- CommandService.setMockResponse(/yarn clean.build/gis, { code: 1 })
21
- CommandService.setMockResponse(/yarn build.dev/gis, { code: 0 })
19
+ CommandService.fakeCommand(/yarn (add|install)/gis, { code: 0 })
20
+ CommandService.fakeCommand(/yarn clean.build/gis, { code: 1 })
21
+ CommandService.fakeCommand(/yarn build.dev/gis, { code: 0 })
22
22
 
23
23
  await this.getEmitter().on('feature.did-execute', () => {
24
24
  return {
@@ -52,7 +52,7 @@ export default class UpgradingANodeModuleTest extends AbstractCliTest {
52
52
  diskUtil.writeFile(tsConfig, 'beenChanged')
53
53
  }
54
54
 
55
- CommandService.setMockResponse(/yarn/gi, {
55
+ CommandService.fakeCommand(/yarn/gi, {
56
56
  code: 0,
57
57
  })
58
58
 
@@ -6,29 +6,21 @@ import {
6
6
  FILE_ACTION_OVERWRITE,
7
7
  FILE_ACTION_SKIP,
8
8
  } from '../../../constants'
9
- import CommandService from '../../../services/CommandService'
10
9
  import AbstractCliTest from '../../../tests/AbstractCliTest'
11
10
  import { GeneratedFile } from '../../../types/cli.types'
12
11
  const BROKEN_SKILL_INDEX_CONTENTS = "throw new Error('cheese!')\n"
13
12
  export default class UpgradingASkillTest extends AbstractCliTest {
14
13
  protected static async beforeEach() {
15
14
  await super.beforeEach()
16
- CommandService.setMockResponse(new RegExp(/yarn rebuild/gis), {
17
- code: 0,
18
- })
15
+ this.commandFaker.fakeRebuild()
19
16
  }
20
17
 
21
18
  @test()
22
19
  protected static async forceEverythingUpgradeOverwritesWhatHasChanged() {
23
20
  const cli = await this.installAndBreakSkill('skills')
24
21
 
25
- CommandService.setMockResponse('yarn clean.build', {
26
- code: 0,
27
- })
28
-
29
- CommandService.setMockResponse('yarn build.dev', {
30
- code: 0,
31
- })
22
+ this.commandFaker.fakeCleanBuild()
23
+ this.commandFaker.fakeBuild()
32
24
 
33
25
  const files: {
34
26
  name: string
@@ -1,15 +1,12 @@
1
1
  import fsUtil from 'fs'
2
2
  import { diskUtil } from '@sprucelabs/spruce-skill-utils'
3
3
  import { test, assert } from '@sprucelabs/test'
4
- import CommandService from '../../../services/CommandService'
5
4
  import AbstractCliTest from '../../../tests/AbstractCliTest'
6
5
  import testUtil from '../../../tests/utilities/test.utility'
7
6
  export default class UpgradingASkill2Test extends AbstractCliTest {
8
7
  protected static async beforeEach() {
9
8
  await super.beforeEach()
10
- CommandService.setMockResponse(new RegExp(/yarn rebuild/gis), {
11
- code: 0,
12
- })
9
+ this.commandFaker.fakeRebuild()
13
10
  }
14
11
 
15
12
  @test(
@@ -41,12 +38,12 @@ export default class UpgradingASkill2Test extends AbstractCliTest {
41
38
  ) {
42
39
  await this.FeatureFixture().installCachedFeatures(cacheKey)
43
40
 
44
- shouldMockYarn && CommandService.setMockResponse(/yarn/, { code: 0 })
41
+ shouldMockYarn && this.commandFaker.fakeCommand(/yarn/, 0)
45
42
 
46
43
  const pluginPath = this.resolveHashSprucePath(`features/${pluginName}`)
47
44
  const originalContents = diskUtil.readFile(pluginPath)
48
45
 
49
- diskUtil.writeFile(pluginPath, 'aoeuaoeuaoeuaoeu')
46
+ diskUtil.writeFile(pluginPath, 'aoeuaoeuao-euaoeu')
50
47
 
51
48
  const results = await this.Action('node', 'upgrade').execute({})
52
49
 
@@ -173,7 +170,7 @@ export default class UpgradingASkill2Test extends AbstractCliTest {
173
170
  const originalContents = diskUtil.readFile(match)
174
171
  diskUtil.writeFile(match, 'broken')
175
172
 
176
- CommandService.setMockResponse(/yarn/, { code: 0 })
173
+ this.commandFaker.fakeCommand(/yarn/, 0)
177
174
 
178
175
  await this.Action('node', 'upgrade').execute({})
179
176
 
@@ -16,7 +16,7 @@ export default class UpgradingASkill3Test extends AbstractCliTest {
16
16
  }
17
17
 
18
18
  await super.beforeEach()
19
- CommandService.setMockResponse(new RegExp(/yarn rebuild/gis), {
19
+ CommandService.fakeCommand(new RegExp(/yarn rebuild/gis), {
20
20
  code: 0,
21
21
  })
22
22
  }
@@ -92,7 +92,7 @@ export default class UpgradingASkill3Test extends AbstractCliTest {
92
92
  return {}
93
93
  }
94
94
 
95
- CommandService.setMockResponse('yarn clean.build', {
95
+ CommandService.fakeCommand('yarn clean.build', {
96
96
  code: 0,
97
97
  callback: () => {
98
98
  wasCleanBuildCalled = true
@@ -101,7 +101,7 @@ export default class UpgradingASkill3Test extends AbstractCliTest {
101
101
 
102
102
  let wasBuildDevCalled = false
103
103
 
104
- CommandService.setMockResponse('yarn build.dev', {
104
+ CommandService.fakeCommand('yarn build.dev', {
105
105
  code: 0,
106
106
  callback: () => {
107
107
  wasBuildDevCalled = true
@@ -216,17 +216,17 @@ export default class UpgradingASkill3Test extends AbstractCliTest {
216
216
  private static disableCleanBuildAndYarnAdd() {
217
217
  this.disableCleanAndBuild()
218
218
 
219
- CommandService.setMockResponse(/yarn.*?add/gis, {
219
+ CommandService.fakeCommand(/yarn.*?add/gis, {
220
220
  code: 0,
221
221
  })
222
222
  }
223
223
 
224
224
  private static disableCleanAndBuild() {
225
- CommandService.setMockResponse('yarn clean.build', {
225
+ CommandService.fakeCommand('yarn clean.build', {
226
226
  code: 0,
227
227
  })
228
228
 
229
- CommandService.setMockResponse('yarn build.dev', {
229
+ CommandService.fakeCommand('yarn build.dev', {
230
230
  code: 0,
231
231
  })
232
232
  }
@@ -7,7 +7,7 @@ import AbstractCliTest from '../../../tests/AbstractCliTest'
7
7
  export default class UpgradingASkill4Test extends AbstractCliTest {
8
8
  protected static async beforeEach() {
9
9
  await super.beforeEach()
10
- CommandService.setMockResponse(new RegExp(/yarn rebuild/gis), {
10
+ CommandService.fakeCommand(new RegExp(/yarn rebuild/gis), {
11
11
  code: 0,
12
12
  })
13
13
  }
@@ -46,8 +46,8 @@ export default class UpgradingASkill4Test extends AbstractCliTest {
46
46
  }
47
47
  }
48
48
 
49
- CommandService.setMockResponse(/yarn clean/, { code: 0 })
50
- CommandService.setMockResponse(/yarn build.dev/, { code: 0 })
49
+ CommandService.fakeCommand(/yarn clean/, { code: 0 })
50
+ CommandService.fakeCommand(/yarn build.dev/, { code: 0 })
51
51
 
52
52
  await this.Action('node', 'upgrade').execute({})
53
53
 
@@ -35,7 +35,7 @@ export default class UpgradingASkill5Test extends AbstractCliTest {
35
35
  ) {
36
36
  await this.FeatureFixture().installCachedFeatures('schemas')
37
37
 
38
- CommandService.setMockResponse(new RegExp(/yarn/gis), {
38
+ CommandService.fakeCommand(new RegExp(/yarn/gis), {
39
39
  code: 0,
40
40
  })
41
41
 
@@ -75,7 +75,7 @@ export default class UpgradingASkill5Test extends AbstractCliTest {
75
75
  let wasMovedBackToDev = false
76
76
  let wasMovedBackToProd = false
77
77
 
78
- CommandService.setMockResponse(new RegExp(/yarn/gis), {
78
+ CommandService.fakeCommand(new RegExp(/yarn/gis), {
79
79
  code: 0,
80
80
  callback: (_, args) => {
81
81
  if (
@@ -2,7 +2,6 @@ import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'
2
2
  import { test, assert } from '@sprucelabs/test'
3
3
  import SpruceError from '../../../errors/SpruceError'
4
4
  import { FeatureCode } from '../../../features/features.types'
5
- import CommandService from '../../../services/CommandService'
6
5
  import AbstractCliTest from '../../../tests/AbstractCliTest'
7
6
 
8
7
  export default class UpgradingWithListeners extends AbstractCliTest {
@@ -27,9 +26,7 @@ export default class UpgradingWithListeners extends AbstractCliTest {
27
26
  ) {
28
27
  await this.FeatureFixture().installCachedFeatures(featureCode)
29
28
 
30
- CommandService.setMockResponse(new RegExp(/yarn/), {
31
- code: 0,
32
- })
29
+ this.commandFaker.fakeCommand(new RegExp(/yarn/))
33
30
 
34
31
  let wasHit = false
35
32
 
@@ -42,9 +39,10 @@ export default class UpgradingWithListeners extends AbstractCliTest {
42
39
  }
43
40
  )
44
41
 
45
- const results = await this.getEmitter().emit('feature.will-execute', {
42
+ const results = await this.getEmitter().emit('feature.did-execute', {
46
43
  featureCode: 'node',
47
44
  actionCode,
45
+ results: {},
48
46
  })
49
47
 
50
48
  const { errors } = eventResponseUtil.getAllResponsePayloadsAndErrors(
@@ -1,14 +1,14 @@
1
1
  import pathUtil from 'path'
2
2
  import { diskUtil, versionUtil } from '@sprucelabs/spruce-skill-utils'
3
3
  import { test, assert } from '@sprucelabs/test'
4
- import AbstractCliTest from '../../tests/AbstractCliTest'
5
- import testUtil from '../../tests/utilities/test.utility'
4
+ import AbstractCliTest from '../../../tests/AbstractCliTest'
5
+ import testUtil from '../../../tests/utilities/test.utility'
6
6
 
7
7
  export default class UpgradingWithSandboxFeatureInstalledTest extends AbstractCliTest {
8
8
  protected static async beforeEach() {
9
9
  await super.beforeEach()
10
10
  await this.FeatureFixture().installCachedFeatures('sandbox')
11
- await this.listenToDidInstallInthePast()
11
+ await this.listenToDidInstallInThePast()
12
12
  }
13
13
 
14
14
  @test()
@@ -17,7 +17,7 @@ export default class UpgradingWithSandboxFeatureInstalledTest extends AbstractCl
17
17
  }
18
18
 
19
19
  @test()
20
- protected static async usesTodaysVersionEvenWithCoreListene() {
20
+ protected static async usesTodaysVersionEvenWithCoreListener() {
21
21
  const match = await this.setupAndGetListenerPath()
22
22
 
23
23
  const fileName = pathUtil.basename(match)
@@ -63,7 +63,7 @@ export default class UpgradingWithSandboxFeatureInstalledTest extends AbstractCl
63
63
  return results
64
64
  }
65
65
 
66
- private static async listenToDidInstallInthePast() {
66
+ private static async listenToDidInstallInThePast() {
67
67
  const results = await this.Action('event', 'listen').execute({
68
68
  namespace: 'mercury',
69
69
  eventName: 'did-install::v2020_12_25',
@@ -265,7 +265,7 @@ export default class FeatureCommandExecuterContTest extends AbstractSchemaTest {
265
265
  }
266
266
 
267
267
  private static setupMockCommands() {
268
- CommandService.setMockResponse(new RegExp(/npm.*?install .*?/gis), {
268
+ CommandService.fakeCommand(new RegExp(/npm.*?install .*?/gis), {
269
269
  code: 0,
270
270
  })
271
271
  }
@@ -8,10 +8,10 @@ export default class ActionExecuter4Test extends AbstractCliTest {
8
8
  protected static async beforeEach() {
9
9
  await super.beforeEach()
10
10
 
11
- CommandService.setMockResponse(/which docker/gis, {
11
+ CommandService.fakeCommand(/which docker/gis, {
12
12
  code: 0,
13
13
  })
14
- CommandService.setMockResponse(ENABLE_NPM_CACHE_COMMAND, {
14
+ CommandService.fakeCommand(ENABLE_NPM_CACHE_COMMAND, {
15
15
  code: 0,
16
16
  })
17
17
  }
@@ -14,6 +14,7 @@ import { errorAssert } from '@sprucelabs/test-utils'
14
14
  import CreateAction from '../../features/event/actions/CreateAction'
15
15
  import EventStore from '../../features/event/stores/EventStore'
16
16
  import AbstractEventTest from '../../tests/AbstractEventTest'
17
+ import { DEMO_NUMBER_EVENT_STORE } from '../../tests/constants'
17
18
  import testUtil from '../../tests/utilities/test.utility'
18
19
 
19
20
  const EVENT_NAME_READABLE = 'my event store amazing event'
@@ -30,6 +31,7 @@ export default class EventStoreTest extends AbstractEventTest {
30
31
  await super.beforeEach()
31
32
  this.createAction = this.Action<CreateAction>('event', 'create')
32
33
  diskUtil.writeFile(this.resolvePath('package.json'), '{}')
34
+ await this.people.loginAsDemoPerson(DEMO_NUMBER_EVENT_STORE)
33
35
  }
34
36
 
35
37
  @test()
@@ -83,7 +85,7 @@ export default class EventStoreTest extends AbstractEventTest {
83
85
  }),
84
86
  emitPermissionContract: buildPermissionContract({
85
87
  id: 'my-fantastic-event-contract',
86
- name: 'Fanstastic emit perms',
88
+ name: 'Fantastic emit perms',
87
89
  permissions: [
88
90
  {
89
91
  id: 'can-emit-perms',
@@ -10,7 +10,7 @@ export default class LintServiceTest extends AbstractCliTest {
10
10
 
11
11
  await this.FeatureFixture().installCachedFeatures('skills')
12
12
 
13
- CommandService.setMockResponse(/node/, {
13
+ CommandService.fakeCommand(/node/, {
14
14
  code: 0,
15
15
  stdout: `[{"filePath":"/Users/taylorromero/Development/SpruceLabs/spruce-appointments-skill/src/.spruce/stores/stores.types.ts","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \\"--ignore-pattern '!<relative/path/to/filename>'\\") to override."}],"errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}]\n`,
16
16
  })
@@ -24,7 +24,7 @@ export default class LintServiceTest extends AbstractCliTest {
24
24
 
25
25
  await this.FeatureFixture().installCachedFeatures('skills')
26
26
 
27
- CommandService.setMockResponse(/node/, {
27
+ CommandService.fakeCommand(/node/, {
28
28
  code: 0,
29
29
  stdout: `[{"filePath":"/Users/taylorromero/Development/SpruceLabs/spruce-appointments-skill/src/.spruce/stores/stores.types.ts","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use a negated ignore pattern (like \\"--ignore-pattern '!<relative/path/to/filename>'\\") to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[]}]\n`,
30
30
  })
@@ -26,7 +26,7 @@ export default class PkgServiceTest extends AbstractSkillTest {
26
26
 
27
27
  @test()
28
28
  protected static async handlesAtLatestInName() {
29
- CommandService.setMockResponse(new RegExp(/yarn/gis), {
29
+ CommandService.fakeCommand(new RegExp(/yarn/gis), {
30
30
  code: 0,
31
31
  })
32
32
 
@@ -37,12 +37,9 @@ export default class PkgServiceTest extends AbstractSkillTest {
37
37
 
38
38
  @test()
39
39
  protected static async ifInstallingOnlySpruceModulesShouldNotRunNPMAdd() {
40
- CommandService.setMockResponse(
41
- new RegExp(/npm.*?install.*?--no-progress/gis),
42
- {
43
- code: 1,
44
- }
45
- )
40
+ CommandService.fakeCommand(new RegExp(/npm.*?install.*?--no-progress/gis), {
41
+ code: 1,
42
+ })
46
43
 
47
44
  const { totalInstalled } = await this.pkg.install(
48
45
  '@sprucelabs/jest-json-reporter'
@@ -7,7 +7,7 @@ export default class StoreFeatureTest extends AbstractCliTest {
7
7
  protected static async syncsOnWillExecute() {
8
8
  await this.FeatureFixture().installCachedFeatures('stores')
9
9
 
10
- CommandService.setMockResponse(/yarn/, {
10
+ CommandService.fakeCommand(/yarn/, {
11
11
  code: 0,
12
12
  })
13
13
 
package/src/cli.ts CHANGED
@@ -466,7 +466,7 @@ export async function run(argv: string[] = []): Promise<void> {
466
466
  async function setupInFlightEntertainment(ui: TerminalInterface) {
467
467
  if (
468
468
  TerminalInterface.doesSupportColor() &&
469
- process.env.ENABLE_INSTALL_INTERTAINMENT !== 'false'
469
+ process.env.ENABLE_INSTALL_ENTERTAINMENT !== 'false'
470
470
  ) {
471
471
  const command = new CommandService(diskUtil.resolvePath(__dirname, '../'))
472
472
  InFlightEntertainment.setup({ command, ui })
@@ -102,25 +102,24 @@ export default class EventFeature extends AbstractFeature {
102
102
  }
103
103
 
104
104
  const isInstalled = await this.featureInstaller.isInstalled('event')
105
-
106
- if (
105
+ const isRemoteRelevant =
107
106
  isInstalled &&
108
107
  (featureCode === 'event' ||
109
108
  featureCode === 'eventContract' ||
110
109
  actionCode === 'login') &&
111
110
  actionCode !== 'setRemote'
112
- ) {
111
+
112
+ if (isRemoteRelevant) {
113
113
  const remoteResults = await this.appendRemoteToResultsOrPrompt()
114
114
  results = actionUtil.mergeActionResults(results, remoteResults)
115
115
  }
116
116
 
117
- if (featureCode === 'node' && actionCode === 'upgrade' && isInstalled) {
118
- const syncResults = await this.Action('event', 'sync.listeners').execute(
119
- {}
120
- )
121
- results = actionUtil.mergeActionResults(results, syncResults)
122
- }
117
+ return results
118
+ }
123
119
 
120
+ private async syncListenersAndMixinResults(results: FeatureActionResponse) {
121
+ const syncResults = await this.Action('event', 'sync.listeners').execute({})
122
+ results = actionUtil.mergeActionResults(results, syncResults)
124
123
  return results
125
124
  }
126
125
 
@@ -133,8 +132,12 @@ export default class EventFeature extends AbstractFeature {
133
132
 
134
133
  let results = {}
135
134
 
136
- if (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {
137
- results = this.Action('event', 'sync').execute({})
135
+ const isUpgrade =
136
+ isInstalled && featureCode === 'node' && actionCode === 'upgrade'
137
+
138
+ if (isUpgrade) {
139
+ results = await this.Action('event', 'sync').execute({})
140
+ results = await this.syncListenersAndMixinResults(results)
138
141
  }
139
142
 
140
143
  if (this.initiatingAction === this.combineCodes(featureCode, actionCode)) {
@@ -21,6 +21,7 @@ import EventTemplateItemBuilder from '../../../templateItemBuilders/EventTemplat
21
21
  import actionUtil from '../../../utilities/action.utility'
22
22
  import AbstractAction from '../../AbstractAction'
23
23
  import { FeatureActionResponse } from '../../features.types'
24
+ import { FetchContractsOptions } from '../stores/EventStore'
24
25
 
25
26
  const SKILL_EVENT_NAMESPACE = 'skill'
26
27
  const CORE_EVENT_NAMESPACE = 'mercury'
@@ -163,22 +164,31 @@ export default class ListenAction extends AbstractAction<OptionsSchema> {
163
164
  namespace !== SKILL_EVENT_NAMESPACE &&
164
165
  namespace !== CORE_EVENT_NAMESPACE
165
166
  ? [namespace]
166
- : undefined
167
-
168
- const { contracts } = skill.slug
169
- ? await eventStore.fetchEventContracts({
170
- localNamespace: skill.slug,
171
- namespaces: namespacesForFetch,
172
- didUpdateHandler: (msg: string) => this.ui.startLoading(msg),
173
- })
174
- : await eventStore.fetchEventContracts({
175
- namespaces: namespacesForFetch,
176
- didUpdateHandler: (msg: string) => this.ui.startLoading(msg),
177
- })
167
+ : this.getDependencyNamespaces()
168
+
169
+ const options: FetchContractsOptions = {
170
+ didUpdateHandler: (msg: string) => this.ui.startLoading(msg),
171
+ }
172
+
173
+ if (skill.slug) {
174
+ options.localNamespace = skill.slug
175
+ }
176
+
177
+ if (namespacesForFetch.length > 0) {
178
+ options.namespaces = namespacesForFetch
179
+ }
180
+
181
+ const { contracts } = await eventStore.fetchEventContracts(options)
178
182
 
179
183
  return contracts
180
184
  }
181
185
 
186
+ private getDependencyNamespaces() {
187
+ return this.Service('dependency')
188
+ .get()
189
+ .map((d) => d.namespace)
190
+ }
191
+
182
192
  private async syncEvents(
183
193
  options: SpruceSchemas.SpruceCli.v2020_07_22.ListenEventOptions
184
194
  ) {
@@ -53,6 +53,12 @@ const eventFileNamesImportKeyMap = {
53
53
  'listenPermissions.builder.ts': { key: 'listenPermissions', isSchema: false },
54
54
  }
55
55
 
56
+ export interface FetchContractsOptions {
57
+ localNamespace?: string
58
+ namespaces?: string[]
59
+ didUpdateHandler?: InternalUpdateHandler
60
+ }
61
+
56
62
  export default class EventStore extends AbstractStore {
57
63
  public name = 'event'
58
64
  protected static contractCache: Record<string, any> = {}
@@ -63,11 +69,9 @@ export default class EventStore extends AbstractStore {
63
69
  EventStore.contractCache = {}
64
70
  }
65
71
 
66
- public async fetchEventContracts(options?: {
67
- localNamespace?: string
68
- namespaces?: string[]
69
- didUpdateHandler?: InternalUpdateHandler
70
- }): Promise<EventStoreFetchEventContractsResponse> {
72
+ public async fetchEventContracts(
73
+ options?: FetchContractsOptions
74
+ ): Promise<EventStoreFetchEventContractsResponse> {
71
75
  const { localNamespace, didUpdateHandler, namespaces } = options ?? {}
72
76
 
73
77
  didUpdateHandler?.('Pulling remote contracts...')
@@ -107,13 +111,14 @@ export default class EventStore extends AbstractStore {
107
111
  if (!EventStore.contractCache[key]) {
108
112
  const client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })
109
113
 
110
- const results = await client.emit('get-event-contracts::v2020_12_25', {
111
- target: {
112
- namespaces,
113
- },
114
- })
115
-
116
- const { contracts } = eventResponseUtil.getFirstResponseOrThrow(results)
114
+ const [{ contracts }] = await client.emitAndFlattenResponses(
115
+ 'get-event-contracts::v2020_12_25',
116
+ {
117
+ target: {
118
+ namespaces,
119
+ },
120
+ }
121
+ )
117
122
 
118
123
  EventStore.contractCache[key] = contracts
119
124
  }
@@ -38,7 +38,7 @@ export default class StoreFeature extends AbstractFeature {
38
38
  )
39
39
  void this.emitter.on(
40
40
  'feature.will-execute',
41
- this.handleWillExecute.bind(this)
41
+ this.handleDidExecute.bind(this)
42
42
  )
43
43
  }
44
44
 
@@ -55,20 +55,21 @@ export default class StoreFeature extends AbstractFeature {
55
55
  }
56
56
  }
57
57
 
58
- private async handleWillExecute(payload: {
58
+ private async handleDidExecute(payload: {
59
59
  featureCode: string
60
60
  actionCode: string
61
61
  }) {
62
62
  const isInstalled = await this.featureInstaller.isInstalled('store')
63
63
 
64
- if (
64
+ const isUpgrade =
65
65
  isInstalled &&
66
66
  payload.featureCode === 'node' &&
67
67
  payload.actionCode === 'upgrade'
68
- ) {
68
+
69
+ if (isUpgrade) {
69
70
  uiUtil.renderMasthead({
70
71
  ui: this.ui,
71
- headline: 'Resyncing data stores...',
72
+ headline: 'Re-syncing data stores...',
72
73
  })
73
74
 
74
75
  const results = await this.Action('store', 'sync').execute({})
@@ -184,10 +184,7 @@ export default class CommandService {
184
184
  return { mockResponse: match?.response, mockKey }
185
185
  }
186
186
 
187
- public static setMockResponse(
188
- command: string | RegExp,
189
- response: MockResponse
190
- ) {
187
+ public static fakeCommand(command: string | RegExp, response: MockResponse) {
191
188
  this.mockResponses.unshift({
192
189
  command,
193
190
  response,
@@ -35,6 +35,7 @@ import StoreFactory, {
35
35
  import { ApiClientFactoryOptions } from '../types/apiClient.types'
36
36
  import { OptionOverrides } from '../types/cli.types'
37
37
  import WriterFactory from '../writers/WriterFactory'
38
+ import CommandFaker from './CommandFaker'
38
39
  import FeatureFixture, {
39
40
  FeatureFixtureOptions,
40
41
  } from './fixtures/FeatureFixture'
@@ -52,6 +53,7 @@ type ExecuterOptions = Partial<ActionExecuterOptions> & {
52
53
  export default abstract class AbstractCliTest extends AbstractSpruceTest {
53
54
  protected static cliRoot = pathUtil.join(__dirname, '..')
54
55
  protected static homeDir: string
56
+ protected static commandFaker: CommandFaker
55
57
 
56
58
  private static _ui: SpyInterface
57
59
  private static emitter?: GlobalEmitter
@@ -72,7 +74,7 @@ export default abstract class AbstractCliTest extends AbstractSpruceTest {
72
74
  ImportService.setCacheDir(diskUtil.createRandomTempDir())
73
75
  ImportService.enableCaching()
74
76
 
75
- process.env.ENABLE_INSTALL_INTERTAINMENT = 'false'
77
+ process.env.ENABLE_INSTALL_ENTERTAINMENT = 'false'
76
78
 
77
79
  this.originalEnv = { ...process.env }
78
80
  }
@@ -106,6 +108,9 @@ export default abstract class AbstractCliTest extends AbstractSpruceTest {
106
108
  EventStore.clearCache()
107
109
  CommandService.clearMockResponses()
108
110
  MercuryClientFactory.reset()
111
+ MercuryClientFactory.setIsTestMode(false)
112
+
113
+ this.commandFaker = new CommandFaker()
109
114
  }
110
115
 
111
116
  protected static async afterEach() {
@@ -0,0 +1,24 @@
1
+ import CommandService from '../services/CommandService'
2
+
3
+ type Command = RegExp | string
4
+
5
+ export default class CommandFaker {
6
+ public fakeRebuild(code = 0) {
7
+ const command = new RegExp(/yarn rebuild/gis)
8
+ this.fakeCommand(command, code)
9
+ }
10
+
11
+ public fakeCommand(command: Command, code = 0) {
12
+ CommandService.fakeCommand(command, {
13
+ code,
14
+ })
15
+ }
16
+
17
+ public fakeCleanBuild(code = 0) {
18
+ this.fakeCommand('yarn clean.build', code)
19
+ }
20
+
21
+ public fakeBuild(code = 0) {
22
+ this.fakeCommand('yarn build.dev', code)
23
+ }
24
+ }