Skip to content

Commit

Permalink
fix: 馃悰 execute manual instruction type
Browse files Browse the repository at this point in the history
users had to specify instruction id to execute manually, now it is
inferred from the instruction entity
  • Loading branch information
polymath-eric committed Mar 1, 2024
1 parent 59147de commit 5158e99
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 60 deletions.
2 changes: 1 addition & 1 deletion src/api/entities/Instruction/__tests__/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -909,7 +909,7 @@ describe('Instruction class', () => {
)
.mockResolvedValue(expectedTransaction);

const tx = await instruction.executeManually({ id, skipAffirmationCheck: false });
const tx = await instruction.executeManually({ skipAffirmationCheck: false });

expect(tx).toBe(expectedTransaction);
});
Expand Down
64 changes: 17 additions & 47 deletions src/api/procedures/__tests__/executeManualInstruction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { when } from 'jest-when';

import {
getAuthorization,
Params,
prepareExecuteManualInstruction,
prepareStorage,
Storage,
Expand All @@ -14,7 +15,6 @@ import { Context, DefaultPortfolio, Instruction, Venue } from '~/internal';
import { dsMockUtils, entityMockUtils, procedureMockUtils } from '~/testUtils/mocks';
import { Mocked } from '~/testUtils/types';
import {
ExecuteManualInstructionParams,
InstructionAffirmationOperation,
InstructionDetails,
InstructionStatus,
Expand Down Expand Up @@ -134,11 +134,7 @@ describe('executeManualInstruction procedure', () => {
});

it('should throw an error if the signing identity is not the custodian of any of the involved portfolios', () => {
const proc = procedureMockUtils.getInstance<
ExecuteManualInstructionParams,
Instruction,
Storage
>(mockContext, {
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfolios: [],
instructionDetails,
signerDid: 'someOtherDid',
Expand All @@ -157,11 +153,7 @@ describe('executeManualInstruction procedure', () => {
returnValue: dsMockUtils.createMockU64(new BigNumber(1)),
});

const proc = procedureMockUtils.getInstance<
ExecuteManualInstructionParams,
Instruction,
Storage
>(mockContext, {
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfolios: [portfolio, portfolio],
instructionDetails,
signerDid: did,
Expand All @@ -180,11 +172,7 @@ describe('executeManualInstruction procedure', () => {
returnValue: dsMockUtils.createMockU64(new BigNumber(1)),
});

const proc = procedureMockUtils.getInstance<
ExecuteManualInstructionParams,
Instruction,
Storage
>(mockContext, {
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfolios: [portfolio, portfolio],
instructionDetails,
signerDid: did,
Expand All @@ -205,14 +193,11 @@ describe('executeManualInstruction procedure', () => {
returnValue: dsMockUtils.createMockU64(new BigNumber(0)),
});

let proc = procedureMockUtils.getInstance<ExecuteManualInstructionParams, Instruction, Storage>(
mockContext,
{
portfolios: [portfolio, portfolio],
instructionDetails,
signerDid: did,
}
);
let proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfolios: [portfolio, portfolio],
instructionDetails,
signerDid: did,
});

let result = await prepareExecuteManualInstruction.call(proc, {
id,
Expand All @@ -233,14 +218,11 @@ describe('executeManualInstruction procedure', () => {
resolver: expect.objectContaining({ id }),
});

proc = procedureMockUtils.getInstance<ExecuteManualInstructionParams, Instruction, Storage>(
mockContext,
{
portfolios: [],
instructionDetails,
signerDid: did,
}
);
proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfolios: [],
instructionDetails,
signerDid: did,
});

result = await prepareExecuteManualInstruction.call(proc, {
id,
Expand All @@ -267,11 +249,7 @@ describe('executeManualInstruction procedure', () => {
const from = entityMockUtils.getNumberedPortfolioInstance();
const to = entityMockUtils.getDefaultPortfolioInstance();

const proc = procedureMockUtils.getInstance<
ExecuteManualInstructionParams,
Instruction,
Storage
>(mockContext, {
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfolios: [from, to],
instructionDetails,
signerDid: did,
Expand Down Expand Up @@ -300,11 +278,7 @@ describe('executeManualInstruction procedure', () => {
const asset = entityMockUtils.getFungibleAssetInstance({ ticker: 'TICKER' });

it('should return the custodied portfolios associated in the instruction legs for the signing identity', async () => {
const proc = procedureMockUtils.getInstance<
ExecuteManualInstructionParams,
Instruction,
Storage
>(mockContext);
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext);

const boundFunc = prepareStorage.bind(proc);
entityMockUtils.configureMocks({
Expand All @@ -329,11 +303,7 @@ describe('executeManualInstruction procedure', () => {
});

it('should return no portfolios when signing identity is not part of any legs', async () => {
const proc = procedureMockUtils.getInstance<
ExecuteManualInstructionParams,
Instruction,
Storage
>(mockContext);
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext);

const boundFunc = prepareStorage.bind(proc);
from = entityMockUtils.getDefaultPortfolioInstance({ did: fromDid, isCustodiedBy: false });
Expand Down
25 changes: 15 additions & 10 deletions src/api/procedures/executeManualInstruction.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { PolymeshPrimitivesIdentityIdPortfolioId } from '@polkadot/types/lookup';
import BigNumber from 'bignumber.js';
import P from 'bluebird';

import { assertInstructionValidForManualExecution } from '~/api/procedures/utils';
Expand Down Expand Up @@ -26,12 +27,19 @@ export interface Storage {
signerDid: string;
}

/**
* @hidden
*/
export type Params = ExecuteManualInstructionParams & {
id: BigNumber;
};

/**
* @hidden
*/
export async function prepareExecuteManualInstruction(
this: Procedure<ExecuteManualInstructionParams, Instruction, Storage>,
args: ExecuteManualInstructionParams
this: Procedure<Params, Instruction, Storage>,
args: Params
): Promise<
TransactionSpec<Instruction, ExtrinsicParams<'settlementTx', 'executeManualInstruction'>>
> {
Expand Down Expand Up @@ -105,7 +113,7 @@ export async function prepareExecuteManualInstruction(
* @hidden
*/
export async function getAuthorization(
this: Procedure<ExecuteManualInstructionParams, Instruction, Storage>
this: Procedure<Params, Instruction, Storage>
): Promise<ProcedureAuthorization> {
const {
storage: { portfolios },
Expand All @@ -124,8 +132,8 @@ export async function getAuthorization(
* @hidden
*/
export async function prepareStorage(
this: Procedure<ExecuteManualInstructionParams, Instruction, Storage>,
{ id }: ExecuteManualInstructionParams
this: Procedure<Params, Instruction, Storage>,
{ id }: Params
): Promise<Storage> {
const { context } = this;

Expand Down Expand Up @@ -170,8 +178,5 @@ export async function prepareStorage(
/**
* @hidden
*/
export const executeManualInstruction = (): Procedure<
ExecuteManualInstructionParams,
Instruction,
Storage
> => new Procedure(prepareExecuteManualInstruction, getAuthorization, prepareStorage);
export const executeManualInstruction = (): Procedure<Params, Instruction, Storage> =>
new Procedure(prepareExecuteManualInstruction, getAuthorization, prepareStorage);
4 changes: 2 additions & 2 deletions src/api/procedures/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -614,12 +614,12 @@ export type ModifyInstructionAffirmationParams = InstructionIdParams &
}
);

export type ExecuteManualInstructionParams = InstructionIdParams & {
export interface ExecuteManualInstructionParams {
/**
* (optional) Set to `true` to skip affirmation check, useful for batch transactions
*/
skipAffirmationCheck?: boolean;
};
}

export interface CreateVenueParams {
description: string;
Expand Down

0 comments on commit 5158e99

Please sign in to comment.