OSDN Git Service

modify mergeAction to MergeSpendAction
[bytom/bytom.git] / account / builder_test.go
1 package account
2
3 import (
4         "testing"
5
6         "github.com/bytom/blockchain/txbuilder"
7         "github.com/bytom/protocol/bc"
8 )
9
10 func TestMergeSpendAction(t *testing.T) {
11         testBTM := &bc.AssetID{}
12         if err := testBTM.UnmarshalText([]byte("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff")); err != nil {
13                 t.Fatal(err)
14         }
15
16         testAssetID1 := &bc.AssetID{}
17         if err := testAssetID1.UnmarshalText([]byte("50ec80b6bc48073f6aa8fa045131a71213c33f3681203b15ddc2e4b81f1f4730")); err != nil {
18                 t.Fatal(err)
19         }
20
21         testAssetID2 := &bc.AssetID{}
22         if err := testAssetID2.UnmarshalText([]byte("43c6946d092b2959c1a82e90b282c68fca63e66de289048f6acd6cea9383c79c")); err != nil {
23                 t.Fatal(err)
24         }
25
26         cases := []struct {
27                 testActions     []txbuilder.Action
28                 wantActions     []txbuilder.Action
29                 testActionCount int
30                 wantActionCount int
31         }{
32                 {
33                         testActions: []txbuilder.Action{
34                                 txbuilder.Action(&spendAction{
35                                         AssetAmount: bc.AssetAmount{
36                                                 AssetId: testBTM,
37                                                 Amount:  100,
38                                         },
39                                         AccountID: "test_account",
40                                 }),
41                                 txbuilder.Action(&spendAction{
42                                         AssetAmount: bc.AssetAmount{
43                                                 AssetId: testBTM,
44                                                 Amount:  200,
45                                         },
46                                         AccountID: "test_account",
47                                 }),
48                                 txbuilder.Action(&spendAction{
49                                         AssetAmount: bc.AssetAmount{
50                                                 AssetId: testBTM,
51                                                 Amount:  300,
52                                         },
53                                         AccountID: "test_account",
54                                 }),
55                                 txbuilder.Action(&spendAction{
56                                         AssetAmount: bc.AssetAmount{
57                                                 AssetId: testAssetID1,
58                                                 Amount:  300,
59                                         },
60                                         AccountID: "test_account",
61                                 }),
62                         },
63                         wantActions: []txbuilder.Action{
64                                 txbuilder.Action(&spendAction{
65                                         AssetAmount: bc.AssetAmount{
66                                                 AssetId: testBTM,
67                                                 Amount:  600,
68                                         },
69                                         AccountID: "test_account",
70                                 }),
71                                 txbuilder.Action(&spendAction{
72                                         AssetAmount: bc.AssetAmount{
73                                                 AssetId: testAssetID1,
74                                                 Amount:  300,
75                                         },
76                                         AccountID: "test_account",
77                                 }),
78                         },
79                         testActionCount: 4,
80                         wantActionCount: 2,
81                 },
82                 {
83                         testActions: []txbuilder.Action{
84                                 txbuilder.Action(&spendAction{
85                                         AssetAmount: bc.AssetAmount{
86                                                 AssetId: testBTM,
87                                                 Amount:  100,
88                                         },
89                                         AccountID: "test_account",
90                                 }),
91                                 txbuilder.Action(&spendAction{
92                                         AssetAmount: bc.AssetAmount{
93                                                 AssetId: testAssetID1,
94                                                 Amount:  200,
95                                         },
96                                         AccountID: "test_account",
97                                 }),
98                                 txbuilder.Action(&spendAction{
99                                         AssetAmount: bc.AssetAmount{
100                                                 AssetId: testBTM,
101                                                 Amount:  500,
102                                         },
103                                         AccountID: "test_account",
104                                 }),
105                                 txbuilder.Action(&spendAction{
106                                         AssetAmount: bc.AssetAmount{
107                                                 AssetId: testAssetID1,
108                                                 Amount:  300,
109                                         },
110                                         AccountID: "test_account",
111                                 }),
112                         },
113                         wantActions: []txbuilder.Action{
114                                 txbuilder.Action(&spendAction{
115                                         AssetAmount: bc.AssetAmount{
116                                                 AssetId: testBTM,
117                                                 Amount:  600,
118                                         },
119                                         AccountID: "test_account",
120                                 }),
121                                 txbuilder.Action(&spendAction{
122                                         AssetAmount: bc.AssetAmount{
123                                                 AssetId: testAssetID1,
124                                                 Amount:  500,
125                                         },
126                                         AccountID: "test_account",
127                                 }),
128                         },
129                         testActionCount: 4,
130                         wantActionCount: 2,
131                 },
132                 {
133                         testActions: []txbuilder.Action{
134                                 txbuilder.Action(&spendAction{
135                                         AssetAmount: bc.AssetAmount{
136                                                 AssetId: testBTM,
137                                                 Amount:  100,
138                                         },
139                                         AccountID: "test_account",
140                                 }),
141                                 txbuilder.Action(&spendAction{
142                                         AssetAmount: bc.AssetAmount{
143                                                 AssetId: testAssetID1,
144                                                 Amount:  200,
145                                         },
146                                         AccountID: "test_account",
147                                 }),
148                                 txbuilder.Action(&spendAction{
149                                         AssetAmount: bc.AssetAmount{
150                                                 AssetId: testAssetID2,
151                                                 Amount:  300,
152                                         },
153                                         AccountID: "test_account",
154                                 }),
155                                 txbuilder.Action(&spendAction{
156                                         AssetAmount: bc.AssetAmount{
157                                                 AssetId: testAssetID1,
158                                                 Amount:  300,
159                                         },
160                                         AccountID: "test_account",
161                                 }),
162                                 txbuilder.Action(&spendAction{
163                                         AssetAmount: bc.AssetAmount{
164                                                 AssetId: testAssetID2,
165                                                 Amount:  500,
166                                         },
167                                         AccountID: "test_account",
168                                 }),
169                         },
170                         wantActions: []txbuilder.Action{
171                                 txbuilder.Action(&spendAction{
172                                         AssetAmount: bc.AssetAmount{
173                                                 AssetId: testBTM,
174                                                 Amount:  100,
175                                         },
176                                         AccountID: "test_account",
177                                 }),
178                                 txbuilder.Action(&spendAction{
179                                         AssetAmount: bc.AssetAmount{
180                                                 AssetId: testAssetID1,
181                                                 Amount:  500,
182                                         },
183                                         AccountID: "test_account",
184                                 }),
185                                 txbuilder.Action(&spendAction{
186                                         AssetAmount: bc.AssetAmount{
187                                                 AssetId: testAssetID2,
188                                                 Amount:  800,
189                                         },
190                                         AccountID: "test_account",
191                                 }),
192                         },
193                         testActionCount: 5,
194                         wantActionCount: 3,
195                 },
196                 {
197                         testActions: []txbuilder.Action{
198                                 txbuilder.Action(&spendAction{
199                                         AssetAmount: bc.AssetAmount{
200                                                 AssetId: testBTM,
201                                                 Amount:  100,
202                                         },
203                                         AccountID: "test_account",
204                                 }),
205                                 txbuilder.Action(&spendAction{
206                                         AssetAmount: bc.AssetAmount{
207                                                 AssetId: testBTM,
208                                                 Amount:  200,
209                                         },
210                                         AccountID: "test_account1",
211                                 }),
212                                 txbuilder.Action(&spendAction{
213                                         AssetAmount: bc.AssetAmount{
214                                                 AssetId: testBTM,
215                                                 Amount:  500,
216                                         },
217                                         AccountID: "test_account",
218                                 }),
219                                 txbuilder.Action(&spendAction{
220                                         AssetAmount: bc.AssetAmount{
221                                                 AssetId: testAssetID1,
222                                                 Amount:  300,
223                                         },
224                                         AccountID: "test_account1",
225                                 }),
226                         },
227                         wantActions: []txbuilder.Action{
228                                 txbuilder.Action(&spendAction{
229                                         AssetAmount: bc.AssetAmount{
230                                                 AssetId: testBTM,
231                                                 Amount:  600,
232                                         },
233                                         AccountID: "test_account",
234                                 }),
235                                 txbuilder.Action(&spendAction{
236                                         AssetAmount: bc.AssetAmount{
237                                                 AssetId: testBTM,
238                                                 Amount:  200,
239                                         },
240                                         AccountID: "test_account1",
241                                 }),
242                                 txbuilder.Action(&spendAction{
243                                         AssetAmount: bc.AssetAmount{
244                                                 AssetId: testAssetID1,
245                                                 Amount:  300,
246                                         },
247                                         AccountID: "test_account1",
248                                 }),
249                         },
250                         testActionCount: 4,
251                         wantActionCount: 3,
252                 },
253                 {
254                         testActions: []txbuilder.Action{
255                                 txbuilder.Action(&spendAction{
256                                         AssetAmount: bc.AssetAmount{
257                                                 AssetId: testBTM,
258                                                 Amount:  100,
259                                         },
260                                         AccountID: "test_account",
261                                 }),
262                                 txbuilder.Action(&spendAction{
263                                         AssetAmount: bc.AssetAmount{
264                                                 AssetId: testAssetID1,
265                                                 Amount:  200,
266                                         },
267                                         AccountID: "test_account1",
268                                 }),
269                                 txbuilder.Action(&spendAction{
270                                         AssetAmount: bc.AssetAmount{
271                                                 AssetId: testAssetID2,
272                                                 Amount:  300,
273                                         },
274                                         AccountID: "test_account2",
275                                 }),
276                         },
277                         wantActions: []txbuilder.Action{
278                                 txbuilder.Action(&spendAction{
279                                         AssetAmount: bc.AssetAmount{
280                                                 AssetId: testBTM,
281                                                 Amount:  100,
282                                         },
283                                         AccountID: "test_account",
284                                 }),
285                                 txbuilder.Action(&spendAction{
286                                         AssetAmount: bc.AssetAmount{
287                                                 AssetId: testAssetID1,
288                                                 Amount:  200,
289                                         },
290                                         AccountID: "test_account1",
291                                 }),
292                                 txbuilder.Action(&spendAction{
293                                         AssetAmount: bc.AssetAmount{
294                                                 AssetId: testAssetID2,
295                                                 Amount:  300,
296                                         },
297                                         AccountID: "test_account2",
298                                 }),
299                         },
300                         testActionCount: 3,
301                         wantActionCount: 3,
302                 },
303         }
304
305         for _, c := range cases {
306                 gotActions := MergeSpendAction(c.testActions)
307
308                 gotMap := make(map[string]uint64)
309                 wantMap := make(map[string]uint64)
310                 for _, got := range gotActions {
311                         switch got := got.(type) {
312                         case *spendAction:
313                                 gotKey := got.AssetId.String() + got.AccountID
314                                 gotMap[gotKey] = got.Amount
315                         default:
316                                 continue
317                         }
318                 }
319
320                 for _, want := range c.wantActions {
321                         switch want := want.(type) {
322                         case *spendAction:
323                                 wantKey := want.AssetId.String() + want.AccountID
324                                 wantMap[wantKey] = want.Amount
325                         default:
326                                 continue
327                         }
328                 }
329
330                 for key := range gotMap {
331                         if gotMap[key] != wantMap[key] {
332                                 t.Fatalf("gotMap[%s]=%v, wantMap[%s]=%v", key, gotMap[key], key, wantMap[key])
333                         }
334                 }
335
336                 if len(gotActions) != c.wantActionCount {
337                         t.Fatalf("number of gotActions=%d, wantActions=%d", len(gotActions), c.wantActionCount)
338                 }
339         }
340 }