@sprucelabs/spruce-cli 15.2.15 → 15.2.18

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 (57) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/build/.spruce/events/events.contract.d.ts +102 -4
  3. package/build/.spruce/events/events.contract.js +3 -1
  4. package/build/.spruce/events/events.contract.js.map +1 -1
  5. package/build/.spruce/events/heartwood/didRegisterSkillViews.v2021_02_11.contract.d.ts +15 -0
  6. package/build/.spruce/events/heartwood/didRegisterSkillViews.v2021_02_11.contract.js +18 -3
  7. package/build/.spruce/events/heartwood/didRegisterSkillViews.v2021_02_11.contract.js.map +1 -1
  8. package/build/.spruce/events/heartwood/generateUrl.v2021_02_11.contract.d.ts +21 -4
  9. package/build/.spruce/events/heartwood/generateUrl.v2021_02_11.contract.js +24 -7
  10. package/build/.spruce/events/heartwood/generateUrl.v2021_02_11.contract.js.map +1 -1
  11. package/build/.spruce/events/heartwood/getSkillViews.v2021_02_11.contract.d.ts +18 -1
  12. package/build/.spruce/events/heartwood/getSkillViews.v2021_02_11.contract.js +21 -4
  13. package/build/.spruce/events/heartwood/getSkillViews.v2021_02_11.contract.js.map +1 -1
  14. package/build/.spruce/events/heartwood/listViews.v2021_02_11.contract.d.ts +39 -0
  15. package/build/.spruce/events/heartwood/listViews.v2021_02_11.contract.js +53 -0
  16. package/build/.spruce/events/heartwood/listViews.v2021_02_11.contract.js.map +1 -0
  17. package/build/.spruce/events/heartwood/registerSkillViews.v2021_02_11.contract.d.ts +11 -0
  18. package/build/.spruce/events/heartwood/registerSkillViews.v2021_02_11.contract.js +13 -2
  19. package/build/.spruce/events/heartwood/registerSkillViews.v2021_02_11.contract.js.map +1 -1
  20. package/build/__tests__/behavioral/skill/UpgradingASkill.test.d.ts +0 -7
  21. package/build/__tests__/behavioral/skill/UpgradingASkill.test.js +38 -403
  22. package/build/__tests__/behavioral/skill/UpgradingASkill.test.js.map +1 -1
  23. package/build/__tests__/behavioral/skill/UpgradingASkill2.test.d.ts +7 -15
  24. package/build/__tests__/behavioral/skill/UpgradingASkill2.test.js +218 -341
  25. package/build/__tests__/behavioral/skill/UpgradingASkill2.test.js.map +1 -1
  26. package/build/__tests__/behavioral/skill/UpgradingASkill3.test.d.ts +16 -5
  27. package/build/__tests__/behavioral/skill/UpgradingASkill3.test.js +416 -141
  28. package/build/__tests__/behavioral/skill/UpgradingASkill3.test.js.map +1 -1
  29. package/build/__tests__/behavioral/skill/UpgradingASkill4.test.d.ts +5 -8
  30. package/build/__tests__/behavioral/skill/UpgradingASkill4.test.js +147 -205
  31. package/build/__tests__/behavioral/skill/UpgradingASkill4.test.js.map +1 -1
  32. package/build/__tests__/behavioral/skill/UpgradingASkill5.test.d.ts +11 -0
  33. package/build/__tests__/behavioral/skill/UpgradingASkill5.test.js +357 -0
  34. package/build/__tests__/behavioral/skill/UpgradingASkill5.test.js.map +1 -0
  35. package/build/__tests__/behavioral/tests/CreatingATest.test.d.ts +3 -0
  36. package/build/__tests__/behavioral/tests/CreatingATest.test.js +142 -45
  37. package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
  38. package/build/__tests__/implementation/EventTemplateItemBuilder.test.d.ts +1 -0
  39. package/build/__tests__/implementation/EventTemplateItemBuilder.test.js +105 -11
  40. package/build/__tests__/implementation/EventTemplateItemBuilder.test.js.map +1 -1
  41. package/build/templateItemBuilders/EventTemplateItemBuilder.js +2 -2
  42. package/build/templateItemBuilders/EventTemplateItemBuilder.js.map +1 -1
  43. package/package.json +37 -37
  44. package/src/.spruce/events/events.contract.ts +6 -0
  45. package/src/.spruce/events/heartwood/didRegisterSkillViews.v2021_02_11.contract.ts +15 -0
  46. package/src/.spruce/events/heartwood/generateUrl.v2021_02_11.contract.ts +21 -4
  47. package/src/.spruce/events/heartwood/getSkillViews.v2021_02_11.contract.ts +18 -1
  48. package/src/.spruce/events/heartwood/listViews.v2021_02_11.contract.ts +47 -0
  49. package/src/.spruce/events/heartwood/registerSkillViews.v2021_02_11.contract.ts +11 -0
  50. package/src/__tests__/behavioral/skill/UpgradingASkill.test.ts +0 -184
  51. package/src/__tests__/behavioral/skill/UpgradingASkill2.test.ts +120 -157
  52. package/src/__tests__/behavioral/skill/UpgradingASkill3.test.ts +184 -78
  53. package/src/__tests__/behavioral/skill/UpgradingASkill4.test.ts +90 -91
  54. package/src/__tests__/behavioral/skill/UpgradingASkill5.test.ts +128 -0
  55. package/src/__tests__/behavioral/tests/CreatingATest.test.ts +29 -12
  56. package/src/__tests__/implementation/EventTemplateItemBuilder.test.ts +124 -9
  57. package/src/templateItemBuilders/EventTemplateItemBuilder.ts +8 -2
@@ -34,16 +34,7 @@ export default class CreatingBehavioralTestsTest extends AbstractTestTest {
34
34
  )
35
35
  protected static async canCreateBehavioralTest(testName: string) {
36
36
  LintService.enableLinting()
37
- const { promise } = await this.installAndStartTestActionAndWaitForInput()
38
-
39
- this.selectOptionBasedOnLabel(testName)
40
-
41
- const response = await promise
42
-
43
- const match = testUtil.assertFileByNameInGeneratedFiles(
44
- 'CanBookAppointment.test.ts',
45
- response.files
46
- )
37
+ const match = await this.createTestAndGetFile(testName)
47
38
 
48
39
  assert.doesInclude(match, 'behavioral')
49
40
 
@@ -100,8 +91,8 @@ export default class CreatingBehavioralTestsTest extends AbstractTestTest {
100
91
  await promise
101
92
  }
102
93
 
103
- @test('can select subdir 1', 'test')
104
- @test('can select subdir 2', 'test-2')
94
+ @test('can select sub dir 1', 'test')
95
+ @test('can select sub dir 2', 'test-2')
105
96
  protected static async selectingAnOptionRendersToSubDir(dirName: string) {
106
97
  await this.installTests()
107
98
  this.createTestSubDir('behavioral', dirName)
@@ -146,6 +137,13 @@ export default class CreatingBehavioralTestsTest extends AbstractTestTest {
146
137
  this.ui.reset()
147
138
  }
148
139
 
140
+ @test()
141
+ protected static async allTestsComeFakedToStart() {
142
+ const testFile = await this.createTestAndGetFile()
143
+ const contents = diskUtil.readFile(testFile)
144
+ assert.doesInclude(contents, 'fake.login()')
145
+ }
146
+
149
147
  private static createTestSubDir(...testDirs: string[]) {
150
148
  const newDir = this.resolveTestDir(...testDirs)
151
149
  diskUtil.createDir(newDir)
@@ -155,6 +153,15 @@ export default class CreatingBehavioralTestsTest extends AbstractTestTest {
155
153
  return this.resolvePath('src', '__tests__', ...testDirs)
156
154
  }
157
155
 
156
+ private static async createTest(testName = 'AbstractSpruceFixtureTest') {
157
+ const { promise } = await this.installAndStartTestActionAndWaitForInput()
158
+
159
+ this.selectOptionBasedOnLabel(testName)
160
+
161
+ const response = await promise
162
+ return response
163
+ }
164
+
158
165
  private static async installAndStartTestActionAndWaitForInput(
159
166
  testType = 'behavioral'
160
167
  ) {
@@ -174,4 +181,14 @@ export default class CreatingBehavioralTestsTest extends AbstractTestTest {
174
181
  await this.waitForInput()
175
182
  await this.ui.sendInput(selectedSubClass ?? '')
176
183
  }
184
+
185
+ private static async createTestAndGetFile(testName?: string) {
186
+ const response = await this.createTest(testName)
187
+
188
+ const match = testUtil.assertFileByNameInGeneratedFiles(
189
+ 'CanBookAppointment.test.ts',
190
+ response.files
191
+ )
192
+ return match
193
+ }
177
194
  }
@@ -120,14 +120,14 @@ const relatedToRelatedToProximitySchema = buildSchema({
120
120
  })
121
121
 
122
122
  const relatedToRelatedToProximitySchemaTemplateItem: SchemaTemplateItem = {
123
- namespace: 'Proximity',
123
+ namespace: 'proximity',
124
124
  id: relatedToRelatedToProximitySchema.id,
125
125
  nameCamel: 'relatedToRelatedToProximitySchema',
126
126
  namePascal: 'RelatedToRelatedToProximitySchema',
127
127
  nameReadable: 'relatedToRelatedToProximitySchema',
128
128
  schema: {
129
129
  ...relatedToRelatedToProximitySchema,
130
- namespace: 'Proximity',
130
+ namespace: 'proximity',
131
131
  },
132
132
  isNested: true,
133
133
  destinationDir: '#spruce/events',
@@ -150,14 +150,14 @@ const relatedToProximitySchema = buildSchema({
150
150
  })
151
151
 
152
152
  const relatedToProximitySchemaTemplateItem: SchemaTemplateItem = {
153
- namespace: 'Proximity',
153
+ namespace: 'proximity',
154
154
  id: relatedToProximitySchema.id,
155
155
  nameCamel: 'relatedToProximitySchema',
156
156
  namePascal: 'RelatedToProximitySchema',
157
157
  nameReadable: 'relatedToProximitySchema',
158
158
  schema: {
159
159
  id: 'relatedToProximitySchema',
160
- namespace: 'Proximity',
160
+ namespace: 'proximity',
161
161
  version: expectedVersion,
162
162
  fields: {
163
163
  boolField: {
@@ -169,7 +169,7 @@ const relatedToProximitySchemaTemplateItem: SchemaTemplateItem = {
169
169
  schemaIds: [
170
170
  {
171
171
  id: 'relatedToRelatedToProximitySchema',
172
- namespace: 'Proximity',
172
+ namespace: 'proximity',
173
173
  version: expectedVersion,
174
174
  },
175
175
  ],
@@ -184,6 +184,7 @@ const relatedToProximitySchemaTemplateItem: SchemaTemplateItem = {
184
184
  const proximityEmitPayloadSchema = buildSchema({
185
185
  version: expectedVersion,
186
186
  id: 'proximityEmitPayload',
187
+ namespace: 'proximity',
187
188
  fields: {
188
189
  textField: {
189
190
  type: 'text',
@@ -198,14 +199,14 @@ const proximityEmitPayloadSchema = buildSchema({
198
199
  })
199
200
 
200
201
  const proximityEmitPayloadTemplateItem: SchemaTemplateItem = {
201
- namespace: 'Proximity',
202
+ namespace: 'proximity',
202
203
  id: proximityEmitPayloadSchema.id,
203
204
  nameCamel: 'proximityEmitPayload',
204
205
  namePascal: 'ProximityEmitPayload',
205
206
  nameReadable: 'proximityEmitPayload',
206
207
  schema: {
207
208
  id: 'proximityEmitPayload',
208
- namespace: 'Proximity',
209
+ namespace: 'proximity',
209
210
  version: expectedVersion,
210
211
  fields: {
211
212
  textField: {
@@ -217,7 +218,7 @@ const proximityEmitPayloadTemplateItem: SchemaTemplateItem = {
217
218
  schemaIds: [
218
219
  {
219
220
  id: 'relatedToProximitySchema',
220
- namespace: 'Proximity',
221
+ namespace: 'proximity',
221
222
  version: expectedVersion,
222
223
  },
223
224
  ],
@@ -339,7 +340,6 @@ export default class EventTemplateItemBuilderTest extends AbstractCliTest {
339
340
  eventContractTemplateItems,
340
341
  expectedEventContractTemplateItems
341
342
  )
342
-
343
343
  assert.isEqualDeep(schemaTemplateItems, expectedSchemaTemplateItems)
344
344
  }
345
345
 
@@ -379,4 +379,119 @@ export default class EventTemplateItemBuilderTest extends AbstractCliTest {
379
379
  assert.isEqual(eventContractTemplateItems[0].nameCamel, 'registerEvents')
380
380
  assert.isEqual(eventContractTemplateItems[1].nameCamel, 'zebraCheeta')
381
381
  }
382
+
383
+ @test()
384
+ protected static eventContractTemplateItemsHaveProperNamespacesImports() {
385
+ const groupsExpectedImports = [
386
+ {
387
+ package:
388
+ '#spruce/schemas/groups/v2021_12_01/listEmitTargetAndPayload.schema',
389
+ importAs: 'listEmitTargetAndPayloadSchema',
390
+ },
391
+ {
392
+ package:
393
+ '#spruce/schemas/groups/v2021_12_01/listResponsePayload.schema',
394
+ importAs: 'listResponsePayloadSchema',
395
+ },
396
+ {
397
+ importAs: '{ buildEventContract }',
398
+ package: '@sprucelabs/mercury-types',
399
+ },
400
+ {
401
+ importAs: '{ buildPermissionContract }',
402
+ package: '@sprucelabs/mercury-types',
403
+ },
404
+ ]
405
+
406
+ const appointmentsExpectedImports = [
407
+ {
408
+ package:
409
+ '#spruce/schemas/appointments/v2021_06_23/listEmitTargetAndPayload.schema',
410
+ importAs: 'listEmitTargetAndPayloadSchema',
411
+ },
412
+ {
413
+ package:
414
+ '#spruce/schemas/appointments/v2021_06_23/listResponsePayload.schema',
415
+ importAs: 'listResponsePayloadSchema',
416
+ },
417
+ {
418
+ importAs: '{ buildEventContract }',
419
+ package: '@sprucelabs/mercury-types',
420
+ },
421
+ {
422
+ importAs: '{ buildPermissionContract }',
423
+ package: '@sprucelabs/mercury-types',
424
+ },
425
+ ]
426
+
427
+ const { eventContractTemplateItems } = this.itemBuilder.buildTemplateItems({
428
+ contracts: [
429
+ {
430
+ eventSignatures: {
431
+ 'groups.list::v2021_12_01': {
432
+ emitPayloadSchema: {
433
+ id: 'listEmitTargetAndPayload',
434
+ version: 'v2021_12_01',
435
+ namespace: 'Groups',
436
+ name: '',
437
+ fields: {},
438
+ },
439
+ responsePayloadSchema: {
440
+ id: 'listResponsePayload',
441
+ version: 'v2021_12_01',
442
+ namespace: 'Groups',
443
+ name: '',
444
+ fields: {},
445
+ },
446
+ emitPermissionContract: {
447
+ id: 'listEmitPermissions',
448
+ name: 'list',
449
+ requireAllPermissions: false,
450
+ permissions: [],
451
+ },
452
+ },
453
+
454
+ 'appointments.list::v2021_06_23': {
455
+ emitPayloadSchema: {
456
+ id: 'listEmitTargetAndPayload',
457
+ version: 'v2021_06_23',
458
+ namespace: 'Appointments',
459
+ name: '',
460
+ fields: {},
461
+ },
462
+ responsePayloadSchema: {
463
+ id: 'listResponsePayload',
464
+ version: 'v2021_06_23',
465
+ namespace: 'Appointments',
466
+ name: '',
467
+ fields: {},
468
+ },
469
+ emitPermissionContract: {
470
+ id: 'listEmitPermissions',
471
+ name: 'list appointments',
472
+ requireAllPermissions: false,
473
+ permissions: [],
474
+ },
475
+ listenPermissionContract: {
476
+ id: 'listListenPermissions',
477
+ name: 'list appointments',
478
+ requireAllPermissions: false,
479
+ permissions: [],
480
+ },
481
+ },
482
+ },
483
+ },
484
+ ],
485
+ localNamespace: 'testing',
486
+ })
487
+
488
+ assert.isEqualDeep(
489
+ eventContractTemplateItems[0].imports,
490
+ groupsExpectedImports
491
+ )
492
+ assert.isEqualDeep(
493
+ eventContractTemplateItems[1].imports,
494
+ appointmentsExpectedImports
495
+ )
496
+ }
382
497
  }
@@ -197,13 +197,19 @@ export default class EventTemplateItemBuilder {
197
197
 
198
198
  if (emitPayloadSchema) {
199
199
  signatureTemplateItem.emitPayloadSchema = schemaItems.find(
200
- (i) => i.id === emitPayloadSchema.id
200
+ (i) =>
201
+ i.id === emitPayloadSchema.id &&
202
+ (!emitPayloadSchema.namespace ||
203
+ i.namespace === emitPayloadSchema.namespace)
201
204
  )
202
205
  }
203
206
 
204
207
  if (responsePayloadSchema) {
205
208
  signatureTemplateItem.responsePayloadSchema = schemaItems.find(
206
- (i) => i.id === responsePayloadSchema.id
209
+ (i) =>
210
+ i.id === responsePayloadSchema.id &&
211
+ (!responsePayloadSchema.namespace ||
212
+ i.namespace === responsePayloadSchema.namespace)
207
213
  )
208
214
  }
209
215
  return signatureTemplateItem