@@ -21,7 +21,7 @@ import {ZcapClient} from '@digitalbazaar/ezcap';
2121let accounts ;
2222let 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 } ) ;
0 commit comments