@@ -130,6 +130,64 @@ func TestTransferAction(t *testing.T) {
130130 }
131131}
132132
133+ // TestMultiTransfer shows an example of reusing the same store for multiple sequential action invocations.
134+ func TestMultiTransfer (t * testing.T ) {
135+ addrAlice := codectest .NewRandomAddress ()
136+ addrBob := codectest .NewRandomAddress ()
137+
138+ store := chaintest .NewInMemoryStore ()
139+ require .NoError (t , storage .SetBalance (context .Background (), store , addrAlice , 1 ))
140+
141+ tests := []chaintest.ActionTest {
142+ {
143+ Name : "TransferToBob" ,
144+ Actor : addrAlice ,
145+ Action : & Transfer {
146+ To : addrBob ,
147+ Value : 1 ,
148+ },
149+ State : store ,
150+ Assertion : func (ctx context.Context , t * testing.T , store state.Mutable ) {
151+ receiverBalance , err := storage .GetBalance (ctx , store , addrBob )
152+ require .NoError (t , err )
153+ require .Equal (t , receiverBalance , uint64 (1 ))
154+ senderBalance , err := storage .GetBalance (ctx , store , addrAlice )
155+ require .NoError (t , err )
156+ require .Equal (t , senderBalance , uint64 (0 ))
157+ },
158+ ExpectedOutputs : & TransferResult {
159+ SenderBalance : 0 ,
160+ ReceiverBalance : 1 ,
161+ },
162+ },
163+ {
164+ Name : "TransferToAlice" ,
165+ Actor : addrBob ,
166+ Action : & Transfer {
167+ To : addrAlice ,
168+ Value : 1 ,
169+ },
170+ State : store ,
171+ Assertion : func (ctx context.Context , t * testing.T , store state.Mutable ) {
172+ receiverBalance , err := storage .GetBalance (ctx , store , addrAlice )
173+ require .NoError (t , err )
174+ require .Equal (t , receiverBalance , uint64 (1 ))
175+ senderBalance , err := storage .GetBalance (ctx , store , addrBob )
176+ require .NoError (t , err )
177+ require .Equal (t , senderBalance , uint64 (0 ))
178+ },
179+ ExpectedOutputs : & TransferResult {
180+ SenderBalance : 0 ,
181+ ReceiverBalance : 1 ,
182+ },
183+ },
184+ }
185+
186+ for _ , tt := range tests {
187+ tt .Run (context .Background (), t )
188+ }
189+ }
190+
133191func BenchmarkSimpleTransfer (b * testing.B ) {
134192 setupRequire := require .New (b )
135193 to := codec .CreateAddress (0 , ids .GenerateTestID ())
0 commit comments