Skip to content

Commit 67e45d5

Browse files
committed
test: add unit tests for NftID
Signed-off-by: dosi <dosi.kolev@limechain.tech>
1 parent 62ab987 commit 67e45d5

1 file changed

Lines changed: 135 additions & 0 deletions

File tree

sdk/nft_id_unit_test.go

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
//go:build all || unit
2+
3+
package hiero
4+
5+
// SPDX-License-Identifier: Apache-2.0
6+
7+
import (
8+
"math"
9+
"testing"
10+
11+
"github.com/stretchr/testify/assert"
12+
"github.com/stretchr/testify/require"
13+
)
14+
15+
func TestUnitNftIDFromStringWithSlash(t *testing.T) {
16+
t.Parallel()
17+
18+
id, err := NftIDFromString("0.0.5005/10")
19+
require.NoError(t, err)
20+
require.Equal(t, TokenID{Shard: 0, Realm: 0, Token: 5005}, id.TokenID)
21+
require.Equal(t, int64(10), id.SerialNumber)
22+
require.Equal(t, "0.0.5005/10", id.String())
23+
}
24+
25+
func TestUnitNftIDFromStringWithLegacyAtSeparator(t *testing.T) {
26+
t.Parallel()
27+
28+
legacy, err := NftIDFromString("0.0.5005@10")
29+
require.NoError(t, err)
30+
31+
canonical, err := NftIDFromString("0.0.5005/10")
32+
require.NoError(t, err)
33+
34+
require.Equal(t, canonical, legacy)
35+
require.Equal(t, "0.0.5005/10", legacy.String())
36+
}
37+
38+
func TestUnitNftIDFromStringPreservesChecksum(t *testing.T) {
39+
t.Parallel()
40+
41+
tokenID, err := TokenIDFromString("0.0.123-esxsf")
42+
require.NoError(t, err)
43+
expected := tokenID.Nft(2)
44+
45+
for _, s := range []string{"0.0.123-esxsf/2", "0.0.123-esxsf@2"} {
46+
id, err := NftIDFromString(s)
47+
require.NoError(t, err)
48+
require.Equal(t, expected, id)
49+
}
50+
}
51+
52+
func TestUnitNftIDFromStringInvalid(t *testing.T) {
53+
t.Parallel()
54+
55+
tests := []struct {
56+
name string
57+
input string
58+
}{
59+
{"empty", ""},
60+
{"no separator", "0.0.5005"},
61+
{"missing token with slash", "/10"},
62+
{"missing token with at", "@10"},
63+
{"missing serial with slash", "0.0.5005/"},
64+
{"missing serial with at", "0.0.5005@"},
65+
{"too many slashes", "0.0.5005/10/2"},
66+
{"too many ats", "0.0.5005@10@2"},
67+
{"mixed separators", "0.0.5005@10/2"},
68+
{"serial not a number", "0.0.5005/notanumber"},
69+
{"serial out of range", "0.0.5005/9223372036854775808"},
70+
{"token not an id", "abc/10"},
71+
{"token missing parts", "0.0/10"},
72+
}
73+
74+
for _, tt := range tests {
75+
tt := tt
76+
t.Run(tt.name, func(t *testing.T) {
77+
t.Parallel()
78+
79+
var err error
80+
require.NotPanics(t, func() {
81+
_, err = NftIDFromString(tt.input)
82+
})
83+
require.Error(t, err)
84+
})
85+
}
86+
}
87+
88+
func TestUnitNftIDFromStringMaxSerialNumber(t *testing.T) {
89+
t.Parallel()
90+
91+
id, err := NftIDFromString("0.0.5005/9223372036854775807")
92+
require.NoError(t, err)
93+
require.Equal(t, int64(math.MaxInt64), id.SerialNumber)
94+
require.Equal(t, "0.0.5005/9223372036854775807", id.String())
95+
}
96+
97+
func TestUnitNftIDToStringWithChecksum(t *testing.T) {
98+
t.Parallel()
99+
100+
client, err := _NewMockClient()
101+
require.NoError(t, err)
102+
client.SetLedgerID(*NewLedgerIDTestnet())
103+
104+
id, err := NftIDFromString("0.0.123/2")
105+
require.NoError(t, err)
106+
107+
s, err := id.ToStringWithChecksum(*client)
108+
require.NoError(t, err)
109+
require.Equal(t, "0.0.123-esxsf/2", s)
110+
}
111+
112+
func TestUnitNftIDProtobuf(t *testing.T) {
113+
t.Parallel()
114+
115+
id := NftID{TokenID: TokenID{Shard: 1, Realm: 2, Token: 5005}, SerialNumber: 10}
116+
require.Equal(t, id, _NftIDFromProtobuf(id._ToProtobuf()))
117+
require.Equal(t, NftID{}, _NftIDFromProtobuf(nil))
118+
}
119+
120+
func TestUnitNftIDBytes(t *testing.T) {
121+
t.Parallel()
122+
123+
id := NftID{TokenID: TokenID{Shard: 1, Realm: 2, Token: 5005}, SerialNumber: 10}
124+
decoded, err := NftIDFromBytes(id.ToBytes())
125+
require.NoError(t, err)
126+
require.Equal(t, id, decoded)
127+
}
128+
129+
func TestUnitNftIDIsZero(t *testing.T) {
130+
t.Parallel()
131+
132+
assert.True(t, NftID{}._IsZero())
133+
assert.False(t, NftID{SerialNumber: 1}._IsZero())
134+
assert.False(t, NftID{TokenID: TokenID{Token: 5005}}._IsZero())
135+
}

0 commit comments

Comments
 (0)