crowdfund_test.gno
1.86 Kb · 50 lines
1package crowdfund
2
3import (
4 "testing"
5
6 "gno.land/p/nt/uassert/v0"
7)
8
9func TestProgressBarAndPct(t *testing.T) {
10 uassert.Equal(t, "░░░░░░░░░░░░░░░░░░░░", progressBar(0, 100))
11 uassert.Equal(t, "▓▓▓▓▓▓▓▓▓▓░░░░░░░░░░", progressBar(50, 100))
12 uassert.Equal(t, "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓", progressBar(100, 100))
13 // over-funded is capped at full width
14 uassert.Equal(t, "▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓", progressBar(250, 100))
15 // zero goal never divides by zero
16 uassert.Equal(t, "░░░░░░░░░░░░░░░░░░░░", progressBar(10, 0))
17
18 uassert.Equal(t, 0, pct(0, 100))
19 uassert.Equal(t, 25, pct(25, 100))
20 uassert.Equal(t, 100, pct(100, 100))
21 uassert.Equal(t, 100, pct(500, 100)) // capped
22 uassert.Equal(t, 0, pct(5, 0)) // no goal
23}
24
25func TestState(t *testing.T) {
26 active := &Campaign{Goal: 100, Pledged: 10, Deadline: 100}
27 uassert.Equal(t, "Active", state(active, 50))
28 uassert.Equal(t, "Active", state(active, 100)) // deadline block still active
29
30 funded := &Campaign{Goal: 100, Pledged: 150, Deadline: 100}
31 uassert.Equal(t, "Funded", state(funded, 101))
32
33 claimed := &Campaign{Goal: 100, Pledged: 150, Deadline: 100, Claimed: true}
34 uassert.Equal(t, "Funded (claimed)", state(claimed, 101))
35
36 failed := &Campaign{Goal: 100, Pledged: 50, Deadline: 100}
37 uassert.Equal(t, "Failed", state(failed, 101))
38
39 // exactly meeting the goal counts as funded
40 exact := &Campaign{Goal: 100, Pledged: 100, Deadline: 100}
41 uassert.Equal(t, "Funded", state(exact, 200))
42}
43
44func TestKeyOrdering(t *testing.T) {
45 uassert.Equal(t, "000000000001", key(1))
46 uassert.Equal(t, "000000000042", key(42))
47 // zero-padded keys keep numeric order under lexical string sort
48 uassert.True(t, key(2) < key(10))
49 uassert.True(t, key(9) < key(100))
50}