Skip to content

Commit

Permalink
feat: getPendingInstructions refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
shuffledex committed Nov 18, 2020
1 parent a996a68 commit 227b9df
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 7 deletions.
21 changes: 18 additions & 3 deletions src/api/entities/CurrentIdentity.ts
Expand Up @@ -4,6 +4,7 @@ import { chunk, flatten, uniqBy } from 'lodash';
import { Instruction as MeshInstruction } from 'polymesh-types/types';

import { Identity, Instruction, Venue } from '~/api/entities';
import { NumberedPortfolio } from '~/api/entities/NumberedPortfolio';
import {
createVenue,
CreateVenueParams,
Expand Down Expand Up @@ -82,11 +83,25 @@ export class CurrentIdentity extends Identity {
context,
} = this;

const [, ...numberedPortfolios] = await portfolios.getPortfolios();
const getPortfolios = await portfolios.getPortfolios();

const [ownedCustodiedPortfolios, custodiedPortfolios] = await Promise.all([
P.filter(getPortfolios, async portfolio => {
const { did: custodianIdentityDid } = await portfolio.getCustodian();
return custodianIdentityDid === did;
}),
this.portfolios.getCustodiedPortfolios(),
]);

const allPortfolios = [...ownedCustodiedPortfolios, ...custodiedPortfolios];

const portfolioIds: PortfolioId[] = [
{ did },
...numberedPortfolios.map(({ id: number }) => ({ did, number })),
...allPortfolios.map(portfolio => {
if (portfolio instanceof NumberedPortfolio) {
return { did, number: portfolio.id };
}
return { did };
}),
];

const portfolioIdChunks = chunk(portfolioIds, MAX_CONCURRENT_REQUESTS);
Expand Down
38 changes: 34 additions & 4 deletions src/api/entities/__tests__/CurrentIdentity.ts
Expand Up @@ -9,6 +9,19 @@ import { SecondaryKey, SubCallback, VenueType } from '~/types';
import { tuple } from '~/types/utils';
import * as utilsConversionModule from '~/utils/conversion';

// jest.mock(
// '~/api/entities/NumberedPortfolio',
// require('~/testUtils/mocks/entities').mockNumberedPortfolioModule(
// '~/api/entities/NumberedPortfolio'
// )
// );
// jest.mock(
// '~/api/entities/DefaultPortfolio',
// require('~/testUtils/mocks/entities').mockDefaultPortfolioModule(
// '~/api/entities/DefaultPortfolio'
// )
// );

describe('CurrentIdentity class', () => {
let context: Context;

Expand Down Expand Up @@ -137,7 +150,7 @@ describe('CurrentIdentity class', () => {
});
});

describe('method: getPendingInstructions', () => {
describe.only('method: getPendingInstructions', () => {
test('should return all pending instructions in which the identity is involved', async () => {
const id1 = new BigNumber(1);
const id2 = new BigNumber(2);
Expand All @@ -147,12 +160,27 @@ describe('CurrentIdentity class', () => {

const did = 'someDid';
const identity = new CurrentIdentity({ did }, context);
const otherDid = 'otherDid';
const otherIdentity = new Identity({ did: otherDid }, context);

const numberedPortfolioId = new BigNumber(1);

identity.portfolios.getPortfolios = sinon
.stub()
.resolves([{ owner: { did } }, { owner: { did }, id: numberedPortfolioId }]);
// identity.portfolios.getPortfolios = sinon
// .stub()
// .resolves([{ owner: { did } }, { owner: { did }, id: numberedPortfolioId }]);

const portfolio1 = entityMockUtils.getDefaultPortfolioInstance({
custodian: identity,
});
const portfolio2 = entityMockUtils.getNumberedPortfolioInstance({
id: numberedPortfolioId,
custodian: otherIdentity,
});
const portfolio3 = entityMockUtils.getNumberedPortfolioInstance({
id: numberedPortfolioId,
custodian: identity,
});
identity.portfolios.getPortfolios = sinon.stub().resolves([portfolio1, portfolio2]);

const rawPortfolio = dsMockUtils.createMockPortfolioId({
did: dsMockUtils.createMockIdentityId(did),
Expand All @@ -166,6 +194,8 @@ describe('CurrentIdentity class', () => {
}),
});

identity.portfolios.getCustodiedPortfolios = sinon.stub().resolves([portfolio3]);

const portfolioIdToMeshPortfolioIdStub = sinon.stub(
utilsConversionModule,
'portfolioIdToMeshPortfolioId'
Expand Down

0 comments on commit 227b9df

Please sign in to comment.