Skip to content

Commit a4ba999

Browse files
committed
Fix zcap refresh tests.
1 parent 6e76b35 commit a4ba999

File tree

2 files changed

+61
-33
lines changed

2 files changed

+61
-33
lines changed

test/mocha/50-zcap-refresh.js

Lines changed: 60 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {ZcapClient} from '@digitalbazaar/ezcap';
2121
let accounts;
2222
let api;
2323

24-
describe.skip('zcap refresh', () => {
24+
describe('zcap refresh', () => {
2525
// mock session authentication for delegations endpoint
2626
let passportStub;
2727
let capabilityAgent;
@@ -85,8 +85,6 @@ describe.skip('zcap refresh', () => {
8585
const profilePath = `${baseURL}/profiles/${encodeURIComponent(profileId)}`;
8686
const zcapsPath = `${profilePath}/zcaps`;
8787
urls.policies = `${zcapsPath}/policies`;
88-
urls.refresh = `${zcapsPath}/refresh`;
89-
urls.viewablePolicy = `${urls.refresh}/policy`;
9088
urls.policy = `${urls.policies}/${encodeURIComponent(serviceAgent.id)}`;
9189

9290
({id: rootZcap} = createRootCapability({
@@ -102,7 +100,7 @@ describe.skip('zcap refresh', () => {
102100
await zcapClient.request({
103101
url: urls.policy,
104102
capability: rootZcap,
105-
method: 'post',
103+
method: 'delete',
106104
action: 'write'
107105
});
108106

@@ -141,7 +139,7 @@ describe.skip('zcap refresh', () => {
141139
let result;
142140
try {
143141
const {id: meterId} = await helpers.createMeter({
144-
profileId, zcapClient, serviceType: 'refreshing'
142+
controller: profileId, serviceType: 'refreshing'
145143
});
146144
const zcaps = await _createZcaps({
147145
profileId, zcapClient, serviceAgent
@@ -162,25 +160,57 @@ describe.skip('zcap refresh', () => {
162160
'controller', 'id', 'sequence', 'meterId', 'zcaps'
163161
]);
164162
result.sequence.should.equal(0);
165-
const {id: capabilityAgentId} = capabilityAgent;
166-
result.controller.should.equal(capabilityAgentId);
163+
result.controller.should.equal(profileId);
167164

168165
// wait for refresh promise to resolve
169166
const record = await configRefreshPromise;
170167
record.config.id.should.equal(configId);
171168
record.config.sequence.should.equal(1);
172-
record.meta.refresh.enabled.should.equal(true);
169+
record.meta.refresh.enabled.should.equal(false);
173170
record.meta.refresh.after.should.equal(expectedAfter);
174171
});
175172
it('should handle 403 for refresh policy', async () => {
176173
// remove any existing policy
177174
await zcapClient.request({
178175
url: urls.policy,
179176
capability: rootZcap,
180-
method: 'post',
177+
method: 'delete',
181178
action: 'write'
182179
});
183180

181+
// create policy and refrehs zcap for another delegate
182+
// (to erroneously reference to trigger `NotAllowedError`)
183+
let wrongRefreshZcap;
184+
{
185+
const secret = crypto.randomUUID();
186+
const handle = 'test';
187+
const otherDelegate = await CapabilityAgent.fromSecret({secret, handle});
188+
await zcapClient.write({
189+
url: urls.policies,
190+
capability: rootZcap,
191+
json: {
192+
policy: {
193+
sequence: 0,
194+
controller: profileId,
195+
delegate: otherDelegate.id,
196+
refresh: {}
197+
}
198+
}
199+
});
200+
const {baseUrl} = mockData;
201+
const profilePath =
202+
`${baseUrl}/profiles/${encodeURIComponent(profileId)}`;
203+
const refreshUrl =
204+
`${profilePath}/zcaps` +
205+
`/policies/${encodeURIComponent(serviceAgent.id)}/refresh`;
206+
wrongRefreshZcap = await helpers.delegate({
207+
controller: otherDelegate.id,
208+
capability: `urn:zcap:root:${encodeURIComponent(profilePath)}`,
209+
invocationTarget: refreshUrl,
210+
zcapClient
211+
});
212+
}
213+
184214
// function to be called when refreshing the created config
185215
let expectedAfter;
186216
const configId = `${mockData.baseUrl}/refreshables/${crypto.randomUUID()}`;
@@ -202,8 +232,8 @@ describe.skip('zcap refresh', () => {
202232
await mockData.refreshingService.configStorage.update({
203233
config: {...record.config, sequence: record.config.sequence + 1},
204234
refresh: {
205-
enabled: true,
206-
after: expectedAfter
235+
enabled: result.refresh.enabled,
236+
after: result.refresh.after
207237
}
208238
});
209239
resolve(mockData.refreshingService.configStorage.get({id: configId}));
@@ -216,14 +246,13 @@ describe.skip('zcap refresh', () => {
216246
let result;
217247
try {
218248
const {id: meterId} = await helpers.createMeter({
219-
profileId, zcapClient, serviceType: 'refreshing'
249+
controller: profileId, serviceType: 'refreshing'
220250
});
221251
const zcaps = await _createZcaps({
222252
profileId, zcapClient, serviceAgent
223253
});
224-
// make refresh zcap go to the wrong URL (wrong delegate ID) to trigger
225-
// a 403
226-
zcaps.refresh.invocationTarget += 'foo';
254+
// use wrong refresh zcap to trigger 403
255+
zcaps.refresh = wrongRefreshZcap;
227256
result = await helpers.createConfig({
228257
profileId, zcapClient, meterId, servicePath: '/refreshables',
229258
options: {
@@ -240,22 +269,21 @@ describe.skip('zcap refresh', () => {
240269
'controller', 'id', 'sequence', 'meterId', 'zcaps'
241270
]);
242271
result.sequence.should.equal(0);
243-
const {id: capabilityAgentId} = capabilityAgent;
244-
result.controller.should.equal(capabilityAgentId);
272+
result.controller.should.equal(profileId);
245273

246274
// wait for refresh promise to resolve
247275
const record = await configRefreshPromise;
248276
record.config.id.should.equal(configId);
249277
record.config.sequence.should.equal(1);
250-
record.meta.refresh.enabled.should.equal(true);
278+
record.meta.refresh.enabled.should.equal(false);
251279
record.meta.refresh.after.should.equal(expectedAfter);
252280
});
253281
it('should not refresh zcaps with "refresh=false" policy', async () => {
254282
// remove any existing policy
255283
await zcapClient.request({
256284
url: urls.policy,
257285
capability: rootZcap,
258-
method: 'post',
286+
method: 'delete',
259287
action: 'write'
260288
});
261289

@@ -305,7 +333,7 @@ describe.skip('zcap refresh', () => {
305333
let result;
306334
try {
307335
const {id: meterId} = await helpers.createMeter({
308-
profileId, zcapClient, serviceType: 'refreshing'
336+
controller: profileId, serviceType: 'refreshing'
309337
});
310338
const zcaps = await _createZcaps({
311339
profileId, zcapClient, serviceAgent
@@ -326,8 +354,7 @@ describe.skip('zcap refresh', () => {
326354
'controller', 'id', 'sequence', 'meterId', 'zcaps'
327355
]);
328356
result.sequence.should.equal(0);
329-
const {id: capabilityAgentId} = capabilityAgent;
330-
result.controller.should.equal(capabilityAgentId);
357+
result.controller.should.equal(profileId);
331358

332359
// wait for refresh promise to resolve
333360
const record = await configRefreshPromise;
@@ -341,7 +368,7 @@ describe.skip('zcap refresh', () => {
341368
await zcapClient.request({
342369
url: urls.policy,
343370
capability: rootZcap,
344-
method: 'post',
371+
method: 'delete',
345372
action: 'write'
346373
});
347374

@@ -412,7 +439,7 @@ describe.skip('zcap refresh', () => {
412439
let zcaps;
413440
try {
414441
const {id: meterId} = await helpers.createMeter({
415-
profileId, zcapClient, serviceType: 'refreshing'
442+
controller: profileId, serviceType: 'refreshing'
416443
});
417444
zcaps = await _createZcaps({
418445
profileId, zcapClient, serviceAgent
@@ -433,8 +460,7 @@ describe.skip('zcap refresh', () => {
433460
'controller', 'id', 'sequence', 'meterId', 'zcaps'
434461
]);
435462
result.sequence.should.equal(0);
436-
const {id: capabilityAgentId} = capabilityAgent;
437-
result.controller.should.equal(capabilityAgentId);
463+
result.controller.should.equal(profileId);
438464

439465
// wait for refresh promise to resolve
440466
const record = await configRefreshPromise;
@@ -453,7 +479,7 @@ describe.skip('zcap refresh', () => {
453479
await zcapClient.request({
454480
url: urls.policy,
455481
capability: rootZcap,
456-
method: 'post',
482+
method: 'delete',
457483
action: 'write'
458484
});
459485

@@ -523,7 +549,7 @@ describe.skip('zcap refresh', () => {
523549
let zcaps;
524550
try {
525551
const {id: meterId} = await helpers.createMeter({
526-
profileId, zcapClient, serviceType: 'refreshing'
552+
controller: profileId, serviceType: 'refreshing'
527553
});
528554
zcaps = await _createZcaps({
529555
profileId, zcapClient, serviceAgent
@@ -544,8 +570,7 @@ describe.skip('zcap refresh', () => {
544570
'controller', 'id', 'sequence', 'meterId', 'zcaps'
545571
]);
546572
result.sequence.should.equal(0);
547-
const {id: capabilityAgentId} = capabilityAgent;
548-
result.controller.should.equal(capabilityAgentId);
573+
result.controller.should.equal(profileId);
549574

550575
// wait for refresh promise to resolve
551576
const record = await configRefreshPromise;
@@ -583,11 +608,14 @@ async function _createZcaps({profileId, zcapClient, serviceAgent}) {
583608
});
584609

585610
// delegate refresh zcap to service agent
611+
const profilePath =
612+
`${baseUrl}/profiles/${encodeURIComponent(profileId)}`;
586613
const refreshUrl =
587-
`${baseUrl}/profiles/${encodeURIComponent(profileId)}` +
588-
'/zcaps/refresh';
614+
`${profilePath}/zcaps` +
615+
`/policies/${encodeURIComponent(serviceAgent.id)}/refresh`;
589616
zcaps.refresh = await helpers.delegate({
590617
controller: serviceAgent.id,
618+
capability: `urn:zcap:root:${encodeURIComponent(profilePath)}`,
591619
invocationTarget: refreshUrl,
592620
zcapClient
593621
});

test/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"@bedrock/profile-http": "file:..",
3636
"@bedrock/security-context": "^9.0.0",
3737
"@bedrock/server": "^5.1.0",
38-
"@bedrock/service-agent": "^10.3.0",
38+
"@bedrock/service-agent": "^10.3.1",
3939
"@bedrock/service-core": "^11.4.0",
4040
"@bedrock/ssm-mongodb": "^13.0.0",
4141
"@bedrock/test": "^8.2.0",

0 commit comments

Comments
 (0)