@sprucelabs/spruce-cli 28.2.0 → 28.2.2
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 +16 -0
- package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js +9 -9
- package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js.map +1 -1
- package/build/__tests__/behavioral/permissions/SyncingPermissions.test.d.ts +7 -0
- package/build/__tests__/behavioral/permissions/SyncingPermissions.test.js +116 -14
- package/build/__tests__/behavioral/permissions/SyncingPermissions.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/CreatingATest.test.js +1 -1
- package/build/__tests__/behavioral/tests/CreatingATest.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/tests/TestingDataStores.test.js +3 -3
- package/build/__tests__/behavioral/tests/TestingDataStores.test.js.map +1 -1
- package/build/__tests__/behavioral/views/KeepingViewsInSync.test.d.ts +5 -0
- package/build/__tests__/behavioral/views/KeepingViewsInSync.test.js +60 -7
- package/build/__tests__/behavioral/views/KeepingViewsInSync.test.js.map +1 -1
- package/build/__tests__/support/EventFaker.d.ts +2 -0
- package/build/__tests__/support/EventFaker.js +7 -0
- package/build/__tests__/support/EventFaker.js.map +1 -1
- package/build/features/permission/writers/PermissionWriter.js +10 -1
- package/build/features/permission/writers/PermissionWriter.js.map +1 -1
- package/build/features/view/actions/CreateAction.d.ts +1 -0
- package/build/features/view/writers/ViewWriter.d.ts +1 -1
- package/build/features/view/writers/ViewWriter.js +4 -0
- package/build/features/view/writers/ViewWriter.js.map +1 -1
- package/package.json +3 -3
- package/src/__tests__/behavioral/events/KeepingEventsInSync2.test.ts +23 -10
- package/src/__tests__/behavioral/permissions/SyncingPermissions.test.ts +185 -52
- package/src/__tests__/behavioral/tests/CreatingATest.test.ts +1 -1
- package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +1 -1
- package/src/__tests__/behavioral/tests/TestingDataStores.test.ts +11 -3
- package/src/__tests__/behavioral/views/KeepingViewsInSync.test.ts +89 -7
- package/src/__tests__/support/EventFaker.ts +10 -0
- package/src/features/permission/writers/PermissionWriter.ts +11 -1
- package/src/features/view/actions/CreateAction.ts +2 -0
- package/src/features/view/writers/ViewWriter.ts +15 -1
|
@@ -8,7 +8,16 @@ const AbstractWriter_1 = __importDefault(require("../../../writers/AbstractWrite
|
|
|
8
8
|
class PermissionWriter extends AbstractWriter_1.default {
|
|
9
9
|
async writeTypesFile(cwd, map) {
|
|
10
10
|
const destination = spruce_skill_utils_1.diskUtil.resolveHashSprucePath(cwd, 'permissions', 'permissions.types.ts');
|
|
11
|
-
const
|
|
11
|
+
const keys = Object.keys(map);
|
|
12
|
+
keys.sort();
|
|
13
|
+
const sorted = {};
|
|
14
|
+
for (const key of keys) {
|
|
15
|
+
map[key].sort((a, b) => a.localeCompare(b));
|
|
16
|
+
sorted[key] = map[key];
|
|
17
|
+
}
|
|
18
|
+
const contents = this.templates.permissionTypes({
|
|
19
|
+
contracts: sorted,
|
|
20
|
+
});
|
|
12
21
|
const files = await this.writeFileIfChangedMixinResults(destination, contents, 'Types file for any permission contracts you created or depend on.');
|
|
13
22
|
return files;
|
|
14
23
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PermissionWriter.js","sourceRoot":"","sources":["../../../../src/features/permission/writers/PermissionWriter.ts"],"names":[],"mappings":";;;;;AACA,uEAAoE;AACpE,qFAA4D;AAG5D,MAAqB,gBAAiB,SAAQ,wBAAc;IACjD,KAAK,CAAC,cAAc,CAAC,GAAW,EAAE,GAA0B;QAC/D,MAAM,WAAW,GAAG,6BAAQ,CAAC,qBAAqB,CAC9C,GAAG,EACH,aAAa,EACb,sBAAsB,CACzB,CAAA;QAED,MAAM,
|
|
1
|
+
{"version":3,"file":"PermissionWriter.js","sourceRoot":"","sources":["../../../../src/features/permission/writers/PermissionWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export default class ViewWriter extends AbstractWriter {
|
|
|
5
5
|
namePascal: string;
|
|
6
6
|
nameKebab: string;
|
|
7
7
|
}): Promise<import("../../../writers/AbstractWriter").WriteResults>;
|
|
8
|
-
writeCombinedViewsFile(cwd: string, options: ViewsOptions): Promise<import("../../../writers/AbstractWriter").WriteResults>;
|
|
8
|
+
writeCombinedViewsFile(cwd: string, options: Omit<ViewsOptions, 'allTemplateItems'>): Promise<import("../../../writers/AbstractWriter").WriteResults>;
|
|
9
9
|
private removeFileExtensionsFromTemplateItems;
|
|
10
10
|
private makePathRelative;
|
|
11
11
|
writeViewController(cwd: string, options: {
|
|
@@ -22,11 +22,15 @@ class ViewWriter extends AbstractWriter_1.default {
|
|
|
22
22
|
if (appTemplateItem) {
|
|
23
23
|
appTemplateItem = this.makePathRelative(appTemplateItem, destinationDir);
|
|
24
24
|
}
|
|
25
|
+
svcTemplateItems.sort((a, b) => a.namePascal.localeCompare(b.namePascal));
|
|
26
|
+
vcTemplateItems.sort((a, b) => a.namePascal.localeCompare(b.namePascal));
|
|
27
|
+
const allTemplateItems = [...vcTemplateItems, ...svcTemplateItems].sort((a, b) => a.namePascal.localeCompare(b.namePascal));
|
|
25
28
|
const contents = this.templates.views({
|
|
26
29
|
vcTemplateItems,
|
|
27
30
|
svcTemplateItems,
|
|
28
31
|
viewPluginItems,
|
|
29
32
|
appTemplateItem,
|
|
33
|
+
allTemplateItems,
|
|
30
34
|
...rest,
|
|
31
35
|
});
|
|
32
36
|
const results = await this.writeFileIfChangedMixinResults(destination, contents, 'Used to export your controllers to Heartwood.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewWriter.js","sourceRoot":"","sources":["../../../../src/features/view/writers/ViewWriter.ts"],"names":[],"mappings":";;;;;AAAA,gEAAuC;AACvC,uEAAyD;AAMzD,8EAAqD;AACrD,qFAA4D;AAE5D,MAAqB,UAAW,SAAQ,wBAAc;IAC3C,wBAAwB,CAC3B,GAAW,EACX,OAGC;QAED,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,uBAAuB,CACzC,GAAG,EACH,WAAW,EACX,OAAO,CAAC,UAAU,CACrB,CAAA;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAA;IAC5E,CAAC;IAEM,KAAK,CAAC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"ViewWriter.js","sourceRoot":"","sources":["../../../../src/features/view/writers/ViewWriter.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
7
|
-
"version": "28.2.
|
|
7
|
+
"version": "28.2.2",
|
|
8
8
|
"skill": {
|
|
9
9
|
"namespace": "spruce-cli",
|
|
10
10
|
"upgradeIgnoreList": [
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"@sprucelabs/spruce-core-schemas": "^41.3.7",
|
|
86
86
|
"@sprucelabs/spruce-event-utils": "^41.0.126",
|
|
87
87
|
"@sprucelabs/spruce-skill-utils": "^32.0.116",
|
|
88
|
-
"@sprucelabs/spruce-templates": "^28.2.
|
|
88
|
+
"@sprucelabs/spruce-templates": "^28.2.2",
|
|
89
89
|
"@typescript-eslint/eslint-plugin": "^8.45.0",
|
|
90
90
|
"@typescript-eslint/parser": "^8.45.0",
|
|
91
91
|
"cfonts": "^3.3.1",
|
|
@@ -570,5 +570,5 @@
|
|
|
570
570
|
"conventional-changelog-sprucelabs"
|
|
571
571
|
]
|
|
572
572
|
},
|
|
573
|
-
"gitHead": "
|
|
573
|
+
"gitHead": "ba4318682bd68509a074a3a9c5361a1688aec22c"
|
|
574
574
|
}
|
|
@@ -172,31 +172,44 @@ export default class KeepingEventsInSyncTest extends AbstractEventTest {
|
|
|
172
172
|
)) as any
|
|
173
173
|
const sig = eventContractUtil.getSignatureByName(contract, fqen)
|
|
174
174
|
|
|
175
|
-
assert.isTruthy(sig.emitPayloadSchema)
|
|
176
|
-
assert.
|
|
175
|
+
assert.isTruthy(sig.emitPayloadSchema, 'Did not save emitPayloadSchema')
|
|
176
|
+
assert.isEqual(
|
|
177
177
|
//@ts-ignore
|
|
178
178
|
sig.emitPayloadSchema.fields?.payload?.options?.schema?.id,
|
|
179
|
-
'myNewEventEmitPayloadId'
|
|
179
|
+
'myNewEventEmitPayloadId',
|
|
180
|
+
'emitPayloadSchema id is wrong'
|
|
180
181
|
)
|
|
181
|
-
assert.
|
|
182
|
+
assert.isEqual(
|
|
182
183
|
sig.responsePayloadSchema?.id,
|
|
183
|
-
'myNewEventResponsePayloadId'
|
|
184
|
+
'myNewEventResponsePayloadId',
|
|
185
|
+
'responsePayloadSchema id is wrong'
|
|
186
|
+
)
|
|
187
|
+
|
|
188
|
+
assert.isTruthy(
|
|
189
|
+
sig.emitPermissionContract,
|
|
190
|
+
'emitPermissionContract missing'
|
|
184
191
|
)
|
|
185
192
|
|
|
186
|
-
assert.isTruthy(sig.emitPermissionContract)
|
|
187
193
|
assert.isEqual(
|
|
188
194
|
sig.emitPermissionContract.id,
|
|
189
|
-
`${skill2.slug}.myNewEventEmitPermissionContract
|
|
195
|
+
`${skill2.slug}.myNewEventEmitPermissionContract`,
|
|
196
|
+
'emitPermissionContract id is wrong'
|
|
197
|
+
)
|
|
198
|
+
assert.isEqual(
|
|
199
|
+
sig.emitPermissionContract.permissions[0].id,
|
|
200
|
+
'can-emit',
|
|
201
|
+
'emitPermissionContract permission id is wrong'
|
|
190
202
|
)
|
|
191
|
-
assert.isEqual(sig.emitPermissionContract.permissions[0].id, 'can-emit')
|
|
192
203
|
assert.isTruthy(sig.listenPermissionContract)
|
|
193
204
|
assert.isEqual(
|
|
194
205
|
sig.listenPermissionContract.id,
|
|
195
|
-
`${skill2.slug}.myNewEventListenPermissionContract
|
|
206
|
+
`${skill2.slug}.myNewEventListenPermissionContract`,
|
|
207
|
+
'listenPermissionContract id is wrong'
|
|
196
208
|
)
|
|
197
209
|
assert.isEqual(
|
|
198
210
|
sig.listenPermissionContract.permissions[0].id,
|
|
199
|
-
'can-listen'
|
|
211
|
+
'can-listen',
|
|
212
|
+
'listenPermissionContract permission id is wrong'
|
|
200
213
|
)
|
|
201
214
|
|
|
202
215
|
assert.isEqual(sig.description, description, 'description missing')
|
|
@@ -1,43 +1,51 @@
|
|
|
1
1
|
import { MercuryClientFactory } from '@sprucelabs/mercury-client'
|
|
2
2
|
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
|
|
3
|
-
import { assert, test } from '@sprucelabs/test-utils'
|
|
3
|
+
import { assert, generateId, test } from '@sprucelabs/test-utils'
|
|
4
4
|
import ActionFactory from '../../../features/ActionFactory'
|
|
5
5
|
import SyncAction, {
|
|
6
6
|
SyncPermissionsOptions,
|
|
7
7
|
} from '../../../features/permission/actions/SyncAction'
|
|
8
8
|
import { ListPermContractsTargetAndPayload } from '../../../features/permission/stores/PermissionStore'
|
|
9
9
|
import testUtil from '../../../tests/utilities/test.utility'
|
|
10
|
+
import { ListSkill } from '../../support/EventFaker'
|
|
10
11
|
import AbstractPermissionsTest from './support/AbstractPermissionsTest'
|
|
11
12
|
import generateShortAlphaId from './support/generateShortAlphaId'
|
|
12
|
-
import { sortPermissionContracts } from './support/sortPermissionContracts'
|
|
13
13
|
|
|
14
14
|
export default class SyncingPermissionsTest extends AbstractPermissionsTest {
|
|
15
15
|
private static syncAction: SyncAction
|
|
16
16
|
private static contractId1: string
|
|
17
17
|
private static contractId2: string
|
|
18
|
+
private static heartwoodSkill: ListSkill = {
|
|
19
|
+
id: generateId(),
|
|
20
|
+
slug: 'heartwood',
|
|
21
|
+
dateCreated: 0,
|
|
22
|
+
name: 'Heartwood',
|
|
23
|
+
}
|
|
18
24
|
|
|
19
25
|
protected static async beforeAll() {
|
|
20
26
|
await super.beforeAll()
|
|
21
|
-
this.contractId1 = generateShortAlphaId()
|
|
22
|
-
this.contractId2 = generateShortAlphaId()
|
|
27
|
+
this.contractId1 = 'b-should-be-second' + generateShortAlphaId()
|
|
28
|
+
this.contractId2 = 'a-should-be-first' + generateShortAlphaId()
|
|
23
29
|
}
|
|
24
30
|
|
|
25
31
|
protected static async beforeEach() {
|
|
26
32
|
await super.beforeEach()
|
|
33
|
+
|
|
27
34
|
this.syncAction = this.Action('permission', 'sync')
|
|
35
|
+
|
|
28
36
|
MercuryClientFactory.setIsTestMode(true)
|
|
29
37
|
ExecuteTrackingAction.wasExecuteInvoked = false
|
|
30
38
|
await this.eventFaker.fakeListPermissionContracts()
|
|
39
|
+
|
|
40
|
+
await this.eventFaker.fakeListSkills(() => {
|
|
41
|
+
return [this.heartwoodSkill]
|
|
42
|
+
})
|
|
31
43
|
}
|
|
32
44
|
|
|
33
45
|
@test()
|
|
34
46
|
protected static async generatesExpectedTypesFile() {
|
|
35
47
|
const results = await this.sync()
|
|
36
|
-
|
|
37
|
-
const expected = this.resolveHashSprucePath(
|
|
38
|
-
`permissions/permissions.types.ts`
|
|
39
|
-
)
|
|
40
|
-
|
|
48
|
+
const expected = this.getTypesPath()
|
|
41
49
|
testUtil.assertFileByPathInGeneratedFiles(expected, results.files)
|
|
42
50
|
}
|
|
43
51
|
|
|
@@ -74,47 +82,42 @@ export default class SyncingPermissionsTest extends AbstractPermissionsTest {
|
|
|
74
82
|
protected static async combinedFileImportsAllPermissions() {
|
|
75
83
|
await this.createPermissionContract(this.contractId2)
|
|
76
84
|
|
|
77
|
-
const imported = await this.
|
|
78
|
-
this.getCombinedPath()
|
|
79
|
-
)
|
|
85
|
+
const imported = await this.import()
|
|
80
86
|
|
|
81
|
-
assert.isEqualDeep(
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
},
|
|
116
|
-
].sort(sortPermissionContracts)
|
|
117
|
-
)
|
|
87
|
+
assert.isEqualDeep(imported, [
|
|
88
|
+
{
|
|
89
|
+
id: this.contractId2,
|
|
90
|
+
name: this.contractId2,
|
|
91
|
+
description: '',
|
|
92
|
+
requireAllPermissions: false,
|
|
93
|
+
permissions: [
|
|
94
|
+
{
|
|
95
|
+
id: 'can-high-five',
|
|
96
|
+
name: 'Can give high five',
|
|
97
|
+
description:
|
|
98
|
+
'Will this person be allowed to high five?',
|
|
99
|
+
defaults: { skill: false },
|
|
100
|
+
requireAllStatuses: false,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
id: this.contractId1,
|
|
106
|
+
name: this.contractId1,
|
|
107
|
+
description: '',
|
|
108
|
+
requireAllPermissions: false,
|
|
109
|
+
permissions: [
|
|
110
|
+
{
|
|
111
|
+
id: 'can-high-five',
|
|
112
|
+
name: 'Can give high five',
|
|
113
|
+
description:
|
|
114
|
+
'Will this person be allowed to high five?',
|
|
115
|
+
defaults: { skill: false },
|
|
116
|
+
requireAllStatuses: false,
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
])
|
|
118
121
|
}
|
|
119
122
|
|
|
120
123
|
@test()
|
|
@@ -130,8 +133,11 @@ export default class SyncingPermissionsTest extends AbstractPermissionsTest {
|
|
|
130
133
|
)
|
|
131
134
|
|
|
132
135
|
await this.sync({ shouldSyncCorePermissions: true })
|
|
133
|
-
assert.isTrue(wasHit)
|
|
134
|
-
assert.isUndefined(
|
|
136
|
+
assert.isTrue(wasHit, 'Did not emit list-permission-contracts event')
|
|
137
|
+
assert.isUndefined(
|
|
138
|
+
passedTarget,
|
|
139
|
+
'Should not have passed a target to list-permission-contracts'
|
|
140
|
+
)
|
|
135
141
|
}
|
|
136
142
|
|
|
137
143
|
@test()
|
|
@@ -145,6 +151,127 @@ export default class SyncingPermissionsTest extends AbstractPermissionsTest {
|
|
|
145
151
|
assert.isTrue(ExecuteTrackingAction.wasExecuteInvoked)
|
|
146
152
|
}
|
|
147
153
|
|
|
154
|
+
@test()
|
|
155
|
+
protected static async permsSentInAlphabeticalOrder() {
|
|
156
|
+
await this.addHeartwoodAsDependency()
|
|
157
|
+
await this.fakeHeartwoodPermContracts()
|
|
158
|
+
|
|
159
|
+
await this.sync()
|
|
160
|
+
const contents = this.readTypesFile()
|
|
161
|
+
|
|
162
|
+
const firstId = contents.indexOf('perk-a-should-be-first')
|
|
163
|
+
const secondId = contents.indexOf('perk-should-be-second')
|
|
164
|
+
const thirdId = contents.indexOf('perl-a-should-be-first')
|
|
165
|
+
const fourthId = contents.indexOf('perl-should-be-second')
|
|
166
|
+
const fifthId = contents.indexOf('perm-a-should-be-first')
|
|
167
|
+
const sixthId = contents.indexOf('perm-should-be-second')
|
|
168
|
+
|
|
169
|
+
assert.isTrue(
|
|
170
|
+
firstId < secondId,
|
|
171
|
+
'Permissions are not in alphabetical order'
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
assert.isTrue(
|
|
175
|
+
secondId < thirdId,
|
|
176
|
+
'Permissions are not in alphabetical order'
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
assert.isTrue(
|
|
180
|
+
thirdId < fourthId,
|
|
181
|
+
'Permissions are not in alphabetical order'
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
assert.isTrue(
|
|
185
|
+
fourthId < fifthId,
|
|
186
|
+
'Permissions are not in alphabetical order'
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
assert.isTrue(
|
|
190
|
+
fifthId < sixthId,
|
|
191
|
+
'Permissions are not in alphabetical order'
|
|
192
|
+
)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
private static async fakeHeartwoodPermContracts() {
|
|
196
|
+
await this.eventFaker.fakeListPermissionContracts(() => {
|
|
197
|
+
return [
|
|
198
|
+
{
|
|
199
|
+
id: 'ab-' + generateShortAlphaId(),
|
|
200
|
+
contract: {
|
|
201
|
+
id: 'ab-' + generateShortAlphaId(),
|
|
202
|
+
name: generateId(),
|
|
203
|
+
permissions: [
|
|
204
|
+
{
|
|
205
|
+
id: 'perl-should-be-second',
|
|
206
|
+
name: 'Should be second',
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
id: 'perl-a-should-be-first',
|
|
210
|
+
name: 'Should be first',
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
},
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
id: 'ba-' + generateShortAlphaId(),
|
|
217
|
+
contract: {
|
|
218
|
+
id: 'ba-' + generateShortAlphaId(),
|
|
219
|
+
name: generateId(),
|
|
220
|
+
permissions: [
|
|
221
|
+
{
|
|
222
|
+
id: 'perm-should-be-second',
|
|
223
|
+
name: 'Should be second',
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
id: 'perm-a-should-be-first',
|
|
227
|
+
name: 'Should be first',
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
},
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: 'aa-' + generateShortAlphaId(),
|
|
234
|
+
contract: {
|
|
235
|
+
id: 'aa-' + generateShortAlphaId(),
|
|
236
|
+
name: generateId(),
|
|
237
|
+
permissions: [
|
|
238
|
+
{
|
|
239
|
+
id: 'perk-should-be-second',
|
|
240
|
+
name: 'Should be second',
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
id: 'perk-a-should-be-first',
|
|
244
|
+
name: 'Should be first',
|
|
245
|
+
},
|
|
246
|
+
],
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
]
|
|
250
|
+
})
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
private static async import() {
|
|
254
|
+
return await this.Service('import').importDefault(
|
|
255
|
+
this.getCombinedPath()
|
|
256
|
+
)
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
private static async addHeartwoodAsDependency() {
|
|
260
|
+
const results = await this.Action('dependency', 'add').execute({
|
|
261
|
+
namespace: 'heartwood',
|
|
262
|
+
})
|
|
263
|
+
|
|
264
|
+
assert.isFalsy(results.errors, 'Should not have errored')
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
private static readTypesFile() {
|
|
268
|
+
return diskUtil.readFile(this.getTypesPath())
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
private static getTypesPath() {
|
|
272
|
+
return this.resolveHashSprucePath(`permissions/permissions.types.ts`)
|
|
273
|
+
}
|
|
274
|
+
|
|
148
275
|
private static getCombinedPath() {
|
|
149
276
|
return this.resolveHashSprucePath('permissions', 'permissions.ts')
|
|
150
277
|
}
|
|
@@ -158,7 +285,13 @@ export default class SyncingPermissionsTest extends AbstractPermissionsTest {
|
|
|
158
285
|
}
|
|
159
286
|
|
|
160
287
|
private static async sync(options?: SyncPermissionsOptions) {
|
|
161
|
-
|
|
288
|
+
const results = await this.syncAction.execute(options)
|
|
289
|
+
assert.isFalsy(
|
|
290
|
+
results.errors,
|
|
291
|
+
'Should not have errored when syncing permissions'
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
return results
|
|
162
295
|
}
|
|
163
296
|
|
|
164
297
|
private static async emitDidExecuteUpgrade() {
|
|
@@ -204,7 +204,7 @@ export default class SelectingAnAbstractTestClassTest extends AbstractTestTest {
|
|
|
204
204
|
|
|
205
205
|
await assert.doesThrowAsync(
|
|
206
206
|
() => this.Service('command').execute('yarn test'),
|
|
207
|
-
/false
|
|
207
|
+
/Expected: false/gis
|
|
208
208
|
)
|
|
209
209
|
}
|
|
210
210
|
|
|
@@ -75,11 +75,19 @@ export default class TestingDataStoresTest extends AbstractSkillTest {
|
|
|
75
75
|
shouldReportWhileRunning: false,
|
|
76
76
|
})
|
|
77
77
|
|
|
78
|
-
assert.isArray(testResults.errors)
|
|
79
|
-
assert.isLength(
|
|
78
|
+
assert.isArray(testResults.errors, 'should have returned errors')
|
|
79
|
+
assert.isLength(
|
|
80
|
+
testResults.errors,
|
|
81
|
+
1,
|
|
82
|
+
'should have only returned 1 error'
|
|
83
|
+
)
|
|
80
84
|
|
|
81
85
|
const first = testResults.errors[0]
|
|
82
86
|
|
|
83
|
-
assert.doesInclude(
|
|
87
|
+
assert.doesInclude(
|
|
88
|
+
first.message,
|
|
89
|
+
'Expected:',
|
|
90
|
+
'should have failed the test'
|
|
91
|
+
)
|
|
84
92
|
}
|
|
85
93
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
|
|
2
2
|
import { test, assert } from '@sprucelabs/test-utils'
|
|
3
3
|
import { FeatureActionResponse } from '../../../features/features.types'
|
|
4
|
+
import { CreateViewOptions } from '../../../features/view/actions/CreateAction'
|
|
4
5
|
import SyncAction from '../../../features/view/actions/SyncAction'
|
|
5
6
|
import AbstractSkillTest from '../../../tests/AbstractSkillTest'
|
|
6
7
|
import testUtil from '../../../tests/utilities/test.utility'
|
|
@@ -38,13 +39,7 @@ export default class KeepingViewsInSyncTest extends AbstractSkillTest {
|
|
|
38
39
|
|
|
39
40
|
@test()
|
|
40
41
|
protected static async generatesValidTypesFileWithNoSkillViews() {
|
|
41
|
-
|
|
42
|
-
viewType: 'view',
|
|
43
|
-
nameReadable: 'test',
|
|
44
|
-
viewModel: 'Card',
|
|
45
|
-
})
|
|
46
|
-
assert.isFalsy(results.errors)
|
|
47
|
-
await this.assertValuedViewsFile(results)
|
|
42
|
+
await this.createCardViewController('test')
|
|
48
43
|
}
|
|
49
44
|
|
|
50
45
|
@test()
|
|
@@ -62,6 +57,93 @@ export default class KeepingViewsInSyncTest extends AbstractSkillTest {
|
|
|
62
57
|
await this.Service('typeChecker').check(testScriptPath)
|
|
63
58
|
}
|
|
64
59
|
|
|
60
|
+
@test()
|
|
61
|
+
protected static async alwaysRendersCombinedViewsFileAlphabetically() {
|
|
62
|
+
await this.createCardViewController('apple bottom')
|
|
63
|
+
await this.createCardViewController('banana bottom')
|
|
64
|
+
await this.createCardViewController('zebra tooshie')
|
|
65
|
+
|
|
66
|
+
const contents = this.readCombinedViewsFile()
|
|
67
|
+
|
|
68
|
+
const vcsExpeced = `{
|
|
69
|
+
AppleBottomViewController,
|
|
70
|
+
BananaBottomViewController,
|
|
71
|
+
RootSkillViewController,
|
|
72
|
+
TestViewController,
|
|
73
|
+
ZebraTooshieViewController,
|
|
74
|
+
}`
|
|
75
|
+
|
|
76
|
+
assert.doesInclude(
|
|
77
|
+
contents,
|
|
78
|
+
vcsExpeced,
|
|
79
|
+
'views.ts vcs = {} out of order'
|
|
80
|
+
)
|
|
81
|
+
|
|
82
|
+
const viewControllerMapExpected = `'testing-views.apple-bottom': AppleBottomViewController
|
|
83
|
+
'testing-views.banana-bottom': BananaBottomViewController
|
|
84
|
+
'testing-views.root': RootSkillViewController
|
|
85
|
+
'testing-views.test': TestViewController
|
|
86
|
+
'testing-views.zebra-tooshie': ZebraTooshieViewController`
|
|
87
|
+
|
|
88
|
+
assert.doesInclude(
|
|
89
|
+
contents,
|
|
90
|
+
viewControllerMapExpected,
|
|
91
|
+
'views.ts viewControllerMap out of order'
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
const viewControllerOptionsMapExpected = `'testing-views.apple-bottom': ConstructorParameters<typeof AppleBottomViewController>[0]
|
|
95
|
+
'testing-views.banana-bottom': ConstructorParameters<typeof BananaBottomViewController>[0]
|
|
96
|
+
'testing-views.test': ConstructorParameters<typeof TestViewController>[0]
|
|
97
|
+
'testing-views.zebra-tooshie': ConstructorParameters<typeof ZebraTooshieViewController>[0]`
|
|
98
|
+
|
|
99
|
+
assert.doesInclude(
|
|
100
|
+
contents,
|
|
101
|
+
viewControllerOptionsMapExpected,
|
|
102
|
+
'views.ts viewControllerOptionsMap out of order'
|
|
103
|
+
)
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@test()
|
|
107
|
+
protected static async sortsSkillViewsAlphabetically() {
|
|
108
|
+
await this.create({
|
|
109
|
+
viewType: 'skillView',
|
|
110
|
+
nameReadable: 'Cheesey',
|
|
111
|
+
isRoot: false,
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
const skillViewControllerMapExpected = `'testing-views.cheesey': CheeseySkillViewController
|
|
115
|
+
'testing-views.root': RootSkillViewController`
|
|
116
|
+
|
|
117
|
+
const contents = this.readCombinedViewsFile()
|
|
118
|
+
|
|
119
|
+
assert.doesInclude(
|
|
120
|
+
contents,
|
|
121
|
+
skillViewControllerMapExpected,
|
|
122
|
+
'views.ts skillViewControllerMap out of order'
|
|
123
|
+
)
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
private static readCombinedViewsFile() {
|
|
127
|
+
return diskUtil.readFile(this.resolvePath('src/.spruce/views/views.ts'))
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
private static async createCardViewController(name: string) {
|
|
131
|
+
const options = {
|
|
132
|
+
viewType: 'view',
|
|
133
|
+
nameReadable: name,
|
|
134
|
+
viewModel: 'Card',
|
|
135
|
+
}
|
|
136
|
+
const results = await this.create(options)
|
|
137
|
+
|
|
138
|
+
await this.assertValuedViewsFile(results)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private static async create(options: CreateViewOptions) {
|
|
142
|
+
const results = await this.Action('view', 'create').execute(options)
|
|
143
|
+
assert.isFalsy(results.errors)
|
|
144
|
+
return results
|
|
145
|
+
}
|
|
146
|
+
|
|
65
147
|
private static async assertValuedViewsFile(results: FeatureActionResponse) {
|
|
66
148
|
const match = testUtil.assertFileByPathInGeneratedFiles(
|
|
67
149
|
`views/views.ts`,
|
|
@@ -4,6 +4,14 @@ import { generateId } from '@sprucelabs/test-utils'
|
|
|
4
4
|
import { ListPermContractsTargetAndPayload } from '../../features/permission/stores/PermissionStore'
|
|
5
5
|
|
|
6
6
|
export default class EventFaker {
|
|
7
|
+
public async fakeListSkills(cb?: () => void | ListSkill[]) {
|
|
8
|
+
await eventFaker.on('list-skills::v2020_12_25', () => {
|
|
9
|
+
return {
|
|
10
|
+
skills: cb?.() ?? [],
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
}
|
|
14
|
+
|
|
7
15
|
public async fakeListPermissionContracts(
|
|
8
16
|
cb?: (
|
|
9
17
|
targetAndPayload: ListPermContractsTargetAndPayload
|
|
@@ -42,3 +50,5 @@ export default class EventFaker {
|
|
|
42
50
|
})
|
|
43
51
|
}
|
|
44
52
|
}
|
|
53
|
+
|
|
54
|
+
export type ListSkill = SpruceSchemas.Mercury.v2020_12_25.ListSkillsSkill
|