Search Apps Documentation Source Content File Folder Download Copy Actions Download

denom_test.gno

5.01 Kb · 181 lines
  1package transfer_test
  2
  3import (
  4	"fmt"
  5	"strings"
  6	"testing"
  7
  8	"gno.land/p/nt/uassert/v0"
  9	"gno.land/p/nt/ufmt/v0"
 10	"gno.land/p/nt/urequire/v0"
 11	"gno.land/r/aib/ibc/apps/transfer"
 12)
 13
 14func TestDenomsValidate(t *testing.T) {
 15	testCases := []struct {
 16		name     string
 17		denom    transfer.Denom
 18		expError string
 19	}{
 20		{
 21			"valid trace with client id",
 22			transfer.NewDenom("uatone",
 23				transfer.NewHop("transfer", "07-tendermint-0"),
 24			),
 25			"",
 26		},
 27		{
 28			"valid multiple trace info",
 29			transfer.NewDenom("ugnot",
 30				transfer.NewHop("transfer", "channel-1"),
 31				transfer.NewHop("transfer", "channel-2"),
 32			),
 33			"",
 34		},
 35		{
 36			"empty base denom with trace",
 37			transfer.NewDenom("", transfer.NewHop("transfer", "channel-1")),
 38			"base denomination cannot be blank",
 39		},
 40	}
 41
 42	for _, tc := range testCases {
 43		t.Run(tc.name, func(t *testing.T) {
 44
 45			err := tc.denom.ValidateBasic()
 46
 47			if tc.expError == "" {
 48				urequire.NoError(t, err)
 49				return
 50			}
 51			urequire.ErrorContains(t, err, tc.expError)
 52		})
 53	}
 54}
 55
 56func TestExtractDenomFromPath(t *testing.T) {
 57	testCases := []struct {
 58		name     string
 59		fullPath string
 60		expDenom transfer.Denom
 61	}{
 62		{
 63			name:     "empty denom",
 64			fullPath: "",
 65			expDenom: transfer.NewDenom(""),
 66		},
 67		{
 68			name:     "base denom no slashes",
 69			fullPath: "gnot",
 70			expDenom: transfer.NewDenom("gnot"),
 71		},
 72		{
 73			name:     "base denom with trailing slash",
 74			fullPath: "gnot/",
 75			expDenom: transfer.NewDenom("gnot/"),
 76		},
 77		{
 78			name:     "base denom multiple trailing slash",
 79			fullPath: "foo///bar//baz/gnot/",
 80			expDenom: transfer.NewDenom("foo///bar//baz/gnot/"),
 81		},
 82		{
 83			name:     "ibc denom one hop",
 84			fullPath: "transfer/channel-0/gnot",
 85			expDenom: transfer.NewDenom("gnot", transfer.NewHop("transfer", "channel-0")),
 86		},
 87		{
 88			name:     "ibc denom one hop with client id",
 89			fullPath: "transfer/07-tendermint-0/gnot",
 90			expDenom: transfer.NewDenom("gnot", transfer.NewHop("transfer", "07-tendermint-0")),
 91		},
 92		{
 93			name:     "ibc denom one hop trailing slash",
 94			fullPath: "transfer/channel-0/gnot/",
 95			expDenom: transfer.NewDenom("gnot/", transfer.NewHop("transfer", "channel-0")),
 96		},
 97		{
 98			name:     "ibc denom one hop multiple slashes",
 99			fullPath: "transfer/channel-0//at/om/",
100			expDenom: transfer.NewDenom("/at/om/", transfer.NewHop("transfer", "channel-0")),
101		},
102		{
103			name:     "ibc denom two hops",
104			fullPath: "transfer/channel-0/transfer/channel-60/gnot",
105			expDenom: transfer.NewDenom("gnot", transfer.NewHop("transfer", "channel-0"), transfer.NewHop("transfer", "channel-60")),
106		},
107		{
108			name:     "ibc denom two hops trailing slash",
109			fullPath: "transfer/channel-0/transfer/channel-60/gnot/",
110			expDenom: transfer.NewDenom("gnot/", transfer.NewHop("transfer", "channel-0"), transfer.NewHop("transfer", "channel-60")),
111		},
112		{
113			name:     "empty prefix",
114			fullPath: "/ugnot",
115			expDenom: transfer.NewDenom("/ugnot"),
116		},
117		{
118			name:     "empty identifiers",
119			fullPath: "//ugnot",
120			expDenom: transfer.NewDenom("//ugnot"),
121		},
122		{
123			name:     "base denom with single '/'",
124			fullPath: "erc20/0x85bcBCd7e79Ec36f4fBBDc54F90C643d921151AA",
125			expDenom: transfer.NewDenom("erc20/0x85bcBCd7e79Ec36f4fBBDc54F90C643d921151AA"),
126		},
127		{
128			name:     "trace info and base denom with single '/'",
129			fullPath: "transfer/channel-1/erc20/0x85bcBCd7e79Ec36f4fBBDc54F90C643d921151AA",
130			expDenom: transfer.NewDenom("erc20/0x85bcBCd7e79Ec36f4fBBDc54F90C643d921151AA", transfer.NewHop("transfer", "channel-1")),
131		},
132		{
133			name:     "single trace identifier",
134			fullPath: "transfer/",
135			expDenom: transfer.NewDenom("transfer/"),
136		},
137		{
138			name:     "trace info with custom port",
139			fullPath: "customtransfer/channel-1/ugnot",
140			expDenom: transfer.NewDenom("ugnot", transfer.NewHop("customtransfer", "channel-1")),
141		},
142		{
143			name:     "invalid path (1)",
144			fullPath: "channel-1/transfer/ugnot",
145			expDenom: transfer.NewDenom("channel-1/transfer/ugnot"),
146		},
147		{
148			name:     "invalid path (2)",
149			fullPath: "transfer/channel-1",
150			expDenom: transfer.NewDenom("transfer/channel-1"),
151		},
152		{
153			name:     "invalid path (3)",
154			fullPath: "transfer/channel-1/transfer/channel-2",
155			expDenom: transfer.NewDenom("", transfer.NewHop("transfer", "channel-1"), transfer.NewHop("transfer", "channel-2")),
156		},
157		{
158			name:     "invalid path (4)",
159			fullPath: "transfer/channelToA/ugnot",
160			expDenom: transfer.NewDenom("transfer/channelToA/ugnot"),
161		},
162	}
163	for _, tc := range testCases {
164		t.Run(tc.name, func(t *testing.T) {
165
166			denom := transfer.ExtractDenomFromPath(tc.fullPath)
167
168			fmt.Println(tc.fullPath, strings.Contains(denom.Base, "/"))
169
170			uassert.Equal(t, tc.expDenom.Base, denom.Base)
171			if uassert.Equal(t, len(tc.expDenom.Trace), len(denom.Trace), "trace: unexpected number of hops") {
172				for i := range tc.expDenom.Trace {
173					uassert.Equal(t, tc.expDenom.Trace[i].PortId, denom.Trace[i].PortId,
174						ufmt.Sprintf("unexpected hop #%d portId", i))
175					uassert.Equal(t, tc.expDenom.Trace[i].ClientId, denom.Trace[i].ClientId,
176						ufmt.Sprintf("unexpected hop #%d channelId", i))
177				}
178			}
179		})
180	}
181}