Skip to content

Commit 87afffb

Browse files
committed
test: 💍 add test for pre-approval settlement
test a settlement with a pre-approved asset
1 parent c9e7230 commit 87afffb

File tree

4 files changed

+51
-15
lines changed

4 files changed

+51
-15
lines changed

envs/latest

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
COMPOSE_PROJECT_NAME=polymesh
22

3-
POLYMESH_CHAIN_IMAGE=polymeshassociation/polymesh:7.3.0-ci-runtime-docker-image-debian
3+
POLYMESH_CHAIN_IMAGE=polymeshassociation/polymesh:7.3.0-mainnet-debian
44
POLYMESH_CHAIN_WS_PORT=9944
55
POLYMESH_CHAIN_RPC_PORT=9933
66
POLYMESH_CHAIN_P2P_PORT=30333
@@ -9,7 +9,7 @@ POLYMESH_REST_API_IMAGE=polymeshassociation/polymesh-rest-api:v7.2.0-alpha.4
99
POLYMESH_REST_API_LOCAL_SM_PORT=3004
1010
POLYMESH_REST_API_VAULT_SM_PORT=3005
1111

12-
POLYMESH_SUBQUERY_IMAGE=polymeshassociation/polymesh-subquery:v19.2.0
12+
POLYMESH_SUBQUERY_IMAGE=polymeshassociation/polymesh-subquery:v19.3.0
1313

1414
POLYMESH_SUBQUERY_GRAPHQL_IMAGE=onfinality/subql-query:v2.9.0
15-
POLYMESH_SUBQUERY_GRAPHQL_PORT=3000
15+
POLYMESH_SUBQUERY_GRAPHQL_PORT=3000

tests/src/__tests__/rest/assets/pre-approve.ts

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,26 +4,31 @@ import { RestClient } from '~/rest';
44
import { createAssetParams } from '~/rest/assets';
55
import { ProcessMode } from '~/rest/common';
66
import { Identity } from '~/rest/identities/interfaces';
7+
import { fungibleInstructionParams, venueParams } from '~/rest/settlements';
78

8-
const handles = ['issuer'];
9+
const handles = ['issuer', 'receiver'];
910
let factory: TestFactory;
1011

1112
describe('Asset pre-approval', () => {
1213
let restClient: RestClient;
13-
let signer: string;
14+
let issuerSigner: string;
15+
let receiverSigner: string;
1416
let issuer: Identity;
17+
let receiver: Identity;
1518
let assetParams: ReturnType<typeof createAssetParams>;
1619
let assetId: string;
1720

1821
beforeAll(async () => {
1922
factory = await TestFactory.create({ handles });
2023
({ restClient } = factory);
2124
issuer = factory.getSignerIdentity(handles[0]);
25+
receiver = factory.getSignerIdentity(handles[1]);
2226

23-
signer = issuer.signer;
27+
issuerSigner = issuer.signer;
28+
receiverSigner = receiver.signer;
2429

2530
assetParams = createAssetParams({
26-
options: { processMode: ProcessMode.Submit, signer },
31+
options: { processMode: ProcessMode.Submit, signer: issuerSigner },
2732
});
2833
assetId = await restClient.assets.createAndGetAssetId(assetParams);
2934
});
@@ -33,7 +38,7 @@ describe('Asset pre-approval', () => {
3338
});
3439

3540
it('should set asset pre-approval', async () => {
36-
const params = { options: { processMode: ProcessMode.Submit, signer } };
41+
const params = { options: { processMode: ProcessMode.Submit, signer: receiverSigner } };
3742
const txData = await restClient.assets.preApprove(assetId, params);
3843

3944
expect(txData).toMatchObject({
@@ -48,32 +53,52 @@ describe('Asset pre-approval', () => {
4853
});
4954

5055
it('should return the asset as pre-approved', async () => {
51-
const result = await restClient.assets.getIsPreApproved(assetId, issuer.did);
56+
const result = await restClient.assets.getIsPreApproved(assetId, receiver.did);
5257

5358
expect(result).toEqual({
54-
did: issuer.did,
59+
did: receiver.did,
5560
asset: assetId,
5661
isPreApproved: true,
5762
});
5863
});
5964

6065
it('should return a page of pre-approved assets', async () => {
61-
const results = await restClient.assets.getPreApprovals(issuer.did);
66+
const results = await restClient.assets.getPreApprovals(receiver.did);
6267

6368
expect(results).toEqual({
6469
results: [
6570
{
6671
asset: assetId,
67-
did: issuer.did,
72+
did: receiver.did,
6873
isPreApproved: true,
6974
},
7075
],
7176
});
7277
});
7378

79+
it('should create a Venue to trade the Asset', async () => {
80+
const params = venueParams({
81+
options: { processMode: ProcessMode.Submit, signer: issuerSigner },
82+
});
83+
const txData = await restClient.settlements.createVenue(params);
84+
85+
const { venue: venueId } = txData as { venue: string };
86+
87+
const instructionParams = fungibleInstructionParams(assetId, issuer.did, receiver.did, {
88+
options: { processMode: ProcessMode.Submit, signer: issuerSigner },
89+
});
90+
await restClient.settlements.createInstruction(venueId, instructionParams);
91+
92+
const portfolioData = await restClient.portfolios.getPortfolio(receiver.did, '0');
93+
94+
const hasAsset = portfolioData.assetBalances.find((asset) => asset.asset === assetId);
95+
96+
expect(hasAsset).toBeDefined();
97+
});
98+
7499
it('should remove asset pre-approval', async () => {
75100
const txData = await restClient.assets.removePreApproval(assetId, {
76-
options: { processMode: ProcessMode.Submit, signer },
101+
options: { processMode: ProcessMode.Submit, signer: receiverSigner },
77102
});
78103

79104
expect(txData).toMatchObject({

tests/src/rest/portfolios/client.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { RestClient } from '~/rest/client';
22
import { TxBase } from '~/rest/common';
33
import { PostResult, ResultSet } from '~/rest/interfaces';
4-
import { CreatedPortfolioResult } from '~/rest/portfolios/interfaces';
4+
import { CreatedPortfolioResult, PortfolioInfoResult } from '~/rest/portfolios/interfaces';
55
import { moveAssetParams, portfolioParams, setCustodianParams } from '~/rest/portfolios/params';
66

77
export class Portfolios {
@@ -44,7 +44,7 @@ export class Portfolios {
4444
return this.client.get(`/identities/${did}/custodied-portfolios`);
4545
}
4646

47-
public async getPortfolio(did: string, portfolioId: string): Promise<Record<string, unknown>> {
47+
public async getPortfolio(did: string, portfolioId: string): Promise<PortfolioInfoResult> {
4848
return this.client.get(`/identities/${did}/portfolios/${portfolioId}`);
4949
}
5050

tests/src/rest/portfolios/interfaces.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,14 @@ export type CreatedPortfolioResult = RestSuccessResult & {
66
id: string;
77
};
88
};
9+
10+
export type PortfolioInfoResult = {
11+
id: string;
12+
name: string;
13+
assetBalances: {
14+
total: string;
15+
free: string;
16+
locked: string;
17+
asset: string;
18+
}[];
19+
};

0 commit comments

Comments
 (0)