Skip to content

Commit 661caf1

Browse files
Update js test files to work with Web3 v1.0.
- Use BigNumber.js and `.toString()` instead of `.valueOf()` because of issues with BN.js: web3/web3.js#2171 - Use async / await with Web3 because all Web3 v1.0 calls are asynchronous
1 parent 408bf3c commit 661caf1

9 files changed

+822
-714
lines changed

Diff for: package-lock.json

+537-493
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"license": "LGPL-3.0",
3030
"dependencies": {
3131
"@gnosis.pm/util-contracts": "^3.0.0-alpha",
32+
"bignumber.js": "^8.1.1",
3233
"canonical-weth": "^1.4.0",
3334
"openzeppelin-solidity": "^2.2.0"
3435
},
@@ -37,7 +38,7 @@
3738
"@gnosis.pm/truffle-nice-tools": "^1.1.3",
3839
"babel-eslint": "^10.0.1",
3940
"cross-env": "^5.2.0",
40-
"decimal.js": "^10.0.0",
41+
"decimal.js": "^10.1.1",
4142
"eslint": "^5.7.0",
4243
"eslint-plugin-babel": "^5.2.1",
4344
"fs-extra": "^7.0.0",

Diff for: test/javascript/digix_tempo.js

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
//This is a modified copy of: https://github.com/DigixGlobal/tempo/blob/master/lib/index.js
2+
// It is not compatible with Web3 v1.0 (https://github.com/DigixGlobal/tempo/issues/5)
3+
// A pull request has been created https://github.com/DigixGlobal/tempo/pull/4
4+
// In the mean time, a local modified copy is used.
5+
6+
'use strict';
7+
8+
module.exports = function (web3) {
9+
function sendRpc(method, params) {
10+
return new Promise(function (resolve) {
11+
web3.currentProvider.send({
12+
jsonrpc: '2.0',
13+
method: method,
14+
params: params || [],
15+
id: new Date().getTime()
16+
}, function (err, res) {
17+
resolve(res);
18+
});
19+
});
20+
}
21+
function waitUntilBlock(seconds, targetBlock) {
22+
return new Promise(function (resolve) {
23+
var asyncIterator = function asyncIterator() {
24+
return web3.eth.getBlock('latest', function (e, _ref) {
25+
var number = _ref.number;
26+
27+
if (number >= targetBlock - 1) {
28+
return sendRpc('evm_increaseTime', [seconds]).then(function () {
29+
return sendRpc('evm_mine');
30+
}).then(resolve);
31+
}
32+
return sendRpc('evm_mine').then(asyncIterator);
33+
});
34+
};
35+
asyncIterator();
36+
});
37+
}
38+
function wait() {
39+
var seconds = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 20;
40+
var blocks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
41+
42+
return new Promise(function (resolve) {
43+
return web3.eth.getBlock('latest', function (e, _ref2) {
44+
var number = _ref2.number;
45+
46+
resolve(blocks + number);
47+
});
48+
}).then(function (targetBlock) {
49+
return waitUntilBlock(seconds, targetBlock);
50+
});
51+
}
52+
return { wait: wait, waitUntilBlock: waitUntilBlock };
53+
};

Diff for: test/javascript/test_events.js

+22-20
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,12 @@ contract('Event', function (accounts) {
2222
etherToken = await WETH9.deployed()
2323

2424
// create event
25-
ipfsHash = 'QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG'
26-
oracle = utils.getParamFromTxEvent(
25+
ipfsHash = web3.utils.utf8ToHex('QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG');
26+
oracle = await utils.getParamFromTxEvent(
2727
await centralizedOracleFactory.createCentralizedOracle(ipfsHash),
2828
'centralizedOracle', CentralizedOracle
2929
)
30-
event = utils.getParamFromTxEvent(
30+
event = await utils.getParamFromTxEvent(
3131
await eventFactory.createCategoricalEvent(etherToken.address, oracle.address, 2),
3232
'categoricalEvent', CategoricalEvent
3333
)
@@ -36,18 +36,19 @@ contract('Event', function (accounts) {
3636
it('should buy and sell all outcomes', async () => {
3737
// Buy all outcomes
3838
const buyer = 0
39-
const collateralTokenCount = 1e19
39+
const collateralTokenCount = 1e19.toString() // https://github.com/ethereum/web3.js/issues/2077
40+
const collateralTokenCountOver10 = 1e18.toString()
4041
await etherToken.deposit({ value: collateralTokenCount, from: accounts[buyer] })
41-
assert.equal(await etherToken.balanceOf.call(accounts[buyer]), collateralTokenCount)
42+
assert.equal(await etherToken.balanceOf.call(accounts[buyer]), collateralTokenCount)
4243

4344
await etherToken.approve(event.address, collateralTokenCount, { from: accounts[buyer] })
4445
for(let i = 0; i < 10; i++)
45-
await event.buyAllOutcomes(collateralTokenCount / 10, { from: accounts[buyer] })
46+
await event.buyAllOutcomes(collateralTokenCountOver10, { from: accounts[buyer] })
4647
assert.equal(await etherToken.balanceOf.call(event.address), collateralTokenCount)
4748
assert.equal(await etherToken.balanceOf.call(accounts[buyer]), 0)
4849

49-
const outcomeToken1 = OutcomeToken.at(await event.outcomeTokens.call(0))
50-
const outcomeToken2 = OutcomeToken.at(await event.outcomeTokens.call(1))
50+
const outcomeToken1 = await OutcomeToken.at(await event.outcomeTokens.call(0))
51+
const outcomeToken2 = await OutcomeToken.at(await event.outcomeTokens.call(1))
5152
assert.equal(await outcomeToken1.balanceOf.call(accounts[buyer]), collateralTokenCount)
5253
assert.equal(await outcomeToken2.balanceOf.call(accounts[buyer]), collateralTokenCount)
5354

@@ -62,18 +63,19 @@ contract('Event', function (accounts) {
6263
it('should buy and verify outcomes', async () => {
6364
// Buy all outcomes
6465
const buyer = 1
65-
const collateralTokenCount = 1e18
66+
const collateralTokenCount = 1e19.toString()
67+
const collateralTokenCountDividedBy10 = 1e18.toString()
6668
await etherToken.deposit({ value: collateralTokenCount, from: accounts[buyer] })
6769
assert.equal(await etherToken.balanceOf.call(accounts[buyer]), collateralTokenCount)
6870

6971
await etherToken.approve(event.address, collateralTokenCount, { from: accounts[buyer] })
7072
for(let i = 0; i < 10; i++)
71-
await event.buyAllOutcomes(collateralTokenCount / 10, { from: accounts[buyer] })
73+
await event.buyAllOutcomes(collateralTokenCountDividedBy10, { from: accounts[buyer] })
7274
assert.equal(await etherToken.balanceOf.call(event.address), collateralTokenCount)
7375
assert.equal(await etherToken.balanceOf.call(accounts[buyer]), 0)
7476

75-
const outcomeToken1 = OutcomeToken.at(await event.outcomeTokens.call(0))
76-
const outcomeToken2 = OutcomeToken.at(await event.outcomeTokens.call(1))
77+
const outcomeToken1 = await OutcomeToken.at(await event.outcomeTokens.call(0))
78+
const outcomeToken2 = await OutcomeToken.at(await event.outcomeTokens.call(1))
7779
assert.equal(await outcomeToken1.balanceOf.call(accounts[buyer]), collateralTokenCount)
7880
assert.equal(await outcomeToken2.balanceOf.call(accounts[buyer]), collateralTokenCount)
7981

@@ -83,7 +85,7 @@ contract('Event', function (accounts) {
8385
//using parseInt and .valueOf because of strictEqual comparison in arrays.deepEqual()
8486
const outcomeTokenDistribution = await event.getOutcomeTokenDistribution.call(accounts[buyer])
8587
assert.deepEqual(
86-
[parseInt(outcomeTokenDistribution[0].valueOf(), 10), parseInt(outcomeTokenDistribution[1].valueOf(), 10)],
88+
[parseInt(outcomeTokenDistribution[0].valueOf(), 10).toString(), parseInt(outcomeTokenDistribution[1].valueOf(), 10).toString()],
8789
[collateralTokenCount, collateralTokenCount])
8890
})
8991

@@ -99,8 +101,8 @@ contract('Event', function (accounts) {
99101
assert.equal(await etherToken.balanceOf.call(event.address), collateralTokenCount)
100102
assert.equal(await etherToken.balanceOf.call(accounts[buyer]), 0)
101103

102-
const outcomeToken1 = OutcomeToken.at(await event.outcomeTokens.call(0))
103-
const outcomeToken2 = OutcomeToken.at(await event.outcomeTokens.call(1))
104+
const outcomeToken1 = await OutcomeToken.at(await event.outcomeTokens.call(0))
105+
const outcomeToken2 = await OutcomeToken.at(await event.outcomeTokens.call(1))
104106
assert.equal(await outcomeToken1.balanceOf.call(accounts[buyer]), collateralTokenCount)
105107
assert.equal(await outcomeToken2.balanceOf.call(accounts[buyer]), collateralTokenCount)
106108

@@ -115,7 +117,7 @@ contract('Event', function (accounts) {
115117
assert.equal(await event.isOutcomeSet.call(),true)
116118

117119
//Redeem winnings for buyer account
118-
const buyerWinnings = utils.getParamFromTxEvent(
120+
const buyerWinnings = await utils.getParamFromTxEvent(
119121
await event.redeemWinnings({ from: accounts[buyer] }), 'winnings')
120122
assert.equal(buyerWinnings.valueOf(), collateralTokenCount)
121123
assert.equal(await outcomeToken1.balanceOf.call(accounts[buyer]), collateralTokenCount)
@@ -124,7 +126,7 @@ contract('Event', function (accounts) {
124126
})
125127

126128
it('should buy, set, and redeem outcomes for scalar event', async () => {
127-
const scalarEvent = utils.getParamFromTxEvent(
129+
const scalarEvent = await utils.getParamFromTxEvent(
128130
await eventFactory.createScalarEvent(etherToken.address, oracle.address, -100, 100),
129131
'scalarEvent', ScalarEvent
130132
)
@@ -139,8 +141,8 @@ contract('Event', function (accounts) {
139141
assert.equal(await etherToken.balanceOf.call(scalarEvent.address), collateralTokenCount)
140142
assert.equal(await etherToken.balanceOf.call(accounts[buyer]), 0)
141143

142-
const outcomeToken1 = OutcomeToken.at(await scalarEvent.outcomeTokens(0))
143-
const outcomeToken2 = OutcomeToken.at(await scalarEvent.outcomeTokens(1))
144+
const outcomeToken1 = await OutcomeToken.at(await scalarEvent.outcomeTokens(0))
145+
const outcomeToken2 = await OutcomeToken.at(await scalarEvent.outcomeTokens(1))
144146
assert.equal(await outcomeToken1.balanceOf.call(accounts[buyer]), collateralTokenCount)
145147
assert.equal(await outcomeToken2.balanceOf.call(accounts[buyer]), collateralTokenCount)
146148

@@ -155,7 +157,7 @@ contract('Event', function (accounts) {
155157
assert.equal(await scalarEvent.isOutcomeSet.call(), true)
156158

157159
//Redeem winnings for buyer account
158-
const buyerWinnings = utils.getParamFromTxEvent(
160+
const buyerWinnings = await utils.getParamFromTxEvent(
159161
await scalarEvent.redeemWinnings({ from: accounts[buyer] }), 'winnings')
160162
assert.equal(buyerWinnings.valueOf(), collateralTokenCount)
161163
assert.equal(await outcomeToken1.balanceOf.call(accounts[buyer]), 0)

0 commit comments

Comments
 (0)