Skip to content

Commit 42b5e0e

Browse files
committed
wip: adding parsing tests for the network claims
1 parent 171d473 commit 42b5e0e

File tree

5 files changed

+193
-2
lines changed

5 files changed

+193
-2
lines changed

src/claims/payloads/claimNetworkAccess.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import * as validationErrors from '../../validation/errors.js';
99
import * as utils from '../../utils/index.js';
1010

1111
/**
12-
* Asserts that a node is apart of a network
12+
* Asserts that a node is a part of a network
1313
*/
1414
interface ClaimNetworkAccess extends Claim {
1515
typ: 'ClaimNetworkAccess';

src/claims/payloads/claimNetworkAuthority.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import * as validationErrors from '../../validation/errors.js';
77
import * as utils from '../../utils/index.js';
88

99
/**
10-
* Asserts that a node is apart of a network
10+
* Asserts that a node has the authority of a network.
11+
* The issuing nodeId has to be the root keypair for the whole network.
1112
*/
13+
1214
interface ClaimNetworkAuthority extends Claim {
1315
typ: 'ClaimNetworkAuthority';
1416
iss: NodeIdEncoded;
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { test, fc } from '@fast-check/jest';
2+
import * as testsClaimsPayloadsUtils from './utils.js';
3+
import * as claimsPayloadsClaimNetworkAccess from '#claims/payloads/claimNetworkAccess.js';
4+
5+
describe('claims/payloads/claimNetworkAccess', () => {
6+
test.prop([
7+
testsClaimsPayloadsUtils.claimNetworkAccessEncodedArb(),
8+
fc.noShrink(fc.string()),
9+
])(
10+
'parse claim network access',
11+
(
12+
claimNetworkAccessEncodedCorrect,
13+
signedClaimNetworkAccessEncodedIncorrect,
14+
) => {
15+
expect(() => {
16+
claimsPayloadsClaimNetworkAccess.parseClaimNetworkAccess(
17+
claimNetworkAccessEncodedCorrect,
18+
);
19+
}).not.toThrow();
20+
expect(() => {
21+
claimsPayloadsClaimNetworkAccess.parseClaimNetworkAccess(
22+
signedClaimNetworkAccessEncodedIncorrect,
23+
);
24+
});
25+
},
26+
);
27+
test.prop([
28+
testsClaimsPayloadsUtils.signedClaimEncodedArb(
29+
testsClaimsPayloadsUtils.claimNetworkAccessArb(),
30+
),
31+
fc.record(
32+
{
33+
payload: fc.string(),
34+
signatures: fc.array(fc.string()),
35+
},
36+
{ noNullPrototype: true },
37+
),
38+
])(
39+
'parse signed claim network access',
40+
(
41+
signedClaimLinkIdentityEncodedCorrect,
42+
signedClaimLinkIdentityEncodedIncorrect,
43+
) => {
44+
expect(() => {
45+
claimsPayloadsClaimNetworkAccess.parseSignedClaimNetworkAccess(
46+
signedClaimLinkIdentityEncodedCorrect,
47+
);
48+
}).not.toThrow();
49+
expect(() => {
50+
claimsPayloadsClaimNetworkAccess.parseSignedClaimNetworkAccess(
51+
signedClaimLinkIdentityEncodedIncorrect,
52+
);
53+
}).toThrow();
54+
},
55+
);
56+
});
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import { test, fc } from '@fast-check/jest';
2+
import * as testsClaimsPayloadsUtils from './utils.js';
3+
import * as claimsPayloadsClaimNetworkAuthority from '#claims/payloads/claimNetworkAuthority.js';
4+
5+
describe('claims/payloads/claimNetworkAccess', () => {
6+
test.prop([
7+
testsClaimsPayloadsUtils.claimNetworkAuthorityEncodedArb(),
8+
fc.noShrink(fc.string()),
9+
])(
10+
'parse claim network access',
11+
(
12+
claimNetworkAccessEncodedCorrect,
13+
signedClaimNetworkAccessEncodedIncorrect,
14+
) => {
15+
expect(() => {
16+
claimsPayloadsClaimNetworkAuthority.parseClaimNetworkAuthority(
17+
claimNetworkAccessEncodedCorrect,
18+
);
19+
}).not.toThrow();
20+
expect(() => {
21+
claimsPayloadsClaimNetworkAuthority.parseClaimNetworkAuthority(
22+
signedClaimNetworkAccessEncodedIncorrect,
23+
);
24+
});
25+
},
26+
);
27+
test.prop([
28+
testsClaimsPayloadsUtils.signedClaimEncodedArb(
29+
testsClaimsPayloadsUtils.claimNetworkAuthorityArb(),
30+
),
31+
fc.record(
32+
{
33+
payload: fc.string(),
34+
signatures: fc.array(fc.string()),
35+
},
36+
{ noNullPrototype: true },
37+
),
38+
])(
39+
'parse signed claim network access',
40+
(
41+
signedClaimLinkIdentityEncodedCorrect,
42+
signedClaimLinkIdentityEncodedIncorrect,
43+
) => {
44+
expect(() => {
45+
claimsPayloadsClaimNetworkAuthority.parseSignedClaimNetworkAuthority(
46+
signedClaimLinkIdentityEncodedCorrect,
47+
);
48+
}).not.toThrow();
49+
expect(() => {
50+
claimsPayloadsClaimNetworkAuthority.parseSignedClaimNetworkAuthority(
51+
signedClaimLinkIdentityEncodedIncorrect,
52+
);
53+
}).toThrow();
54+
},
55+
);
56+
});

tests/claims/payloads/utils.ts

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,17 @@ import type { Claim, SignedClaim } from '#claims/types.js';
22
import type {
33
ClaimLinkNode,
44
ClaimLinkIdentity,
5+
ClaimNetworkAccess,
56
} from '#claims/payloads/index.js';
7+
import type { SignedTokenEncoded } from '#tokens/types.js';
8+
import type { ClaimNetworkAuthority } from '#claims/payloads/claimNetworkAuthority.js';
9+
import type { NodeIdEncoded } from '#ids/index.js';
610
import fc from 'fast-check';
711
import * as testsClaimsUtils from '../utils.js';
812
import * as testsTokensUtils from '../../tokens/utils.js';
913
import * as testsIdsUtils from '../../ids/utils.js';
1014
import * as claimsUtils from '#claims/utils.js';
15+
import { NodeId } from '#ids/index.js';
1116

1217
const claimLinkIdentityArb = testsClaimsUtils.claimArb.chain((claim) => {
1318
return fc
@@ -66,11 +71,83 @@ const signedClaimArb = <P extends Claim>(
6671
const signedClaimEncodedArb = (payloadArb: fc.Arbitrary<Claim>) =>
6772
signedClaimArb(payloadArb).map(claimsUtils.generateSignedClaim);
6873

74+
const claimNetworkAuthorityArb = (
75+
iss: fc.Arbitrary<NodeIdEncoded> = testsIdsUtils.nodeIdEncodedArb,
76+
sub: fc.Arbitrary<NodeIdEncoded> = testsIdsUtils.nodeIdEncodedArb,
77+
) =>
78+
fc.noShrink(
79+
testsClaimsUtils.claimArb.chain((claim) => {
80+
return fc
81+
.record(
82+
{
83+
iss: testsIdsUtils.nodeIdEncodedArb,
84+
sub: testsIdsUtils.nodeIdEncodedArb,
85+
},
86+
{ noNullPrototype: true },
87+
)
88+
.chain((value) => {
89+
return fc.constant({
90+
typ: 'ClaimNetworkAuthority',
91+
...claim,
92+
...value,
93+
});
94+
});
95+
}) as fc.Arbitrary<ClaimNetworkAuthority>,
96+
);
97+
98+
const claimNetworkAuthorityEncodedArb = (
99+
iss: fc.Arbitrary<NodeIdEncoded> = testsIdsUtils.nodeIdEncodedArb,
100+
sub: fc.Arbitrary<NodeIdEncoded> = testsIdsUtils.nodeIdEncodedArb,
101+
) => claimNetworkAuthorityArb(iss, sub).map(claimsUtils.generateClaim);
102+
103+
const claimNetworkAccessArb = (
104+
iss: fc.Arbitrary<NodeIdEncoded> = testsIdsUtils.nodeIdEncodedArb,
105+
sub: fc.Arbitrary<NodeIdEncoded> = testsIdsUtils.nodeIdEncodedArb,
106+
network: fc.Arbitrary<string> = fc.string(),
107+
signedClaimNetworkAuthorityEncoded: fc.Arbitrary<SignedTokenEncoded> = signedClaimEncodedArb(
108+
claimNetworkAuthorityArb(
109+
testsIdsUtils.nodeIdEncodedArb,
110+
testsIdsUtils.nodeIdEncodedArb,
111+
),
112+
),
113+
) =>
114+
fc.noShrink(
115+
testsClaimsUtils.claimArb.chain((claim) => {
116+
return fc
117+
.record(
118+
{
119+
iss,
120+
sub,
121+
network,
122+
signedClaimNetworkAuthorityEncoded,
123+
},
124+
{ noNullPrototype: true },
125+
)
126+
.chain((value) => {
127+
return fc.constant({
128+
typ: 'ClaimNetworkAccess',
129+
...claim,
130+
...value,
131+
});
132+
});
133+
}) as fc.Arbitrary<ClaimNetworkAccess>,
134+
);
135+
136+
const claimNetworkAccessEncodedArb = (
137+
iss: fc.Arbitrary<NodeIdEncoded> = testsIdsUtils.nodeIdEncodedArb,
138+
sub: fc.Arbitrary<NodeIdEncoded> = testsIdsUtils.nodeIdEncodedArb,
139+
network: fc.Arbitrary<string> = fc.string(),
140+
) => claimNetworkAccessArb(iss, sub, network).map(claimsUtils.generateClaim);
141+
69142
export {
70143
claimLinkIdentityArb,
71144
claimLinkIdentityEncodedArb,
72145
claimLinkNodeArb,
73146
claimLinkNodeEncodedArb,
74147
signedClaimArb,
75148
signedClaimEncodedArb,
149+
claimNetworkAccessArb,
150+
claimNetworkAccessEncodedArb,
151+
claimNetworkAuthorityArb,
152+
claimNetworkAuthorityEncodedArb,
76153
};

0 commit comments

Comments
 (0)