1package protocol
2
3import "testing"
4
5func TestUIReceiptValidation(t *testing.T) {
6 for _, test := range []struct {
7 name string
8 receipt UIReceipt
9 valid bool
10 }{
11 {"processed", UIReceipt{ActionID: 1, Epoch: 2, State: 3, ViewPublication: 4, Outcome: UIReceiptProcessed}, true},
12 {"unavailable", UIReceipt{ActionID: 1, Outcome: UIReceiptUnavailable}, true},
13 {"zero action", UIReceipt{Outcome: UIReceiptUnavailable}, false},
14 {"zero epoch", UIReceipt{ActionID: 1, State: 3, ViewPublication: 4, Outcome: UIReceiptProcessed}, false},
15 {"zero state", UIReceipt{ActionID: 1, Epoch: 2, ViewPublication: 4, Outcome: UIReceiptProcessed}, false},
16 {"zero publication", UIReceipt{ActionID: 1, Epoch: 2, State: 3, Outcome: UIReceiptProcessed}, false},
17 {"unknown outcome", UIReceipt{ActionID: 1, Epoch: 2, State: 3, ViewPublication: 4, Outcome: 3}, false},
18 {"unavailable invents boundary", UIReceipt{ActionID: 1, Epoch: 2, State: 3, ViewPublication: 4, Outcome: UIReceiptUnavailable}, false},
19 } {
20 t.Run(test.name, func(t *testing.T) {
21 if err := test.receipt.Validate(); (err == nil) != test.valid {
22 t.Fatalf("Validate() = %v, want valid=%v", err, test.valid)
23 }
24 })
25 }
26}