Skip to content

Commit

Permalink
perf(procedures): use procedure storage to avoid repeated calls
Browse files Browse the repository at this point in the history
  • Loading branch information
monitz87 committed Dec 23, 2020
1 parent 7a8ba49 commit 89b7549
Show file tree
Hide file tree
Showing 12 changed files with 536 additions and 213 deletions.
73 changes: 57 additions & 16 deletions src/api/procedures/__tests__/addInstruction.ts
Expand Up @@ -10,6 +10,8 @@ import {
getAuthorization,
Params,
prepareAddInstruction,
prepareStorage,
Storage,
} from '~/api/procedures/addInstruction';
import {
Context,
Expand Down Expand Up @@ -106,9 +108,11 @@ describe('addInstruction procedure', () => {
toDid = 'toDid';
fromPortfolio = entityMockUtils.getNumberedPortfolioInstance({
did: fromDid,
id: new BigNumber(1),
});
toPortfolio = entityMockUtils.getNumberedPortfolioInstance({
did: toDid,
id: new BigNumber(2),
});
token = 'SOME_TOKEN';
validFrom = new Date(new Date().getTime() + 24 * 60 * 60 * 1000);
Expand Down Expand Up @@ -184,6 +188,8 @@ describe('addInstruction procedure', () => {

portfolioLikeToPortfolioIdStub.withArgs(from).returns({ did: fromDid });
portfolioLikeToPortfolioIdStub.withArgs(to).returns({ did: toDid });
portfolioLikeToPortfolioIdStub.withArgs(fromPortfolio).returns({ did: fromDid });
portfolioLikeToPortfolioIdStub.withArgs(toPortfolio).returns({ did: toDid });
portfolioLikeToPortfolioStub.withArgs(from, mockContext).returns(fromPortfolio);
portfolioLikeToPortfolioStub.withArgs(to, mockContext).returns(toPortfolio);
portfolioIdToMeshPortfolioIdStub.withArgs({ did: fromDid }, mockContext).returns(rawFrom);
Expand Down Expand Up @@ -216,7 +222,9 @@ describe('addInstruction procedure', () => {
});

test('should throw an error if the legs array is empty', async () => {
const proc = procedureMockUtils.getInstance<Params, Instruction>(mockContext);
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfoliosToAffirm: [],
});

let error;

Expand All @@ -231,7 +239,9 @@ describe('addInstruction procedure', () => {

test('should throw an error if the end block is in the past', async () => {
dsMockUtils.configureMocks({ contextOptions: { latestBlock: new BigNumber(1000) } });
const proc = procedureMockUtils.getInstance<Params, Instruction>(mockContext);
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfoliosToAffirm: [],
});

let error;

Expand All @@ -247,7 +257,9 @@ describe('addInstruction procedure', () => {
test('should add an add and authorize instruction transaction to the queue', async () => {
dsMockUtils.configureMocks({ contextOptions: { did: fromDid } });
getCustodianStub.onCall(1).returns({ did: fromDid });
const proc = procedureMockUtils.getInstance<Params, Instruction>(mockContext);
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfoliosToAffirm: [fromPortfolio, toPortfolio],
});

const result = await prepareAddInstruction.call(proc, args);

Expand All @@ -269,7 +281,9 @@ describe('addInstruction procedure', () => {
test('should add an add instruction transaction to the queue', async () => {
dsMockUtils.configureMocks({ contextOptions: { did: fromDid } });
getCustodianStub.onCall(0).returns({ did: toDid });
const proc = procedureMockUtils.getInstance<Params, Instruction>(mockContext);
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfoliosToAffirm: [],
});

const result = await prepareAddInstruction.call(proc, {
...args,
Expand All @@ -296,13 +310,10 @@ describe('addInstruction procedure', () => {

describe('getAuthorization', () => {
test('should return the appropriate roles and permissions', async () => {
const proc = procedureMockUtils.getInstance<Params, Instruction>(mockContext);
const boundFunc = getAuthorization.bind(proc);
fromPortfolio = entityMockUtils.getNumberedPortfolioInstance({ isCustodiedBy: true });
toPortfolio = entityMockUtils.getNumberedPortfolioInstance({ isCustodiedBy: true });

portfolioLikeToPortfolioStub.withArgs(fromPortfolio).returns(fromPortfolio);
portfolioLikeToPortfolioStub.withArgs(toPortfolio).returns(toPortfolio);
let proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfoliosToAffirm: [fromPortfolio, toPortfolio],
});
let boundFunc = getAuthorization.bind(proc);

let result = await boundFunc({
venueId,
Expand All @@ -318,11 +329,10 @@ describe('addInstruction procedure', () => {
},
});

fromPortfolio = entityMockUtils.getNumberedPortfolioInstance({ isCustodiedBy: false });
toPortfolio = entityMockUtils.getNumberedPortfolioInstance({ isCustodiedBy: false });

portfolioLikeToPortfolioStub.withArgs(fromPortfolio).returns(fromPortfolio);
portfolioLikeToPortfolioStub.withArgs(toPortfolio).returns(toPortfolio);
proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext, {
portfoliosToAffirm: [],
});
boundFunc = getAuthorization.bind(proc);

result = await boundFunc({
venueId,
Expand All @@ -339,6 +349,37 @@ describe('addInstruction procedure', () => {
});
});
});

describe('prepareStorage', () => {
test('should return the list of portfolios that will be affirmed', async () => {
const proc = procedureMockUtils.getInstance<Params, Instruction, Storage>(mockContext);
const boundFunc = prepareStorage.bind(proc);

fromPortfolio = entityMockUtils.getNumberedPortfolioInstance({ isCustodiedBy: true });
toPortfolio = entityMockUtils.getNumberedPortfolioInstance({ isCustodiedBy: true });

portfolioLikeToPortfolioStub.withArgs(from, mockContext).returns(fromPortfolio);
portfolioLikeToPortfolioStub.withArgs(to, mockContext).returns(toPortfolio);

let result = await boundFunc(args);

expect(result).toEqual({
portfoliosToAffirm: [fromPortfolio, toPortfolio],
});

fromPortfolio = entityMockUtils.getNumberedPortfolioInstance({ isCustodiedBy: false });
toPortfolio = entityMockUtils.getNumberedPortfolioInstance({ isCustodiedBy: false });

portfolioLikeToPortfolioStub.withArgs(from, mockContext).returns(fromPortfolio);
portfolioLikeToPortfolioStub.withArgs(to, mockContext).returns(toPortfolio);

result = await boundFunc(args);

expect(result).toEqual({
portfoliosToAffirm: [],
});
});
});
});

describe('createAddInstructionResolver', () => {
Expand Down

0 comments on commit 89b7549

Please sign in to comment.