Skip to content

Commit c219017

Browse files
author
Victor Wiebe
committed
feat: refresh st factory with mint tokens
1 parent ca5a3e9 commit c219017

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

src/procedures/MintTokens.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,16 @@ import {
1111
import { PolymathError } from '../PolymathError';
1212
import { Shareholder, SecurityToken } from '../entities';
1313
import { ModifyShareholderData } from './ModifyShareholderData';
14+
import { Factories } from '../Context';
1415

15-
export class MintTokens extends Procedure<MintTokensProcedureArgs, Shareholder[]> {
16+
export const refreshSecurityTokenFactoryResolver = (
17+
factories: Factories,
18+
securityTokenId: string
19+
) => async () => {
20+
return factories.securityTokenFactory.refresh(securityTokenId);
21+
};
22+
23+
export class MintTokens extends Procedure<MintTokensProcedureArgs, Shareholder[] | void> {
1624
public type = ProcedureType.MintTokens;
1725

1826
public async prepareTransactions() {
@@ -118,8 +126,6 @@ export class MintTokens extends Procedure<MintTokensProcedureArgs, Shareholder[]
118126
tag: PolyTransactionTag.IssueMulti,
119127
resolvers: [
120128
async () => {
121-
await factories.securityTokenFactory.refresh(securityTokenId);
122-
123129
const fetchingShareholders = investors.map(address => {
124130
return factories.shareholderFactory.fetch(
125131
Shareholder.generateId({
@@ -130,6 +136,7 @@ export class MintTokens extends Procedure<MintTokensProcedureArgs, Shareholder[]
130136
});
131137
return Promise.all(fetchingShareholders);
132138
},
139+
refreshSecurityTokenFactoryResolver(factories, securityTokenId),
133140
],
134141
})({ investors, values });
135142

src/procedures/__tests__/MintTokens.ts

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@ import { BigNumber, TransactionReceiptWithDecodedLogs } from '@polymathnetwork/c
44
import * as contractWrappersModule from '@polymathnetwork/contract-wrappers';
55
import { cloneDeep } from 'lodash';
66
import { MintTokens } from '../../procedures/MintTokens';
7+
import * as mintTokensModule from '../../procedures/MintTokens';
78
import { Procedure } from '../../procedures/Procedure';
89
import * as shareholdersEntityModule from '../../entities/SecurityToken/Shareholders';
910
import * as securityTokenEntityModule from '../../entities/SecurityToken/SecurityToken';
1011
import { PolymathError } from '../../PolymathError';
11-
import { ErrorCode, MintTokensProcedureArgs, PolyTransactionTag, ProcedureType } from '../../types';
12+
import {
13+
DividendType,
14+
ErrorCode,
15+
MintTokensProcedureArgs,
16+
PolyTransactionTag,
17+
ProcedureType,
18+
} from '../../types';
1219
import * as securityTokenFactoryModule from '../../entities/factories/SecurityTokenFactory';
1320
import * as shareholderFactoryModule from '../../entities/factories/ShareholderFactory';
1421
import * as contextModule from '../../Context';
@@ -17,8 +24,9 @@ import * as tokenFactoryModule from '../../testUtils/MockedTokenFactoryModule';
1724
import * as moduleWrapperFactoryModule from '../../testUtils/MockedModuleWrapperFactoryModule';
1825
import { ModifyShareholderData } from '../../procedures';
1926
import { mockFactories } from '../../testUtils/mockFactories';
20-
import { Shareholder } from '../../entities';
27+
import { DividendDistribution, Shareholder } from '../../entities';
2128
import { SecurityToken } from '../../entities/SecurityToken/SecurityToken';
29+
import { Factories } from '../../Context';
2230

2331
const securityTokenId = 'ST ID';
2432
const testAddress = '0x6666666666666666666666666666666666666666';
@@ -53,6 +61,7 @@ describe('MintTokens', () => {
5361
let moduleWrapperFactoryMock: MockManager<
5462
moduleWrapperFactoryModule.MockedModuleWrapperFactoryModule
5563
>;
64+
let factoryMockSetup: Factories;
5665

5766
// Mock factories
5867
let securityTokenFactoryMock: MockManager<securityTokenFactoryModule.SecurityTokenFactory>;
@@ -97,7 +106,7 @@ describe('MintTokens', () => {
97106
securityTokenMock.getMockInstance()
98107
);
99108

100-
const factoryMockSetup = mockFactories();
109+
factoryMockSetup = mockFactories();
101110

102111
wrappersMock.mock('getAttachedModules', Promise.resolve([]));
103112

@@ -167,6 +176,7 @@ describe('MintTokens', () => {
167176
address: testAddress,
168177
};
169178
const fetchStub = shareholderFactoryMock.mock('fetch', Promise.resolve(shareholderObject));
179+
const refreshStub = securityTokenEntityStaticMock.mock('refresh', Promise.resolve());
170180

171181
// Real call
172182
const resolver = await target.prepareTransactions();
@@ -191,6 +201,24 @@ describe('MintTokens', () => {
191201
)
192202
).toEqual(true);
193203
expect(fetchStub.callCount).toBe(2);
204+
205+
// Verification for fetch
206+
expect(refreshStub.getCall(0).calledWithExactly(securityTokenId)).toEqual(true);
207+
expect(refreshStub.getCall(1).calledWithExactly(securityTokenId)).toEqual(true);
208+
expect(refreshStub.callCount).toBe(2);
209+
});
210+
211+
test('should refresh the security token factory with resolver', async () => {
212+
const refreshStub = securityTokenFactoryMock.mock('refresh', Promise.resolve(undefined));
213+
214+
const resolverValue = await mintTokensModule.refreshSecurityTokenFactoryResolver(
215+
factoryMockSetup,
216+
securityTokenId
217+
)();
218+
219+
expect(refreshStub.getCall(0).calledWithExactly(securityTokenId)).toEqual(true);
220+
expect(resolverValue).toEqual(undefined);
221+
expect(refreshStub.callCount).toEqual(1);
194222
});
195223

196224
test('should throw if there is no valid security token supplied', async () => {

0 commit comments

Comments
 (0)