1
1
package aptos
2
2
3
3
import (
4
- "github.com/stretchr/testify/assert"
4
+ "encoding/json"
5
+ "fmt"
6
+ "net/http"
7
+ "net/http/httptest"
8
+ "strconv"
5
9
"testing"
6
10
"time"
11
+
12
+ "github.com/stretchr/testify/assert"
7
13
)
8
14
9
15
func TestPollForTransaction (t * testing.T ) {
@@ -20,3 +26,94 @@ func TestPollForTransaction(t *testing.T) {
20
26
assert .Less (t , dt , 20 * time .Millisecond )
21
27
assert .Error (t , err )
22
28
}
29
+
30
+ func TestEventsByHandle (t * testing.T ) {
31
+ mockServer := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
32
+ if r .URL .Path == "/" {
33
+ // handle initial request from client
34
+ w .WriteHeader (http .StatusOK )
35
+ return
36
+ }
37
+
38
+ assert .Equal (t , "/accounts/0x0/events/0x2/transfer" , r .URL .Path )
39
+
40
+ start := r .URL .Query ().Get ("start" )
41
+ limit := r .URL .Query ().Get ("limit" )
42
+
43
+ startInt , _ := strconv .ParseUint (start , 10 , 64 )
44
+ limitInt , _ := strconv .ParseUint (limit , 10 , 64 )
45
+
46
+ events := make ([]map [string ]interface {}, 0 , limitInt )
47
+ for i := uint64 (0 ); i < limitInt ; i ++ {
48
+ events = append (events , map [string ]interface {}{
49
+ "type" : "0x1::coin::TransferEvent" ,
50
+ "guid" : map [string ]interface {}{
51
+ "creation_number" : "1" ,
52
+ "account_address" : AccountZero .String (),
53
+ },
54
+ "sequence_number" : strconv .FormatUint (startInt + i , 10 ),
55
+ "data" : map [string ]interface {}{
56
+ "amount" : fmt .Sprintf ("%d" , (startInt + i )* 100 ),
57
+ },
58
+ })
59
+ }
60
+
61
+ json .NewEncoder (w ).Encode (events )
62
+ }))
63
+ defer mockServer .Close ()
64
+
65
+ client , err := NewClient (NetworkConfig {
66
+ Name : "mocknet" ,
67
+ NodeUrl : mockServer .URL ,
68
+ })
69
+ assert .NoError (t , err )
70
+
71
+ t .Run ("pagination with concurrent fetching" , func (t * testing.T ) {
72
+ start := uint64 (0 )
73
+ limit := uint64 (150 )
74
+ events , err := client .EventsByHandle (
75
+ AccountZero ,
76
+ "0x2" ,
77
+ "transfer" ,
78
+ & start ,
79
+ & limit ,
80
+ )
81
+
82
+ assert .NoError (t , err )
83
+ assert .Len (t , events , 150 )
84
+ })
85
+
86
+ t .Run ("default page size when limit not provided" , func (t * testing.T ) {
87
+ events , err := client .EventsByHandle (
88
+ AccountZero ,
89
+ "0x2" ,
90
+ "transfer" ,
91
+ nil ,
92
+ nil ,
93
+ )
94
+
95
+ assert .NoError (t , err )
96
+ assert .Len (t , events , 100 )
97
+ assert .Equal (t , uint64 (99 ), events [99 ].SequenceNumber )
98
+ })
99
+
100
+ t .Run ("single page fetch" , func (t * testing.T ) {
101
+ start := uint64 (50 )
102
+ limit := uint64 (5 )
103
+ events , err := client .EventsByHandle (
104
+ AccountZero ,
105
+ "0x2" ,
106
+ "transfer" ,
107
+ & start ,
108
+ & limit ,
109
+ )
110
+
111
+ jsonBytes , _ := json .MarshalIndent (events , "" , " " )
112
+ t .Logf ("JSON Response: %s" , string (jsonBytes ))
113
+
114
+ assert .NoError (t , err )
115
+ assert .Len (t , events , 5 )
116
+ assert .Equal (t , uint64 (50 ), events [0 ].SequenceNumber )
117
+ assert .Equal (t , uint64 (54 ), events [4 ].SequenceNumber )
118
+ })
119
+ }
0 commit comments