-
Notifications
You must be signed in to change notification settings - Fork 3
/
response.js
219 lines (174 loc) · 7 KB
/
response.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
const FuelPrice = artifacts.require("FuelPrice.sol");
const YoutubeViews = artifacts.require("YoutubeViews.sol");
const KrakenPrice = artifacts.require("KrakenPriceTicker.sol");
const web3 = new (require('web3'))();
contract('FuelPrice', accounts => {
// define variable to hold the instance of our Template.sol contract
let fuelPrice
// use fresh contract for each test
beforeEach('Setup contract for each test', async function () {
fuelPrice = await FuelPrice.new({ value: web3.utils.toWei("1", "ether") })
})
// check that it sends a query and receives a response
it('sends a diesel price query and receives a response', async function () {
// set this test to timeout after 1 minute
this.timeout(60 * 1000)
// call the getRandomNumber function
// make sure to send enough Ether and to set gas limit sufficiently high
const result = await fuelPrice.updateDiesel({
from: accounts[0],
value: web3.utils.toWei('1', 'ether'),
gas: '5000000',
})
// Method 1 to check for events: loop through the "result" variable
// look for the NewOraclizeQuery event to make sure query sent
let testPassed = false // variable to hold status of result
for (let i = 0; i < result.logs.length; i++) {
let log = result.logs[i]
if (log.event === 'NewOraclizeQuery') {
testPassed = true
}
}
assert(testPassed, '"NewOraclizeQuery" event not found')
// Method 2 to check for events: listen for them with .watch()
// listen for LogResultReceived event to check for Oraclize's call to _callback
// define events we want to listen for
const NewPrice = fuelPrice.NewPrice()
// create promise so Mocha waits for value to be returned
let checkForNumber = new Promise((resolve, reject) => {
// watch for our LogResultReceived event
NewPrice.watch(async function (error, result) {
if (error) {
reject(error)
}
// template.randomNumber() returns a BigNumber object
const bigNumber = await fuelPrice.dieselPriceUSD.call()
// convert BigNumber to ordinary number
const dieselPriceUSD = bigNumber.toNumber()
// stop watching event and resolve promise
NewPrice.stopWatching()
resolve(dieselPriceUSD)
}) // end LogResultReceived.watch()
}) // end new Promise
// call promise and wait for result
const dieselPriceUSD = await checkForNumber
// ensure result is within our query's min/max values
assert.notEqual(dieselPriceUSD, 0, 'Diesel price was zero.')
});
// check that it sends a query and receives a response
it('sends an electricity price query and receives a response', async function () {
// set this test to timeout after 1 minute
this.timeout(60 * 1000)
// call the getRandomNumber function
// make sure to send enough Ether and to set gas limit sufficiently high
const result = await fuelPrice.updateElectric({
from: accounts[0],
value: web3.utils.toWei('1', 'ether'),
gas: '5000000',
})
// Method 1 to check for events: loop through the "result" variable
// look for the NewOraclizeQuery event to make sure query sent
let testPassed = false // variable to hold status of result
for (let i = 0; i < result.logs.length; i++) {
let log = result.logs[i]
if (log.event === 'NewOraclizeQuery') {
testPassed = true
}
}
assert(testPassed, '"NewOraclizeQuery" event not found')
// Method 2 to check for events: listen for them with .watch()
// listen for LogResultReceived event to check for Oraclize's call to _callback
// define events we want to listen for
const NewPrice = fuelPrice.NewPrice()
// create promise so Mocha waits for value to be returned
let checkForNumber = new Promise((resolve, reject) => {
// watch for our LogResultReceived event
NewPrice.watch(async function (error, result) {
if (error) {
reject(error)
}
// template.randomNumber() returns a BigNumber object
const bigNumber = await fuelPrice.electricPriceUSD.call()
// convert BigNumber to ordinary number
const electricPriceUSD = bigNumber.toNumber()
// stop watching event and resolve promise
NewPrice.stopWatching()
resolve(electricPriceUSD)
}) // end LogResultReceived.watch()
}) // end new Promise
// call promise and wait for result
const electricPriceUSD = await checkForNumber
// ensure result is within our query's min/max values
assert.notEqual(electricPriceUSD, 0, 'Electricity price was zero.')
});
});
contract('YoutubeViews', accounts => {
let youtubeViews
beforeEach('Setup contract for each test', async function () {
youtubeViews = await YoutubeViews.new()
})
it('queries youtube views and receives a response', async function () {
this.timeout(60 * 1000)
const result = await youtubeViews.update({
from: accounts[0],
value: web3.utils.toWei('0.1', 'ether'),
gas: '5000000',
})
let testPassed = false
for (let i = 0; i < result.logs.length; i++) {
let log = result.logs[i]
if (log.event === 'NewOraclizeQuery') {
testPassed = true
}
}
assert(testPassed, '"NewOraclizeQuery" event not found')
const NewYoutubeViewsCount = youtubeViews.NewYoutubeViewsCount()
let checkForNumber = new Promise((resolve, reject) => {
NewYoutubeViewsCount.watch(async function (error, result) {
if (error) {
reject(error)
}
const views = await youtubeViews.viewsCount.call()
NewYoutubeViewsCount.stopWatching()
resolve(views)
})
})
const views = await checkForNumber
assert.notEqual(views, "", 'Gangnam style viewcount was zero. How can it be?')
});
});
contract('KrakenPriceTicker', accounts => {
let krakenPriceTicker
beforeEach('Setup contract for each test', async function () {
krakenPriceTicker = await KrakenPrice.new({value: web3.utils.toWei("1", "ether") })
})
it('sends a kraken price query and receives a response after 60 sec', async function () {
this.timeout(120 * 1000)
const result = await krakenPriceTicker.update({
from: accounts[0],
value: web3.utils.toWei('0.5', 'ether'),
gas: '5000000',
})
let testPassed = false
for (let i = 0; i < result.logs.length; i++) {
let log = result.logs[i]
if (log.event === 'NewOraclizeQuery') {
testPassed = true
}
}
assert(testPassed, '"NewOraclizeQuery" event not found')
const NewKrakenPriceTicker = krakenPriceTicker.NewKrakenPriceTicker()
let checkForNumber = new Promise((resolve, reject) => {
NewKrakenPriceTicker.watch(async function (error, result) {
if (error) {
reject(error)
}
const price = await krakenPriceTicker.priceETHXBT.call()
NewKrakenPriceTicker.stopWatching()
resolve(price)
})
})
const price = await checkForNumber
assert.notEqual(price, "", 'Price price was zero (empty).')
});
});