Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/beta' into test/disable-feature-…
Browse files Browse the repository at this point in the history
…procedure

# Conflicts:
#	src/procedures/__tests__/CreateEtherDividendDistribution.ts
#	src/procedures/__tests__/SetDividendsWallet.ts
  • Loading branch information
Victor Wiebe committed Nov 20, 2019
2 parents 3560dd6 + ab36efd commit c9dabe7
Show file tree
Hide file tree
Showing 17 changed files with 394 additions and 214 deletions.
2 changes: 1 addition & 1 deletion package.json
@@ -1,6 +1,6 @@
{
"name": "@polymathnetwork/sdk",
"version": "2.0.1-beta.55",
"version": "2.0.1-beta.56",
"description": "A Javascript SDK for interacting with the Polymath network for the browser and Node.js",
"bugs": {
"url": "https://github.com/PolymathNetwork/polymath-sdk/issues"
Expand Down
16 changes: 10 additions & 6 deletions src/procedures/__tests__/ApproveErc20.ts
@@ -1,14 +1,14 @@
import { ImportMock, MockManager } from 'ts-mock-imports';
import * as contractWrappersModule from '@polymathnetwork/contract-wrappers';
import { BigNumber } from '@polymathnetwork/contract-wrappers';
import { SinonStub, stub, spy } from 'sinon';
import { SinonStub, spy } from 'sinon';
import * as contextModule from '../../Context';
import * as polymathBaseModule from '../../PolymathBase';
import { ApproveErc20 } from '../../procedures/ApproveErc20';
import { Procedure } from '~/procedures/Procedure';
import { Wallet } from '~/Wallet';
import { PolymathError } from '~/PolymathError';
import { ErrorCode, PolyTransactionTag, ProcedureType } from '~/types';
import { Procedure } from '../../procedures/Procedure';
import { Wallet } from '../../Wallet';
import { PolymathError } from '../../PolymathError';
import { ErrorCode, PolyTransactionTag, ProcedureType } from '../../types';

const params = {
amount: new BigNumber(1),
Expand Down Expand Up @@ -87,6 +87,7 @@ describe('ApproveErc20', () => {
target = new ApproveErc20(params, contextMock.getMockInstance());

const addTransactionSpy = spy(target, 'addTransaction');
polyTokenMock.mock('approve', Promise.resolve('Approve'));

// Real call
await target.prepareTransactions();
Expand All @@ -111,13 +112,14 @@ describe('ApproveErc20', () => {
target = new ApproveErc20({ ...params, tokenAddress }, contextMock.getMockInstance());

const addTransactionSpy = spy(target, 'addTransaction');
erc20Mock.mock('approve', Promise.resolve('Approve'));

// Real call
await target.prepareTransactions();

// Verifications
expect(
addTransactionSpy.getCall(0).calledWithExactly(polyTokenMock.getMockInstance().approve, {
addTransactionSpy.getCall(0).calledWithExactly(erc20Mock.getMockInstance().approve, {
tag: PolyTransactionTag.ApproveErc20,
})
).toEqual(true);
Expand Down Expand Up @@ -151,6 +153,8 @@ describe('ApproveErc20', () => {
target = new ApproveErc20(params, contextMock.getMockInstance());

const addTransactionSpy = spy(target, 'addTransaction');
polyTokenMock.mock('approve', Promise.resolve('Approve'));
wrappersMock.mock('getPolyTokens', Promise.resolve('GetPolyTokens'));

// Real call
await target.prepareTransactions();
Expand Down
16 changes: 11 additions & 5 deletions src/procedures/__tests__/AssignSecurityTokenRole.ts
Expand Up @@ -6,11 +6,11 @@ import * as contextModule from '../../Context';
import * as wrappersModule from '../../PolymathBase';
import * as tokenFactoryModule from '../../testUtils/MockedTokenFactoryModule';
import { AssignSecurityTokenRole } from '../../procedures/AssignSecurityTokenRole';
import { Procedure } from '~/procedures/Procedure';
import { PolymathError } from '~/PolymathError';
import { ErrorCode, Feature, PolyTransactionTag, SecurityTokenRole } from '~/types';
import * as securityTokenFactoryModule from '~/entities/factories/SecurityTokenFactory';
import { mockFactories } from '~/testUtils/mockFactories';
import { Procedure } from '../Procedure';
import { PolymathError } from '../../PolymathError';
import { ErrorCode, Feature, PolyTransactionTag, SecurityTokenRole } from '../../types';
import * as securityTokenFactoryModule from '../../entities/factories/SecurityTokenFactory';
import { mockFactories } from '../../testUtils/mockFactories';

const params = {
symbol: 'TEST1',
Expand All @@ -37,6 +37,7 @@ describe('AssignSecurityTokenRole', () => {
wrappersMock = ImportMock.mockClass(wrappersModule, 'PolymathBase');

tokenFactoryMock = ImportMock.mockClass(tokenFactoryModule, 'MockedTokenFactoryModule');

contextMock.set('contractWrappers', wrappersMock.getMockInstance());
wrappersMock.set('tokenFactory', tokenFactoryMock.getMockInstance());

Expand Down Expand Up @@ -85,6 +86,8 @@ describe('AssignSecurityTokenRole', () => {
describe('AssignSecurityTokenRole', () => {
test('should add a change permission transaction to the queue with an existing delegate address', async () => {
const addTransactionSpy = spy(target, 'addTransaction');
gpmMock.mock('changePermission', Promise.resolve('ChangePermission'));

// Real call
await target.prepareTransactions();

Expand All @@ -100,6 +103,9 @@ describe('AssignSecurityTokenRole', () => {
test('should add transactions to the queue for add delegate and change permissions with a new delegate address', async () => {
gpmMock.mock('getAllDelegates', Promise.resolve([]));
const addTransactionSpy = spy(target, 'addTransaction');
gpmMock.mock('addDelegate', Promise.resolve('AddDelegate'));
gpmMock.mock('changePermission', Promise.resolve('ChangePermission'));

// Real call
await target.prepareTransactions();

Expand Down
13 changes: 10 additions & 3 deletions src/procedures/__tests__/AssignStoRole.ts
Expand Up @@ -5,9 +5,9 @@ import * as contextModule from '../../Context';
import * as wrappersModule from '../../PolymathBase';
import * as tokenFactoryModule from '../../testUtils/MockedTokenFactoryModule';
import { AssignStoRole } from '../../procedures/AssignStoRole';
import { Procedure } from '~/procedures/Procedure';
import { PolymathError } from '~/PolymathError';
import { ErrorCode, PolyTransactionTag, StoRole } from '~/types';
import { Procedure } from '../Procedure';
import { PolymathError } from '../../PolymathError';
import { ErrorCode, PolyTransactionTag, StoRole } from '../../types';

const params = {
symbol: 'TEST1',
Expand Down Expand Up @@ -53,6 +53,8 @@ describe('AssignStoRole', () => {
describe('AssignStoRole', () => {
test('should add transaction to the queue to change permission for an sto', async () => {
const addTransactionSpy = spy(target, 'addTransaction');
gpmMock.mock('changePermission', Promise.resolve('ChangePermission'));

// Real call
await target.prepareTransactions();

Expand All @@ -68,6 +70,9 @@ describe('AssignStoRole', () => {
test('should add transaction to the queue to add delegate and change permission for a new delegate in an sto', async () => {
gpmMock.mock('getAllDelegates', Promise.resolve([]));
const addTransactionSpy = spy(target, 'addTransaction');
gpmMock.mock('addDelegate', Promise.resolve('AddDelegate'));
gpmMock.mock('changePermission', Promise.resolve('ChangePermission'));

// Real call
await target.prepareTransactions();

Expand All @@ -91,6 +96,8 @@ describe('AssignStoRole', () => {
contextMock.getMockInstance()
);
const addTransactionSpy = spy(target, 'addTransaction');
gpmMock.mock('changePermission', Promise.resolve('ChangePermission'));

// Real call
await target.prepareTransactions();

Expand Down
20 changes: 13 additions & 7 deletions src/procedures/__tests__/ControllerTransfer.ts
Expand Up @@ -8,13 +8,13 @@ import { Wallet } from '../../Wallet';
import * as tokenFactoryModule from '../../testUtils/MockedTokenFactoryModule';
import { ControllerTransfer } from '../../procedures/ControllerTransfer';
import * as controllerTransferModule from '../../procedures/ControllerTransfer';
import { Procedure } from '~/procedures/Procedure';
import { PolymathError } from '~/PolymathError';
import { ErrorCode, ProcedureType } from '~/types';
import { mockFactories } from '~/testUtils/mockFactories';
import * as shareholderFactoryModule from '~/entities/factories/ShareholderFactory';
import { Procedure } from '../../procedures/Procedure';
import { PolymathError } from '../../PolymathError';
import { ErrorCode, PolyTransactionTag, ProcedureType } from '../../types';
import { mockFactories } from '../../testUtils/mockFactories';
import * as shareholderFactoryModule from '../../entities/factories/ShareholderFactory';
import { Factories } from '../../Context';
import { SecurityToken, Shareholder } from '~/entities';
import { SecurityToken, Shareholder } from '../../entities';

const params = {
symbol: 'TEST1',
Expand All @@ -30,6 +30,7 @@ describe('ControllerTransfer', () => {
let target: ControllerTransfer;
let contextMock: MockManager<contextModule.Context>;
let wrappersMock: MockManager<wrappersModule.PolymathBase>;

let tokenFactoryMock: MockManager<tokenFactoryModule.MockedTokenFactoryModule>;
let securityTokenMock: MockManager<contractWrappersModule.SecurityToken_3_0_0>;
let shareholderFactoryMock: MockManager<shareholderFactoryModule.ShareholderFactory>;
Expand Down Expand Up @@ -75,6 +76,8 @@ describe('ControllerTransfer', () => {
describe('ControllerTransfer', () => {
test('should add a transaction to the queue to execute a controller transfer', async () => {
const addTransactionSpy = spy(target, 'addTransaction');
securityTokenMock.mock('controllerTransfer', Promise.resolve('ControllerTransfer'));

// Real call
await target.prepareTransactions();

Expand All @@ -84,6 +87,9 @@ describe('ControllerTransfer', () => {
.getCall(0)
.calledWith(securityTokenMock.getMockInstance().controllerTransfer)
).toEqual(true);
expect(addTransactionSpy.getCall(0).lastArg.tag).toEqual(
PolyTransactionTag.ControllerTransfer
);
expect(addTransactionSpy.callCount).toEqual(1);
});

Expand Down Expand Up @@ -161,7 +167,7 @@ describe('ControllerTransfer', () => {
});

test('should successfully resolve controller transfer', async () => {
const refreshStub = shareholderFactoryMock.mock('refresh', Promise.resolve(undefined));
const refreshStub = shareholderFactoryMock.mock('refresh', Promise.resolve());
const securityTokenId = SecurityToken.generateId({ symbol: params.symbol });
const resolverValue = await controllerTransferModule.createControllerTransferResolver(
factoriesMockedSetup,
Expand Down
20 changes: 12 additions & 8 deletions src/procedures/__tests__/CreateCheckpoint.ts
Expand Up @@ -5,16 +5,16 @@ import { TransactionReceiptWithDecodedLogs } from 'ethereum-protocol';
import { BigNumber } from '@polymathnetwork/contract-wrappers';
import { SecurityTokenEvents } from '@polymathnetwork/contract-wrappers';
import { CreateCheckpoint } from '../../procedures/CreateCheckpoint';
import { Procedure } from '~/procedures/Procedure';
import { PolymathError } from '~/PolymathError';
import { ErrorCode, ProcedureType } from '~/types';
import { Procedure } from '../../procedures/Procedure';
import { PolymathError } from '../../PolymathError';
import { ErrorCode, PolyTransactionTag, ProcedureType } from '../../types';
import * as utilsModule from '../../utils';
import * as checkpointFactoryModule from '~/entities/factories/CheckpointFactory';
import * as checkpointFactoryModule from '../../entities/factories/CheckpointFactory';
import * as contextModule from '../../Context';
import * as wrappersModule from '../../PolymathBase';
import * as tokenFactoryModule from '../../testUtils/MockedTokenFactoryModule';
import { mockFactories } from '~/testUtils/mockFactories';
import { Checkpoint, SecurityToken } from '~/entities';
import { mockFactories } from '../../testUtils/mockFactories';
import { Checkpoint, SecurityToken } from '../../entities';

const params = {
symbol: 'TEST1',
Expand All @@ -30,6 +30,7 @@ describe('CreateCheckpoint', () => {

let contextMock: MockManager<contextModule.Context>;
let wrappersMock: MockManager<wrappersModule.PolymathBase>;

let tokenFactoryMock: MockManager<tokenFactoryModule.MockedTokenFactoryModule>;

// Mock factories
Expand All @@ -39,8 +40,10 @@ describe('CreateCheckpoint', () => {
// Mock the context, wrappers, and tokenFactory to test CreateCheckpoint
contextMock = ImportMock.mockClass(contextModule, 'Context');
wrappersMock = ImportMock.mockClass(wrappersModule, 'PolymathBase');

tokenFactoryMock = ImportMock.mockClass(tokenFactoryModule, 'MockedTokenFactoryModule');
securityTokenMock = ImportMock.mockClass(contractWrappersModule, 'SecurityToken_3_0_0');

tokenFactoryMock.mock(
'getSecurityTokenInstanceFromTicker',
securityTokenMock.getMockInstance()
Expand Down Expand Up @@ -70,15 +73,17 @@ describe('CreateCheckpoint', () => {
describe('createCheckpoint', () => {
test('should add a transaction to the queue to create a new checkpoint', async () => {
const addTransactionSpy = spy(target, 'addTransaction');
securityTokenMock.mock('createCheckpoint', Promise.resolve('CreateCheckpoint'));

// Real call
await target.prepareTransactions();
// Verifications
expect(
addTransactionSpy
.getCall(0)
.calledWith(securityTokenMock.getMockInstance().controllerTransfer)
.calledWith(securityTokenMock.getMockInstance().createCheckpoint)
).toEqual(true);
expect(addTransactionSpy.getCall(0).lastArg.tag).toEqual(PolyTransactionTag.CreateCheckpoint);
expect(addTransactionSpy.callCount).toEqual(1);
});

Expand All @@ -104,7 +109,6 @@ describe('CreateCheckpoint', () => {
index: () => indexValue,
};

// Better test this
const fetchStub = checkpointFactoryMock.mock('fetch', Promise.resolve(checkpointObject));
const findEventsStub = ImportMock.mockFunction(utilsModule, 'findEvents', [
{
Expand Down
45 changes: 35 additions & 10 deletions src/procedures/__tests__/CreateErc20DividendDistribution.ts
Expand Up @@ -8,14 +8,14 @@ import * as wrappersModule from '../../PolymathBase';
import * as approveModule from '../ApproveErc20';
import * as tokenFactoryModule from '../../testUtils/MockedTokenFactoryModule';
import { CreateErc20DividendDistribution } from '../../procedures/CreateErc20DividendDistribution';
import { Procedure } from '~/procedures/Procedure';
import { PolymathError } from '~/PolymathError';
import { DividendType, ErrorCode, ProcedureType } from '~/types';
import { Procedure } from '../Procedure';
import { PolymathError } from '../../PolymathError';
import { DividendType, ErrorCode, PolyTransactionTag, ProcedureType } from '../../types';
import { ApproveErc20 } from '../ApproveErc20';
import * as dividendDistributionSecurityTokenFactoryModule from '~/entities/factories/DividendDistributionFactory';
import * as utilsModule from '~/utils';
import { mockFactories } from '~/testUtils/mockFactories';
import { DividendDistribution, SecurityToken } from '~/entities';
import * as dividendDistributionSecurityTokenFactoryModule from '../../entities/factories/DividendDistributionFactory';
import * as utilsModule from '../../utils';
import { mockFactories } from '../../testUtils/mockFactories';
import { DividendDistribution, SecurityToken } from '../../entities';

const params = {
symbol: 'TEST1',
Expand All @@ -33,6 +33,7 @@ describe('CreateErc20DividendDistribution', () => {
let wrappersMock: MockManager<wrappersModule.PolymathBase>;
let approvalMock: MockManager<approveModule.ApproveErc20>;
let tokenFactoryMock: MockManager<tokenFactoryModule.MockedTokenFactoryModule>;

let gpmMock: MockManager<contractWrappersModule.GeneralPermissionManager_3_0_0>;
let erc20DividendsMock: MockManager<contractWrappersModule.ERC20DividendCheckpoint_3_0_0>;

Expand All @@ -44,6 +45,7 @@ describe('CreateErc20DividendDistribution', () => {
// Mock the context, wrappers, and tokenFactory to test CreateErc20DividendDistribution
contextMock = ImportMock.mockClass(contextModule, 'Context');
wrappersMock = ImportMock.mockClass(wrappersModule, 'PolymathBase');

tokenFactoryMock = ImportMock.mockClass(tokenFactoryModule, 'MockedTokenFactoryModule');

// Import mock out of ApproveErc20
Expand Down Expand Up @@ -95,18 +97,26 @@ describe('CreateErc20DividendDistribution', () => {
test('should add a transaction to the queue to create an erc20 dividend distribution and to approve erc20 token', async () => {
const addProcedureSpy = spy(target, 'addProcedure');
const addTransactionSpy = spy(target, 'addTransaction');
erc20DividendsMock.mock(
'createDividendWithCheckpointAndExclusions',
Promise.resolve('CreateDividendWithCheckpointAndExclusions')
);

// Real call
await target.prepareTransactions();

// Verifications
expect(addProcedureSpy.getCall(0).calledWith(ApproveErc20)).toEqual(true);
expect(addProcedureSpy.getCall(0).calledWithExactly(ApproveErc20)).toEqual(true);
expect(
addTransactionSpy
.getCall(0)
.calledWith(
erc20DividendsMock.getMockInstance().createDividendWithCheckpointAndExclusions
)
).toEqual(true);
expect(addTransactionSpy.getCall(0).lastArg.tag).toEqual(
PolyTransactionTag.CreateErc20DividendDistribution
);
expect(addTransactionSpy.callCount).toEqual(1);
expect(addProcedureSpy.callCount).toEqual(1);
});
Expand All @@ -126,21 +136,33 @@ describe('CreateErc20DividendDistribution', () => {
);
const addProcedureSpy = spy(target, 'addProcedure');
const addTransactionSpy = spy(target, 'addTransaction');
erc20DividendsMock.mock(
'createDividendWithCheckpointAndExclusions',
Promise.resolve('CreateDividendWithCheckpointAndExclusions')
);
erc20DividendsMock.mock('setWithholding', Promise.resolve('SetWithholding'));

// Real call
await target.prepareTransactions();

// Verifications
expect(addProcedureSpy.getCall(0).calledWith(ApproveErc20)).toEqual(true);
expect(addProcedureSpy.getCall(0).calledWithExactly(ApproveErc20)).toEqual(true);
expect(
addTransactionSpy
.getCall(0)
.calledWith(
erc20DividendsMock.getMockInstance().createDividendWithCheckpointAndExclusions
)
).toEqual(true);
expect(addTransactionSpy.getCall(0).lastArg.tag).toEqual(
PolyTransactionTag.CreateErc20DividendDistribution
);
expect(
addTransactionSpy.getCall(1).calledWith(erc20DividendsMock.getMockInstance().setWithholding)
).toEqual(true);
expect(addTransactionSpy.getCall(1).lastArg.tag).toEqual(
PolyTransactionTag.SetErc20TaxWithholding
);
expect(addTransactionSpy.callCount).toEqual(2);
expect(addProcedureSpy.callCount).toEqual(1);
});
Expand Down Expand Up @@ -181,7 +203,10 @@ describe('CreateErc20DividendDistribution', () => {
index: () => Promise.resolve(dividendIndex),
};

const fetchStub = dividendDistributionFactoryMock.mock('fetch', dividendObject);
const fetchStub = dividendDistributionFactoryMock.mock(
'fetch',
Promise.resolve(dividendObject)
);
const findEventsStub = ImportMock.mockFunction(utilsModule, 'findEvents', [
{
args: {
Expand Down

0 comments on commit c9dabe7

Please sign in to comment.