Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions envs/latest
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
COMPOSE_PROJECT_NAME=polymesh

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

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

POLYMESH_SUBQUERY_GRAPHQL_IMAGE=onfinality/subql-query:v2.9.0
POLYMESH_SUBQUERY_GRAPHQL_PORT=3000
POLYMESH_SUBQUERY_GRAPHQL_PORT=3000
45 changes: 35 additions & 10 deletions tests/src/__tests__/rest/assets/pre-approve.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,31 @@ import { RestClient } from '~/rest';
import { createAssetParams } from '~/rest/assets';
import { ProcessMode } from '~/rest/common';
import { Identity } from '~/rest/identities/interfaces';
import { fungibleInstructionParams, venueParams } from '~/rest/settlements';

const handles = ['issuer'];
const handles = ['issuer', 'receiver'];
let factory: TestFactory;

describe('Asset pre-approval', () => {
let restClient: RestClient;
let signer: string;
let issuerSigner: string;
let receiverSigner: string;
let issuer: Identity;
let receiver: Identity;
let assetParams: ReturnType<typeof createAssetParams>;
let assetId: string;

beforeAll(async () => {
factory = await TestFactory.create({ handles });
({ restClient } = factory);
issuer = factory.getSignerIdentity(handles[0]);
receiver = factory.getSignerIdentity(handles[1]);

signer = issuer.signer;
issuerSigner = issuer.signer;
receiverSigner = receiver.signer;

assetParams = createAssetParams({
options: { processMode: ProcessMode.Submit, signer },
options: { processMode: ProcessMode.Submit, signer: issuerSigner },
});
assetId = await restClient.assets.createAndGetAssetId(assetParams);
});
Expand All @@ -33,7 +38,7 @@ describe('Asset pre-approval', () => {
});

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

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

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

expect(result).toEqual({
did: issuer.did,
did: receiver.did,
asset: assetId,
isPreApproved: true,
});
});

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

expect(results).toEqual({
results: [
{
asset: assetId,
did: issuer.did,
did: receiver.did,
isPreApproved: true,
},
],
});
});

it('should transfer the asset without an approval', async () => {
const params = venueParams({
options: { processMode: ProcessMode.Submit, signer: issuerSigner },
});
const txData = await restClient.settlements.createVenue(params);

const { venue: venueId } = txData as { venue: string };

const instructionParams = fungibleInstructionParams(assetId, issuer.did, receiver.did, {
options: { processMode: ProcessMode.Submit, signer: issuerSigner },
});
await restClient.settlements.createInstruction(venueId, instructionParams);

const portfolioData = await restClient.portfolios.getPortfolio(receiver.did, '0');

const hasAsset = portfolioData.assetBalances.find((asset) => asset.asset === assetId);

expect(hasAsset).toBeDefined();
});

it('should remove asset pre-approval', async () => {
const txData = await restClient.assets.removePreApproval(assetId, {
options: { processMode: ProcessMode.Submit, signer },
options: { processMode: ProcessMode.Submit, signer: receiverSigner },
});

expect(txData).toMatchObject({
Expand Down
4 changes: 2 additions & 2 deletions tests/src/rest/portfolios/client.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { RestClient } from '~/rest/client';
import { TxBase } from '~/rest/common';
import { PostResult, ResultSet } from '~/rest/interfaces';
import { CreatedPortfolioResult } from '~/rest/portfolios/interfaces';
import { CreatedPortfolioResult, PortfolioInfoResult } from '~/rest/portfolios/interfaces';
import { moveAssetParams, portfolioParams, setCustodianParams } from '~/rest/portfolios/params';

export class Portfolios {
Expand Down Expand Up @@ -44,7 +44,7 @@ export class Portfolios {
return this.client.get(`/identities/${did}/custodied-portfolios`);
}

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

Expand Down
11 changes: 11 additions & 0 deletions tests/src/rest/portfolios/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,14 @@ export type CreatedPortfolioResult = RestSuccessResult & {
id: string;
};
};

export type PortfolioInfoResult = {
id: string;
name: string;
assetBalances: {
total: string;
free: string;
locked: string;
asset: string;
}[];
};