-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathEventTickets.js
executable file
·144 lines (133 loc) · 5.2 KB
/
EventTickets.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
const EventTickets = artifacts.require("EventTickets");
contract("EventTickets", accounts => {
it("Testing initial contract variables", function(done) {
EventTickets.deployed() // accessing deployed EventTickets contract
.then(function(instance){
instance.quota.call()
.then(quota => {
assert.equal(
quota,
100,
"Initial tickets quota has to be 100!"
);
})
.then(function() {
return instance.numRegistrants.call();
})
.then(function(num) {
assert.equal(
num,
0,
"Initial number of registrants should be zero!"
);
return instance.organizer.call();
})
.then(function(organizer) {
assert.equal(
organizer,
accounts[0],
"Organiser doesn't match!");
done();
})
.catch(done);
});
});
it("Should issue a refund by owner only", function(done) {
EventTickets.deployed() // accessing deployed EventTickets contract
.then(function(instance) {
var ticketPrice = web3.utils.toWei('0.05', 'ether');
web3.eth.getBalance(instance.address)
.then(
function(initialBalance) {
instance.buyTicket({ from: accounts[1], value: ticketPrice })
.then(
function() {
return web3.eth.getBalance(instance.address)
})
.then(
function(newBalance) {
var difference = newBalance - initialBalance;
assert.equal(difference, ticketPrice, "Difference should be what was sent");
// Now try to issue refund as second user - should fail
return instance.refundTicket(accounts[1], ticketPrice, {from: accounts[1]});
})
.then(
function() {
assert.fail('Should never reach this code here: refundTicket should only allow owners access.');
})
.catch(
function() {
return web3.eth.getBalance(instance.address)
})
.then(
function(balance) {
assert.equal(balance, ticketPrice, "Balance should be unchanged");
// Now try to issue refund as organizer/owner - should work
return instance.refundTicket(accounts[1], ticketPrice, {from: accounts[0]});
})
.then(
function() {
return web3.eth.getBalance(instance.address)
})
.then(
function(postRefundBalance) {
assert.equal(postRefundBalance, initialBalance, "Balance should be initial balance");
done();
})
.catch(done);
});
}).catch(done);
});
it("Allow buy multiple times, refund one by one", function(done) {
EventTickets.deployed() // accessing deployed EventTickets contract
.then(function(instance) {
var ticketPrice = web3.utils.toWei('0.05', 'ether');
web3.eth.getBalance(instance.address)
.then(
function(initialBalance) {
instance.buyTicket({ from: accounts[1], value: ticketPrice })
.then(
function() {
return web3.eth.getBalance(instance.address)
})
.then(
function(balanceAfterFirstPurchase) {
assert.equal(balanceAfterFirstPurchase, ticketPrice, "Balance should be 1 ticket price");
// Buy ticket second time
return instance.buyTicket({ from: accounts[1], value: ticketPrice });
})
.then(
function() {
return web3.eth.getBalance(instance.address)
})
.then(
function(balanceAfterSecondPurchase) {
assert.equal(balanceAfterSecondPurchase, 2*ticketPrice, "Balance should be what was sent twice");
// Registrants paid should be 2 ticket prices
return instance.registrantsPaid.call(accounts[1])
})
.then(
function(registrantsPaid) {
assert.equal(registrantsPaid, 2*ticketPrice, "Difference should be what was sent twice");
// Now try to issue refund as organizer/owner - should refund 1 price
return instance.refundTicket(accounts[1], ticketPrice, {from: accounts[0]});
})
.then(
function() {
return web3.eth.getBalance(instance.address)
})
.then(
function(postRefundBalance) {
assert.equal(postRefundBalance, ticketPrice, "Balance should be 1 ticketPrice");
return instance.registrantsPaid.call(accounts[1])
})
.then(
function(registrantsPaid) {
assert.equal(registrantsPaid, ticketPrice, "The amount registrants paid should only decrease per 1 refund");
done();
})
.catch(done);
});
}).catch(done);
});
});