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}