From 9e1ad3b1a3561a125a5634d26eacb07b40ee8420 Mon Sep 17 00:00:00 2001 From: Shuffledex Date: Wed, 14 Oct 2020 12:22:14 -0300 Subject: [PATCH] fix: add primaryIssuanceAgent as new param in checkSettle method --- .../SecurityToken/Compliance/Requirements.ts | 6 ++- .../Compliance/__tests__/Requirements.ts | 37 ++++++++++++++++++- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/api/entities/SecurityToken/Compliance/Requirements.ts b/src/api/entities/SecurityToken/Compliance/Requirements.ts index d00c894e71..32a363071a 100644 --- a/src/api/entities/SecurityToken/Compliance/Requirements.ts +++ b/src/api/entities/SecurityToken/Compliance/Requirements.ts @@ -161,11 +161,15 @@ export class Requirements extends Namespace { const fromDid = stringToIdentityId(signerToString(from), context); const toDid = signerToString(to); + const securityToken = new SecurityToken({ ticker }, context); + const { primaryIssuanceAgent } = await securityToken.details(); + // eslint-disable-next-line @typescript-eslint/no-explicit-any const res: AssetComplianceResult = await (rpc as any).compliance.canTransfer( stringToTicker(ticker, context), fromDid, - stringToIdentityId(toDid, context) + stringToIdentityId(toDid, context), + primaryIssuanceAgent ? stringToIdentityId(primaryIssuanceAgent.did, context) : null ); return assetComplianceResultToRequirementCompliance(res); diff --git a/src/api/entities/SecurityToken/Compliance/__tests__/Requirements.ts b/src/api/entities/SecurityToken/Compliance/__tests__/Requirements.ts index f2d5190678..3ecf5cc2ad 100644 --- a/src/api/entities/SecurityToken/Compliance/__tests__/Requirements.ts +++ b/src/api/entities/SecurityToken/Compliance/__tests__/Requirements.ts @@ -3,6 +3,7 @@ import { AssetCompliance, AssetComplianceResult, IdentityId, Ticker } from 'poly import sinon from 'sinon'; import { Namespace, SecurityToken } from '~/api/entities'; +import { Identity } from '~/api/entities/Identity'; import { togglePauseRequirements } from '~/api/procedures'; import { Params, setAssetRequirements } from '~/api/procedures/setAssetRequirements'; import { Context, TransactionQueue } from '~/base'; @@ -13,6 +14,11 @@ import * as utilsModule from '~/utils'; import { Requirements } from '../Requirements'; +jest.mock( + '~/api/entities/SecurityToken', + require('~/testUtils/mocks/entities').mockSecurityTokenModule('~/api/entities/SecurityToken') +); + describe('Requirements class', () => { beforeAll(() => { entityMockUtils.initMocks(); @@ -20,10 +26,12 @@ describe('Requirements class', () => { }); afterEach(() => { + entityMockUtils.reset(); dsMockUtils.reset(); }); afterAll(() => { + entityMockUtils.cleanup(); dsMockUtils.cleanup(); }); @@ -350,6 +358,8 @@ describe('Requirements class', () => { let rawToDid: IdentityId; let rawCurrentDid: IdentityId; let rawTicker: Ticker; + let primaryIssuanceAgentDid: string; + let rawPrimaryIssuanceAgentDid: IdentityId; let stringToIdentityIdStub: sinon.SinonStub; let assetComplianceResultToRequirementComplianceStub: sinon.SinonStub; @@ -358,6 +368,7 @@ describe('Requirements class', () => { beforeAll(() => { fromDid = 'fromDid'; toDid = 'toDid'; + primaryIssuanceAgentDid = 'primaryIssuanceAgentDid'; stringToIdentityIdStub = sinon.stub(utilsModule, 'stringToIdentityId'); assetComplianceResultToRequirementComplianceStub = sinon.stub( @@ -377,11 +388,15 @@ describe('Requirements class', () => { rawToDid = dsMockUtils.createMockIdentityId(toDid); rawCurrentDid = dsMockUtils.createMockIdentityId(currentDid); rawTicker = dsMockUtils.createMockTicker(token.ticker); + rawPrimaryIssuanceAgentDid = dsMockUtils.createMockIdentityId(primaryIssuanceAgentDid); stringToIdentityIdStub.withArgs(currentDid, context).returns(rawCurrentDid); stringToIdentityIdStub.withArgs(fromDid, context).returns(rawFromDid); stringToIdentityIdStub.withArgs(toDid, context).returns(rawToDid); stringToTickerStub.withArgs(token.ticker, context).returns(rawTicker); + stringToIdentityIdStub + .withArgs(primaryIssuanceAgentDid, context) + .returns(rawPrimaryIssuanceAgentDid); }); afterAll(() => { @@ -391,9 +406,19 @@ describe('Requirements class', () => { test('checkSettle should return the current requirement compliance and whether the transfer complies', async () => { const rawResponse = ('response' as unknown) as AssetComplianceResult; + const primaryIssuanceAgent = new Identity({ did: primaryIssuanceAgentDid }, context); + + entityMockUtils.configureMocks({ + securityTokenOptions: { + details: { + primaryIssuanceAgent, + }, + }, + }); + dsMockUtils .createRpcStub('compliance', 'canTransfer') - .withArgs(rawTicker, rawCurrentDid, rawToDid) + .withArgs(rawTicker, rawCurrentDid, rawToDid, rawPrimaryIssuanceAgentDid) .resolves(rawResponse); const fakeResult = 'result'; @@ -408,9 +433,17 @@ describe('Requirements class', () => { test('checkSettle should return the current requirement compliance and whether the transfer complies with another Identity', async () => { const rawResponse = ('response' as unknown) as AssetComplianceResult; + entityMockUtils.configureMocks({ + securityTokenOptions: { + details: { + primaryIssuanceAgent: null, + }, + }, + }); + dsMockUtils .createRpcStub('compliance', 'canTransfer') - .withArgs(rawTicker, rawFromDid, rawToDid) + .withArgs(rawTicker, rawFromDid, rawToDid, null) .resolves(rawResponse); const fakeResult = 'result';