|
1 | | -import { NotImplementedHttpError, RDF, XSD } from '@solid/community-server'; |
| 1 | +import 'jest-rdf'; |
| 2 | +import { RDF, XSD } from '@solid/community-server'; |
2 | 3 | import { DataFactory as DF, Parser, Store } from 'n3'; |
3 | | -import { ODRLEvaluator } from 'odrl-evaluator'; |
| 4 | +import { ODRL, ODRLEvaluator } from 'odrl-evaluator'; |
4 | 5 | import { Mocked } from 'vitest'; |
| 6 | +import { CLIENTID } from '../../../../src/credentials/Claims'; |
5 | 7 | import { OdrlAuthorizer } from '../../../../src/policies/authorizers/OdrlAuthorizer'; |
6 | 8 | import { basicPolicy } from '../../../../src/ucp/policy/ODRL'; |
7 | 9 | import { UCRulesStorage } from '../../../../src/ucp/storage/UCRulesStorage'; |
@@ -34,7 +36,7 @@ describe('OdrlAuthorizer', (): void => { |
34 | 36 | evaluate.mockResolvedValue([]); |
35 | 37 |
|
36 | 38 | vi.mocked(basicPolicy).mockReturnValue({ |
37 | | - ruleIRIs:[], |
| 39 | + ruleIRIs: [ 'urn:req-rule' ], |
38 | 40 | policyIRI: 'req', |
39 | 41 | representation: new Store(requestQuads), |
40 | 42 | }); |
@@ -97,6 +99,30 @@ describe('OdrlAuthorizer', (): void => { |
97 | 99 | ); |
98 | 100 | }); |
99 | 101 |
|
| 102 | + it('adds client claim context using odrl:deliveryChannel', async(): Promise<void> => { |
| 103 | + const claims = { [CLIENTID]: 'client-a' }; |
| 104 | + const query: Permission[] = [{ resource_id: 'rid', resource_scopes: [ 'urn:example:css:modes:read' ] }]; |
| 105 | + |
| 106 | + await expect(authorizer.permissions(claims, query)).resolves.toEqual([{ resource_id: 'rid', resource_scopes: [] }]); |
| 107 | + |
| 108 | + expect(evaluate).toHaveBeenCalledTimes(1); |
| 109 | + const generatedRequest = evaluate.mock.calls[0][1]; |
| 110 | + const clientConstraintQuad = generatedRequest.find((quad) => |
| 111 | + quad.predicate.equals(ODRL.terms.leftOperand) && quad.object.equals(ODRL.terms.deliveryChannel)); |
| 112 | + |
| 113 | + expect(clientConstraintQuad).toBeDefined(); |
| 114 | + const clientConstraintSubject = clientConstraintQuad!.subject; |
| 115 | + const clientConstraintQuads = generatedRequest.filter((quad) => |
| 116 | + quad.subject.equals(clientConstraintSubject)); |
| 117 | + |
| 118 | + expect(clientConstraintQuads).toEqualRdfQuadArray([ |
| 119 | + DF.quad(clientConstraintSubject, RDF.terms.type, ODRL.terms.Constraint), |
| 120 | + DF.quad(clientConstraintSubject, ODRL.terms.leftOperand, ODRL.terms.deliveryChannel), |
| 121 | + DF.quad(clientConstraintSubject, ODRL.terms.operator, ODRL.terms.eq), |
| 122 | + DF.quad(clientConstraintSubject, ODRL.terms.rightOperand, DF.namedNode('client-a')), |
| 123 | + ]); |
| 124 | + }); |
| 125 | + |
100 | 126 | it('extracts the allowed scopes from the resulting report.', async(): Promise<void> => { |
101 | 127 | const query: Permission[] = [{ resource_id: 'rid', resource_scopes: [ 'urn:example:css:modes:read' ] }]; |
102 | 128 |
|
|
0 commit comments