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