Skip to content
This repository was archived by the owner on Jul 6, 2022. It is now read-only.

Commit bb10e38

Browse files
author
Victor Wiebe
committed
fix: 🐛 generateNewSecurityToken in STR missing assertions
1 parent cedea58 commit bb10e38

File tree

2 files changed

+68
-1
lines changed

2 files changed

+68
-1
lines changed

src/contract_wrappers/registries/__tests__/security_token_registry_wrapper.test.ts

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,9 +499,45 @@ describe('SecurityTokenRegistryWrapper', () => {
499499

500500
describe('GenerateNewSecurityToken', () => {
501501
test('should call generateNewSecurityToken with NewSecurityTokenParams', async () => {
502+
const ticker = 'TICK';
503+
const expectedOwnerResult = '0x0123456789012345678901234567890123456789';
504+
// Mocked method
505+
const mockedOwnerMethod = mock(MockedCallMethod);
506+
// Stub the method
507+
when(mockedContract.owner).thenReturn(instance(mockedOwnerMethod));
508+
// Stub the request
509+
when(mockedOwnerMethod.callAsync()).thenResolve(expectedOwnerResult);
510+
511+
const expectedTickerDetailsResult = [
512+
'0x0123456789012345678901234567890123456789',
513+
new BigNumber(1735689600),
514+
new BigNumber(1735689605),
515+
ticker,
516+
false,
517+
];
518+
519+
const mockedGetTickerDetailsMethod = mock(MockedCallMethod);
520+
when(mockedContract.getTickerDetails).thenReturn(instance(mockedGetTickerDetailsMethod));
521+
when(mockedGetTickerDetailsMethod.callAsync(ticker)).thenResolve(expectedTickerDetailsResult);
522+
523+
when(mockedWrapper.getAvailableAddressesAsync()).thenResolve([expectedOwnerResult]);
524+
525+
// Get Security token launch fee
526+
const expectedLaunchFeeResult = valueToWei(new BigNumber(10), FULL_DECIMALS);
527+
const mockedLaunchFeeMethod = mock(MockedSendMethod);
528+
when(mockedContract.getSecurityTokenLaunchFee).thenReturn(instance(mockedLaunchFeeMethod));
529+
when(mockedLaunchFeeMethod.callAsync()).thenResolve(expectedLaunchFeeResult);
530+
531+
// Get ERC20 Allowance
532+
const erc20Allowance = valueToWei(new BigNumber(100), FULL_DECIMALS);
533+
when(mockedContractFactory.getPolyTokenContract()).thenResolve(instance(mockedPolyTokenContract));
534+
const mockedPolyTokenBalanceOfMethod = mock(MockedCallMethod);
535+
when(mockedPolyTokenBalanceOfMethod.callAsync(expectedOwnerResult)).thenResolve(erc20Allowance);
536+
when(mockedPolyTokenContract.balanceOf).thenReturn(instance(mockedPolyTokenBalanceOfMethod));
537+
502538
const mockedParams = {
503539
name: "TOKEN TEST",
504-
ticker: "TTEST",
540+
ticker,
505541
tokenDetails: "",
506542
divisible: true,
507543
treasuryWallet: "0x0023456789002345678900234567890023456789",
@@ -548,6 +584,16 @@ describe('SecurityTokenRegistryWrapper', () => {
548584
mockedParams.safetyFactor,
549585
),
550586
).once();
587+
verify(mockedContract.owner).once();
588+
verify(mockedOwnerMethod.callAsync()).once();
589+
verify(mockedWrapper.getAvailableAddressesAsync()).twice();
590+
verify(mockedContract.getTickerDetails).once();
591+
verify(mockedGetTickerDetailsMethod.callAsync(ticker)).once();
592+
verify(mockedContract.getSecurityTokenLaunchFee).once();
593+
verify(mockedLaunchFeeMethod.callAsync()).once();
594+
verify(mockedContractFactory.getPolyTokenContract()).once();
595+
verify(mockedPolyTokenBalanceOfMethod.callAsync(expectedOwnerResult)).once();
596+
verify(mockedPolyTokenContract.balanceOf).once();
551597
});
552598
});
553599

src/contract_wrappers/registries/security_token_registry_wrapper.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -680,6 +680,27 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
680680
};
681681

682682
public generateNewSecurityToken = async (params: NewSecurityTokenParams) => {
683+
assert.assert(params.ticker.length > 0, 'Ticker is empty');
684+
assert.assert(params.name.length > 0, 'Name is empty');
685+
await this.checkWhenNotPausedOrOwner();
686+
const tickerDetails = await this.getTickerDetails({
687+
tokenName: params.ticker,
688+
});
689+
assert.assert(!tickerDetails.status, 'Ticker already deployed');
690+
const address = (await this.web3Wrapper.getAvailableAddressesAsync())[0];
691+
assert.assert(functionsUtils.checksumAddressComparision(address, tickerDetails.owner), 'Not authorised');
692+
assert.assert(tickerDetails.expiryDate.getTime() >= Date.now(), 'Ticker gets expired');
693+
694+
// Check PolyToken allowance
695+
const securityTokenLaunchFee = await this.getSecurityTokenLaunchFee();
696+
if (securityTokenLaunchFee.isGreaterThan(BIG_NUMBER_ZERO)) {
697+
const polyBalance = weiToValue(
698+
await (await this.polyTokenContract()).balanceOf.callAsync(address),
699+
FULL_DECIMALS,
700+
);
701+
assert.assert(polyBalance.isGreaterThanOrEqualTo(securityTokenLaunchFee), 'Insufficient Poly token allowance');
702+
}
703+
683704
const version = params.protocolVersion;
684705
let protocolVersion = new BigNumber(0);
685706
if (version !== '0') {

0 commit comments

Comments
 (0)