forked from openwallet-foundation/credo-ts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathledger.test.ts
More file actions
141 lines (121 loc) · 4.4 KB
/
ledger.test.ts
File metadata and controls
141 lines (121 loc) · 4.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
import { Agent, InboundTransporter, OutboundTransporter } from '..';
import path from 'path';
import indy from 'indy-sdk';
import { DidInfo } from '../wallet/Wallet';
import { DID_IDENTIFIER_REGEX, VERKEY_REGEX, isFullVerkey, isAbbreviatedVerkey } from '../utils/did';
import { InitConfig } from '../types';
const genesisPath = process.env.GENESIS_TXN_PATH
? path.resolve(process.env.GENESIS_TXN_PATH)
: path.join(__dirname, '../../../network/genesis/local-genesis.txn');
const faberConfig: InitConfig = {
label: 'Faber',
walletConfig: { id: 'faber' },
walletCredentials: { key: '00000000000000000000000000000Test01' },
publicDidSeed: process.env.TEST_AGENT_PUBLIC_DID_SEED,
genesisPath,
poolName: 'test-pool',
};
describe('ledger', () => {
let faberAgent: Agent;
let schemaId: SchemaId;
let faberAgentPublicDid: DidInfo | undefined;
beforeAll(async () => {
faberAgent = new Agent(faberConfig, new DummyInboundTransporter(), new DummyOutboundTransporter(), indy);
await faberAgent.init();
});
afterAll(async () => {
await faberAgent.closeAndDeleteWallet();
});
test(`initialization of agent's public DID`, async () => {
faberAgentPublicDid = faberAgent.getPublicDid();
console.log('faberAgentPublicDid', faberAgentPublicDid);
expect(faberAgentPublicDid).toEqual(
expect.objectContaining({
did: expect.stringMatching(DID_IDENTIFIER_REGEX),
verkey: expect.stringMatching(VERKEY_REGEX),
})
);
});
test('get public DID from ledger', async () => {
if (!faberAgentPublicDid) {
throw new Error('Agent does not have publid did.');
}
const result = await faberAgent.ledger.getPublicDid(faberAgentPublicDid.did);
let { verkey } = faberAgentPublicDid;
// Agent’s public did stored locally in Indy wallet and created from public did seed during
// its initialization always returns full verkey. Therefore we need to align that here.
if (isFullVerkey(verkey) && isAbbreviatedVerkey(result.verkey)) {
verkey = await indy.abbreviateVerkey(faberAgentPublicDid.did, verkey);
}
expect(result).toEqual(
expect.objectContaining({
did: faberAgentPublicDid.did,
verkey: verkey,
role: '101',
})
);
});
test('register schema on ledger', async () => {
if (!faberAgentPublicDid) {
throw new Error('Agent does not have publid did.');
}
const schemaName = `test-schema-${Date.now()}`;
const schemaTemplate = {
name: schemaName,
attributes: ['name', 'age'],
version: '1.0',
};
[schemaId] = await faberAgent.ledger.registerCredentialSchema(schemaTemplate);
const ledgerSchema = await faberAgent.ledger.getSchema(schemaId);
expect(schemaId).toBe(`${faberAgentPublicDid.did}:2:${schemaName}:1.0`);
expect(ledgerSchema).toEqual(
expect.objectContaining({
attrNames: expect.arrayContaining(['name', 'age']),
id: `${faberAgentPublicDid.did}:2:${schemaName}:1.0`,
name: schemaName,
seqNo: expect.any(Number),
ver: '1.0',
version: '1.0',
})
);
});
test('register definition on ledger', async () => {
if (!faberAgentPublicDid) {
throw new Error('Agent does not have publid did.');
}
const schema = await faberAgent.ledger.getSchema(schemaId);
const credentialDefinitionTemplate = {
schema: schema,
tag: 'TAG',
signatureType: 'CL',
config: { support_revocation: true },
};
const [credDefId] = await faberAgent.ledger.registerCredentialDefinition(credentialDefinitionTemplate);
const ledgerCredDef = await faberAgent.ledger.getCredentialDefinition(credDefId);
const credDefIdRegExp = new RegExp(`${faberAgentPublicDid.did}:3:CL:[0-9]+:TAG`);
expect(credDefId).toEqual(expect.stringMatching(credDefIdRegExp));
expect(ledgerCredDef).toEqual(
expect.objectContaining({
id: expect.stringMatching(credDefIdRegExp),
schemaId: expect.any(String),
type: 'CL',
tag: 'TAG',
ver: '1.0',
value: expect.objectContaining({
primary: expect.anything(),
revocation: expect.anything(),
}),
})
);
});
});
class DummyInboundTransporter implements InboundTransporter {
public start() {
console.log('Starting agent...');
}
}
class DummyOutboundTransporter implements OutboundTransporter {
public async sendMessage() {
console.log('Sending message...');
}
}