@@ -46,6 +46,9 @@ var _ = Describe("Prover", func() {
46
46
tokenTransaction * token.TokenTransaction
47
47
marshaledResponse * token.SignedCommandResponse
48
48
49
+ transferRequest * token.TransferRequest
50
+ trTokenTransaction * token.TokenTransaction
51
+
49
52
listRequest * token.ListRequest
50
53
unspentTokens * token.UnspentTokens
51
54
transactorTokens []* token.TokenOutput
@@ -72,13 +75,34 @@ var _ = Describe("Prover", func() {
72
75
fakeIssuer = & mock.Issuer {}
73
76
fakeIssuer .RequestImportReturns (tokenTransaction , nil )
74
77
78
+ trTokenTransaction = & token.TokenTransaction {
79
+ Action : & token.TokenTransaction_PlainAction {
80
+ PlainAction : & token.PlainTokenAction {
81
+ Data : & token.PlainTokenAction_PlainTransfer {
82
+ PlainTransfer : & token.PlainTransfer {
83
+ Inputs : []* token.InputId {{
84
+ TxId : []byte ("txid" ),
85
+ Index : 0 ,
86
+ }},
87
+ Outputs : []* token.PlainOutput {{
88
+ Owner : []byte ("token-owner" ),
89
+ Type : "PDQ" ,
90
+ Quantity : 777 ,
91
+ }},
92
+ },
93
+ },
94
+ },
95
+ },
96
+ }
97
+ fakeTransactor = & mock.Transactor {}
98
+ fakeTransactor .RequestTransferReturns (trTokenTransaction , nil )
99
+
75
100
transactorTokens = []* token.TokenOutput {
76
101
{Id : []byte ("idaz" ), Type : "typeaz" , Quantity : 135 },
77
102
{Id : []byte ("idby" ), Type : "typeby" , Quantity : 79 },
78
103
}
79
104
unspentTokens = & token.UnspentTokens {Tokens : transactorTokens }
80
105
81
- fakeTransactor = & mock.Transactor {}
82
106
fakeTransactor .ListTokensReturns (unspentTokens , nil )
83
107
84
108
fakeTMSManager = & mock.TMSManager {}
@@ -119,6 +143,15 @@ var _ = Describe("Prover", func() {
119
143
Signature : []byte ("command-signature" ),
120
144
}
121
145
146
+ transferRequest = & token.TransferRequest {
147
+ Credential : []byte ("credential" ),
148
+ TokenIds : [][]byte {},
149
+ Shares : []* token.RecipientTransferShare {{
150
+ Recipient : []byte ("recipient" ),
151
+ Quantity : 99 ,
152
+ }},
153
+ }
154
+
122
155
listRequest = & token.ListRequest {
123
156
Credential : []byte ("credential" ),
124
157
}
@@ -281,6 +314,55 @@ var _ = Describe("Prover", func() {
281
314
})
282
315
})
283
316
317
+ Describe ("ProcessCommand_RequestImport" , func () {
318
+ It ("returns a signed command response" , func () {
319
+ resp , err := prover .ProcessCommand (context .Background (), signedCommand )
320
+ Expect (err ).NotTo (HaveOccurred ())
321
+ Expect (resp ).To (Equal (marshaledResponse ))
322
+
323
+ Expect (fakeMarshaler .MarshalCommandResponseCallCount ()).To (Equal (1 ))
324
+ cmd , payload := fakeMarshaler .MarshalCommandResponseArgsForCall (0 )
325
+ Expect (cmd ).To (Equal (marshaledCommand ))
326
+ Expect (payload ).To (Equal (& token.CommandResponse_TokenTransaction {
327
+ TokenTransaction : tokenTransaction ,
328
+ }))
329
+ })
330
+ })
331
+
332
+ Describe ("ProcessCommand_RequestTransfer" , func () {
333
+ BeforeEach (func () {
334
+ command = & token.Command {
335
+ Header : & token.Header {
336
+ ChannelId : "channel-id" ,
337
+ Creator : []byte ("creator" ),
338
+ Nonce : []byte ("nonce" ),
339
+ },
340
+ Payload : & token.Command_TransferRequest {
341
+ TransferRequest : transferRequest ,
342
+ },
343
+ }
344
+ marshaledCommand = ProtoMarshal (command )
345
+ signedCommand = & token.SignedCommand {
346
+ Command : marshaledCommand ,
347
+ Signature : []byte ("command-signature" ),
348
+ }
349
+ fakeMarshaler .MarshalCommandResponseReturns (marshaledResponse , nil )
350
+ })
351
+
352
+ It ("returns a signed command response" , func () {
353
+ resp , err := prover .ProcessCommand (context .Background (), signedCommand )
354
+ Expect (err ).NotTo (HaveOccurred ())
355
+ Expect (resp ).To (Equal (marshaledResponse ))
356
+
357
+ Expect (fakeMarshaler .MarshalCommandResponseCallCount ()).To (Equal (1 ))
358
+ cmd , payload := fakeMarshaler .MarshalCommandResponseArgsForCall (0 )
359
+ Expect (cmd ).To (Equal (marshaledCommand ))
360
+ Expect (payload ).To (Equal (& token.CommandResponse_TokenTransaction {
361
+ TokenTransaction : trTokenTransaction ,
362
+ }))
363
+ })
364
+ })
365
+
284
366
Describe ("Process RequestImport command" , func () {
285
367
It ("returns a signed command response" , func () {
286
368
resp , err := prover .ProcessCommand (context .Background (), signedCommand )
@@ -376,6 +458,53 @@ var _ = Describe("Prover", func() {
376
458
})
377
459
})
378
460
461
+ Describe ("RequestTransfer" , func () {
462
+ It ("gets a transactor" , func () {
463
+ _ , err := prover .RequestTransfer (context .Background (), command .Header , transferRequest )
464
+ Expect (err ).NotTo (HaveOccurred ())
465
+
466
+ Expect (fakeTMSManager .GetTransactorCallCount ()).To (Equal (1 ))
467
+ channel , cred , creator := fakeTMSManager .GetTransactorArgsForCall (0 )
468
+ Expect (channel ).To (Equal ("channel-id" ))
469
+ Expect (cred ).To (Equal ([]byte ("credential" )))
470
+ Expect (creator ).To (Equal ([]byte ("creator" )))
471
+ })
472
+
473
+ It ("uses the transactor to request a transfer" , func () {
474
+ resp , err := prover .RequestTransfer (context .Background (), command .Header , transferRequest )
475
+ Expect (err ).NotTo (HaveOccurred ())
476
+ Expect (resp ).To (Equal (& token.CommandResponse_TokenTransaction {
477
+ TokenTransaction : trTokenTransaction ,
478
+ }))
479
+
480
+ Expect (fakeTransactor .RequestTransferCallCount ()).To (Equal (1 ))
481
+ tr := fakeTransactor .RequestTransferArgsForCall (0 )
482
+ Expect (tr ).To (Equal (transferRequest ))
483
+ })
484
+
485
+ Context ("when the TMS manager fails to get a transactor" , func () {
486
+ BeforeEach (func () {
487
+ fakeTMSManager .GetTransactorReturns (nil , errors .New ("boing boing" ))
488
+ })
489
+
490
+ It ("retuns the error" , func () {
491
+ _ , err := prover .RequestTransfer (context .Background (), command .Header , transferRequest )
492
+ Expect (err ).To (MatchError ("boing boing" ))
493
+ })
494
+ })
495
+
496
+ Context ("when the transactor fails to transfer" , func () {
497
+ BeforeEach (func () {
498
+ fakeTransactor .RequestTransferReturns (nil , errors .New ("watermelon" ))
499
+ })
500
+
501
+ It ("retuns the error" , func () {
502
+ _ , err := prover .RequestTransfer (context .Background (), command .Header , transferRequest )
503
+ Expect (err ).To (MatchError ("watermelon" ))
504
+ })
505
+ })
506
+ })
507
+
379
508
Describe ("Issue tokens by a plain issuer" , func () {
380
509
var (
381
510
manager * server.Manager
0 commit comments