Search Apps Documentation Source Content File Folder Download Copy Actions Download

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}