lifetime_test.gno
3.32 Kb ยท 106 lines
1package lifetime
2
3import (
4 "chain"
5 "chain/runtime"
6 "testing"
7
8 "gno.land/p/nt/testutils"
9 "gno.land/p/nt/uassert"
10)
11
12var (
13 alice = testutils.TestAddress("alice")
14 bob = testutils.TestAddress("bob")
15 charlie = testutils.TestAddress("charlie")
16)
17
18func TestLifetimeSubscription(t *testing.T) {
19 testing.SetRealm(testing.NewUserRealm(alice))
20 ls := NewLifetimeSubscription(1000)
21
22 testing.SetOriginSend([]chain.Coin{{Denom: "ugnot", Amount: 1000}})
23 err := ls.Subscribe()
24 uassert.NoError(t, err, "Expected ProcessPayment to succeed")
25
26 err = ls.HasValidSubscription(runtime.CurrentRealm().Address())
27 uassert.NoError(t, err, "Expected Alice to have access")
28}
29
30func TestLifetimeSubscriptionGift(t *testing.T) {
31 testing.SetRealm(testing.NewUserRealm(alice))
32 ls := NewLifetimeSubscription(1000)
33
34 testing.SetOriginSend([]chain.Coin{{Denom: "ugnot", Amount: 1000}})
35 err := ls.GiftSubscription(bob)
36 uassert.NoError(t, err, "Expected ProcessPaymentGift to succeed for Bob")
37
38 err = ls.HasValidSubscription(bob)
39 uassert.NoError(t, err, "Expected Bob to have access")
40
41 err = ls.HasValidSubscription(charlie)
42 uassert.Error(t, err, "Expected Charlie to fail access check")
43}
44
45func TestUpdateAmountAuthorization(t *testing.T) {
46 testing.SetRealm(testing.NewUserRealm(alice))
47 ls := NewLifetimeSubscription(1000)
48
49 err := ls.UpdateAmount(2000)
50 uassert.NoError(t, err, "Expected Alice to succeed in updating amount")
51
52 testing.SetRealm(testing.NewUserRealm(bob))
53
54 err = ls.UpdateAmount(3000)
55 uassert.Error(t, err, "Expected Bob to fail when updating amount")
56}
57
58func TestIncorrectPaymentAmount(t *testing.T) {
59 testing.SetRealm(testing.NewUserRealm(alice))
60 ls := NewLifetimeSubscription(1000)
61
62 testing.SetOriginSend([]chain.Coin{{Denom: "ugnot", Amount: 500}})
63 err := ls.Subscribe()
64 uassert.Error(t, err, "Expected payment to fail with incorrect amount")
65}
66
67func TestMultipleSubscriptionAttempts(t *testing.T) {
68 testing.SetRealm(testing.NewUserRealm(alice))
69 ls := NewLifetimeSubscription(1000)
70
71 testing.SetOriginSend([]chain.Coin{{Denom: "ugnot", Amount: 1000}})
72 err := ls.Subscribe()
73 uassert.NoError(t, err, "Expected first subscription to succeed")
74
75 testing.SetOriginSend([]chain.Coin{{Denom: "ugnot", Amount: 1000}})
76 err = ls.Subscribe()
77 uassert.Error(t, err, "Expected second subscription to fail as Alice is already subscribed")
78}
79
80func TestGiftSubscriptionWithIncorrectAmount(t *testing.T) {
81 testing.SetRealm(testing.NewUserRealm(alice))
82 ls := NewLifetimeSubscription(1000)
83
84 testing.SetOriginSend([]chain.Coin{{Denom: "ugnot", Amount: 500}})
85 err := ls.GiftSubscription(bob)
86 uassert.Error(t, err, "Expected gift subscription to fail with incorrect amount")
87
88 err = ls.HasValidSubscription(bob)
89 uassert.Error(t, err, "Expected Bob to not have access after incorrect gift subscription")
90}
91
92func TestUpdateAmountEffectiveness(t *testing.T) {
93 testing.SetRealm(testing.NewUserRealm(alice))
94 ls := NewLifetimeSubscription(1000)
95
96 err := ls.UpdateAmount(2000)
97 uassert.NoError(t, err, "Expected Alice to succeed in updating amount")
98
99 testing.SetOriginSend([]chain.Coin{{Denom: "ugnot", Amount: 1000}})
100 err = ls.Subscribe()
101 uassert.Error(t, err, "Expected subscription to fail with old amount after update")
102
103 testing.SetOriginSend([]chain.Coin{{Denom: "ugnot", Amount: 2000}})
104 err = ls.Subscribe()
105 uassert.NoError(t, err, "Expected subscription to succeed with new amount")
106}