Skip to content

Commit

Permalink
validate json creation
Browse files Browse the repository at this point in the history
  • Loading branch information
notJoon committed Jan 9, 2025
1 parent 744999d commit 0484f69
Show file tree
Hide file tree
Showing 2 changed files with 120 additions and 0 deletions.
120 changes: 120 additions & 0 deletions gov/staker/api_staker_test.gno
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
package staker

import (
"std"
"testing"
"time"

"gno.land/p/demo/avl"
"gno.land/p/demo/json"
"gno.land/p/demo/testutils"
"gno.land/p/demo/uassert"
)

func TestGetLockedInfoByAddress(t *testing.T) {
addr := testutils.TestAddress("locked_info_test")

now := uint64(time.Now().Unix())
lockedGNSList := []lockedGNS{
{amount: 1000, unlock: now - 100}, // already unlocked
{amount: 2000, unlock: now + 100}, // still locked
{amount: 3000, unlock: now - 50}, // already unlocked
}
addrLockedGns.Set(addr.String(), lockedGNSList)

result := GetLockedInfoByAddress(addr)

node := json.Must(json.Unmarshal([]byte(result)))

uassert.True(t, node.HasKey("height"))
uassert.True(t, node.HasKey("now"))
uassert.True(t, node.HasKey("totalLocked"))
uassert.True(t, node.HasKey("claimableAmount"))

// summation of all the locked quantities
totalLocked, err := node.MustKey("totalLocked").GetString()
uassert.NoError(t, err)
uassert.Equal(t, totalLocked, "6000") // 1000 + 2000 + 3000 = 6000

claimableAmount, err := node.MustKey("claimableAmount").GetString()
uassert.NoError(t, err)
uassert.Equal(t, claimableAmount, "4000") // 1000 + 3000 = 4000
}

func TestGetLockedInfoByAddress_NoLocks(t *testing.T) {
addr := testutils.TestAddress("no_locks_test")

// no quantities are locked here
result := GetLockedInfoByAddress(addr)
uassert.Equal(t, result, "")
}

func TestGetLockedInfoByAddress_EmptyLocks(t *testing.T) {
addr := testutils.TestAddress("empty_locks_test")

addrLockedGns.Set(addr.String(), []lockedGNS{})

result := GetLockedInfoByAddress(addr)

node := json.Must(json.Unmarshal([]byte(result)))
uassert.True(t, node.HasKey("height"))
uassert.True(t, node.HasKey("now"))
uassert.True(t, node.HasKey("totalLocked"))
uassert.True(t, node.HasKey("claimableAmount"))

totalLocked, err := node.MustKey("totalLocked").GetString()
uassert.NoError(t, err)
uassert.Equal(t, totalLocked, "0")

claimableAmount, err := node.MustKey("claimableAmount").GetString()
uassert.NoError(t, err)
uassert.Equal(t, claimableAmount, "0")
}

func TestGetClaimableRewardByAddress(t *testing.T) {
addr := testutils.TestAddress("claimable_test")
userEmissionReward.Set(addr.String(), uint64(1000))

pfTree := avl.NewTree()
pfTree.Set("token1:token2", uint64(500))
pfTree.Set("token2:token3", uint64(300))
userProtocolFeeReward.Set(addr.String(), pfTree)

result := GetClaimableRewardByAddress(addr)

node := json.Must(json.Unmarshal([]byte(result)))

uassert.True(t, node.HasKey("height"))
uassert.True(t, node.HasKey("now"))

emissionReward, err := node.MustKey("emissionReward").GetString()
uassert.NoError(t, err)
uassert.Equal(t, emissionReward, "1000")

protocolFees := node.MustKey("protocolFees")
uassert.True(t, protocolFees.IsArray())

protocolFees.ArrayEach(func(i int, fee *json.Node) {
tokenPath, err := fee.MustKey("tokenPath").GetString()
uassert.NoError(t, err)

amount, err := fee.MustKey("amount").GetString()
uassert.NoError(t, err)

switch tokenPath {
case "token1:token2":
uassert.Equal(t, amount, "500")
case "token2:token3":
uassert.Equal(t, amount, "300")
default:
t.Errorf("unexpected tokenPath: %s", tokenPath)
}
})
}

func TestGetClaimableRewardByAddress_NoRewards(t *testing.T) {
addr := testutils.TestAddress("no_reward_test")

result := GetClaimableRewardByAddress(addr)
uassert.Equal(t, result, "")
}

0 comments on commit 0484f69

Please sign in to comment.