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

Commit a260457

Browse files
author
Victor Wiebe
committed
fix: 🐛 STR generateNewTicker refactor and tests
1 parent bb10e38 commit a260457

File tree

2 files changed

+69
-42
lines changed

2 files changed

+69
-42
lines changed

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

Lines changed: 46 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -599,32 +599,51 @@ describe('SecurityTokenRegistryWrapper', () => {
599599

600600
describe('RegisterNewTicker', () => {
601601
test('should call registerNewTicker with RegisterNewTickerParams', async () => {
602-
const mockedParams = {
603-
owner: "0x0023456789002345678900234567890023456789",
604-
ticker: "TTEST",
605-
txData: {},
606-
safetyFactor: 10,
607-
};
608-
609-
// checkWhenNotPausedOrOwner
602+
const ticker = 'TICK';
610603
const expectedOwnerResult = '0x0123456789012345678901234567890123456789';
604+
// Mocked method
611605
const mockedOwnerMethod = mock(MockedCallMethod);
606+
// Stub the method
612607
when(mockedContract.owner).thenReturn(instance(mockedOwnerMethod));
608+
// Stub the request
613609
when(mockedOwnerMethod.callAsync()).thenResolve(expectedOwnerResult);
614-
when(mockedWrapper.getAvailableAddressesAsync()).thenResolve([expectedOwnerResult]);
615610

616-
// tickerDetails
611+
// Get Ticker Details
617612
const expectedTickerDetailsResult = [
618613
'0x0123456789012345678901234567890123456789',
619614
new BigNumber(1735689600),
620615
new BigNumber(1735689605),
621616
'ticker',
622617
false,
623618
];
624-
const mockedTickerDetailsMethod = mock(MockedCallMethod);
625-
when(mockedContract.getTickerDetails).thenReturn(instance(mockedTickerDetailsMethod));
626-
when(mockedTickerDetailsMethod.callAsync(mockedParams.ticker)).thenResolve(expectedTickerDetailsResult);
619+
const mockedGetTickerDetailsMethod = mock(MockedCallMethod);
620+
when(mockedContract.getTickerDetails).thenReturn(instance(mockedGetTickerDetailsMethod));
621+
when(mockedGetTickerDetailsMethod.callAsync(ticker)).thenResolve(expectedTickerDetailsResult);
622+
623+
when(mockedWrapper.getAvailableAddressesAsync()).thenResolve([expectedOwnerResult]);
627624

625+
// Get ticker registration fee
626+
const expectedTickerRegistrationFeeResult = valueToWei(new BigNumber(10), FULL_DECIMALS);
627+
const mockedTickerRegistrationFeeMethod = mock(MockedSendMethod);
628+
when(mockedContract.getTickerRegistrationFee).thenReturn(instance(mockedTickerRegistrationFeeMethod));
629+
when(mockedTickerRegistrationFeeMethod.callAsync()).thenResolve(expectedTickerRegistrationFeeResult);
630+
631+
// Get Poly Balance
632+
const polyBalance = valueToWei(new BigNumber(100), FULL_DECIMALS);
633+
when(mockedContractFactory.getPolyTokenContract()).thenResolve(instance(mockedPolyTokenContract));
634+
const mockedPolyTokenBalanceOfMethod = mock(MockedCallMethod);
635+
when(mockedPolyTokenBalanceOfMethod.callAsync(expectedOwnerResult)).thenResolve(polyBalance);
636+
when(mockedPolyTokenContract.balanceOf).thenReturn(instance(mockedPolyTokenBalanceOfMethod));
637+
638+
const owner = '0x0123456789012345678901234567890123456789';
639+
const tokenName = 'TICKER';
640+
const mockedParams = {
641+
owner,
642+
ticker,
643+
tokenName,
644+
txData: {},
645+
safetyFactor: 10,
646+
};
628647
const expectedResult = getMockedPolyResponse();
629648
const mockedMethod = mock(MockedSendMethod);
630649
when(mockedContract.registerNewTicker).thenReturn(instance(mockedMethod));
@@ -652,11 +671,16 @@ describe('SecurityTokenRegistryWrapper', () => {
652671
mockedParams.safetyFactor,
653672
),
654673
).once();
674+
verify(mockedContract.getTickerDetails).once();
675+
verify(mockedGetTickerDetailsMethod.callAsync(ticker)).once();
676+
verify(mockedContract.getTickerRegistrationFee).once();
677+
verify(mockedTickerRegistrationFeeMethod.callAsync()).once();
678+
verify(mockedPolyTokenContract.balanceOf).once();
679+
verify(mockedPolyTokenBalanceOfMethod.callAsync(expectedOwnerResult)).once();
655680
verify(mockedContract.owner).once();
656681
verify(mockedOwnerMethod.callAsync()).once();
657682
verify(mockedWrapper.getAvailableAddressesAsync()).once();
658-
verify(mockedContract.getTickerDetails).once();
659-
verify(mockedTickerDetailsMethod.callAsync(mockedParams.ticker)).once();
683+
verify(mockedContractFactory.getPolyTokenContract()).once();
660684
});
661685
});
662686

@@ -1148,7 +1172,13 @@ describe('SecurityTokenRegistryWrapper', () => {
11481172
when(mockedOwnerMethod.callAsync()).thenResolve(expectedOwnerResult);
11491173

11501174
// Get Ticker Details
1151-
const expectedTickerDetailsResult = ['', new BigNumber(0), new BigNumber(0), '', false];
1175+
const expectedTickerDetailsResult = [
1176+
'0x0123456789012345678901234567890123456789',
1177+
new BigNumber(1735689600),
1178+
new BigNumber(1735689605),
1179+
'ticker',
1180+
false,
1181+
];
11521182
const mockedGetTickerDetailsMethod = mock(MockedCallMethod);
11531183
when(mockedContract.getTickerDetails).thenReturn(instance(mockedGetTickerDetailsMethod));
11541184
when(mockedGetTickerDetailsMethod.callAsync(ticker)).thenResolve(expectedTickerDetailsResult);

src/contract_wrappers/registries/security_token_registry_wrapper.ts

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -727,14 +727,8 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
727727
*/
728728
public registerNewTicker = async (params: RegisterNewTickerParams) => {
729729
await this.checkWhenNotPausedOrOwner();
730-
assert.isNonZeroETHAddressHex('owner', params.owner);
731-
assert.assert(params.ticker.length > 0 && params.ticker.length <= 10, 'Bad ticker');
732-
assert.assert(
733-
await this.isTickerAvailable({
734-
tokenName: params.ticker,
735-
}),
736-
'Ticker reserved',
737-
);
730+
const owner = params.owner !== undefined ? params.owner : await this.getDefaultFromAddress();
731+
await this.checkRegisterTickerRequirements(params.ticker, owner);
738732
return (await this.contract).registerNewTicker.sendTransactionAsync(
739733
params.owner,
740734
params.ticker,
@@ -803,25 +797,9 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
803797
* its ownership. If the ticker expires and its issuer hasn't used it, then someone else can take it.
804798
*/
805799
public registerTicker = async (params: RegisterTickerParams) => {
806-
const owner = params.owner !== undefined ? params.owner : await this.getDefaultFromAddress();
807-
assert.isETHAddressHex('owner', owner);
808800
await this.checkWhenNotPausedOrOwner();
809-
assert.assert(params.ticker.length > 0, 'Ticker is empty');
810-
assert.assert(params.ticker.length <= 10, 'Ticker length can not be greater than 10');
811-
assert.assert(
812-
await this.isTickerAvailable({
813-
tokenName: params.ticker,
814-
}),
815-
'Ticker is not available',
816-
);
817-
818-
// Check poly token allowance
819-
const tickerRegistrationFee = await this.getTickerRegistrationFee();
820-
if (tickerRegistrationFee.isGreaterThan(BIG_NUMBER_ZERO)) {
821-
const polyBalance = weiToValue(await (await this.polyTokenContract()).balanceOf.callAsync(owner), FULL_DECIMALS);
822-
assert.assert(polyBalance.isGreaterThanOrEqualTo(tickerRegistrationFee), 'Insufficient Poly token allowance');
823-
}
824-
801+
const owner = params.owner !== undefined ? params.owner : await this.getDefaultFromAddress();
802+
await this.checkRegisterTickerRequirements(params.ticker, owner);
825803
return (await this.contract).registerTicker.sendTransactionAsync(
826804
owner,
827805
params.ticker,
@@ -1312,4 +1290,23 @@ export default class SecurityTokenRegistryWrapper extends ContractWrapper {
13121290
'Msg sender must be owner',
13131291
);
13141292
};
1293+
1294+
private checkRegisterTickerRequirements = async (ticker: string, owner: string) => {
1295+
assert.isETHAddressHex('owner', owner);
1296+
assert.assert(ticker.length > 0 && ticker.length <= 10, 'Bad ticker, must be 1 to 10 characters');
1297+
assert.assert(
1298+
await this.isTickerAvailable({
1299+
tokenName: ticker,
1300+
}),
1301+
'Ticker is not available',
1302+
);
1303+
1304+
// Check poly token allowance
1305+
const tickerRegistrationFee = await this.getTickerRegistrationFee();
1306+
if (tickerRegistrationFee.isGreaterThan(BIG_NUMBER_ZERO)) {
1307+
const polyBalance = weiToValue(await (await this.polyTokenContract()).balanceOf.callAsync(owner), FULL_DECIMALS);
1308+
assert.assert(polyBalance.isGreaterThanOrEqualTo(tickerRegistrationFee), 'Insufficient Poly token allowance');
1309+
}
1310+
1311+
}
13151312
}

0 commit comments

Comments
 (0)