Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit e4fef18

Browse files
committed
[#1839] Fix dispute_resolution conversion to handle missing payouts
1 parent 6d45928 commit e4fef18

File tree

2 files changed

+66
-6
lines changed

2 files changed

+66
-6
lines changed

repo/dispute_resolution.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,25 @@ import (
1010
// turns them into their v5 counterpart.
1111
func ToV5DisputeResolution(disputeResolution *pb.DisputeResolution) *pb.DisputeResolution {
1212
newDisputeResolution := proto.Clone(disputeResolution).(*pb.DisputeResolution)
13+
if disputeResolution.Payout == nil {
14+
return newDisputeResolution
15+
}
1316

14-
if disputeResolution.Payout.BuyerOutput.Amount != 0 && disputeResolution.Payout.BuyerOutput.BigAmount == "" {
17+
if disputeResolution.Payout.BuyerOutput != nil &&
18+
disputeResolution.Payout.BuyerOutput.Amount != 0 &&
19+
disputeResolution.Payout.BuyerOutput.BigAmount == "" {
1520
newDisputeResolution.Payout.BuyerOutput.BigAmount = big.NewInt(int64(disputeResolution.Payout.BuyerOutput.Amount)).String()
1621
newDisputeResolution.Payout.BuyerOutput.Amount = 0
1722
}
18-
if disputeResolution.Payout.VendorOutput.Amount != 0 && disputeResolution.Payout.VendorOutput.BigAmount == "" {
23+
if disputeResolution.Payout.VendorOutput != nil &&
24+
disputeResolution.Payout.VendorOutput.Amount != 0 &&
25+
disputeResolution.Payout.VendorOutput.BigAmount == "" {
1926
newDisputeResolution.Payout.VendorOutput.BigAmount = big.NewInt(int64(disputeResolution.Payout.VendorOutput.Amount)).String()
2027
newDisputeResolution.Payout.VendorOutput.Amount = 0
2128
}
22-
if disputeResolution.Payout.ModeratorOutput.Amount != 0 && disputeResolution.Payout.ModeratorOutput.BigAmount == "" {
29+
if disputeResolution.Payout.ModeratorOutput != nil &&
30+
disputeResolution.Payout.ModeratorOutput.Amount != 0 &&
31+
disputeResolution.Payout.ModeratorOutput.BigAmount == "" {
2332
newDisputeResolution.Payout.ModeratorOutput.BigAmount = big.NewInt(int64(disputeResolution.Payout.ModeratorOutput.Amount)).String()
2433
newDisputeResolution.Payout.ModeratorOutput.Amount = 0
2534
}

repo/dispute_resolution_test.go

Lines changed: 54 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
package repo
1+
package repo_test
22

33
import (
4-
"github.com/OpenBazaar/openbazaar-go/pb"
54
"testing"
5+
6+
"github.com/OpenBazaar/openbazaar-go/pb"
7+
"github.com/OpenBazaar/openbazaar-go/repo"
68
)
79

810
func TestToV5DisputeResolution(t *testing.T) {
@@ -20,7 +22,7 @@ func TestToV5DisputeResolution(t *testing.T) {
2022
},
2123
},
2224
}
23-
newDisputeResolution = ToV5DisputeResolution(disputeResolution)
25+
newDisputeResolution = repo.ToV5DisputeResolution(disputeResolution)
2426
expected = "10000"
2527
)
2628

@@ -44,3 +46,52 @@ func TestToV5DisputeResolution(t *testing.T) {
4446
t.Errorf("Expected Amount of 0, got %d", newDisputeResolution.Payout.ModeratorOutput.Amount)
4547
}
4648
}
49+
50+
func TestToV5DisputeResolutionHandlesMissingOutputs(t *testing.T) {
51+
var (
52+
examples = []*pb.DisputeResolution{
53+
{ // missing BuyerOutput
54+
Payout: &pb.DisputeResolution_Payout{
55+
BuyerOutput: nil,
56+
VendorOutput: &pb.DisputeResolution_Payout_Output{
57+
Amount: 10000,
58+
},
59+
ModeratorOutput: &pb.DisputeResolution_Payout_Output{
60+
Amount: 10000,
61+
},
62+
},
63+
},
64+
{ // missing VendorOutput
65+
Payout: &pb.DisputeResolution_Payout{
66+
BuyerOutput: &pb.DisputeResolution_Payout_Output{
67+
Amount: 10000,
68+
},
69+
VendorOutput: nil,
70+
ModeratorOutput: &pb.DisputeResolution_Payout_Output{
71+
Amount: 10000,
72+
},
73+
},
74+
},
75+
{ // missing ModeratorOutput
76+
Payout: &pb.DisputeResolution_Payout{
77+
BuyerOutput: &pb.DisputeResolution_Payout_Output{
78+
Amount: 10000,
79+
},
80+
VendorOutput: &pb.DisputeResolution_Payout_Output{
81+
Amount: 10000,
82+
},
83+
ModeratorOutput: nil,
84+
},
85+
},
86+
}
87+
)
88+
89+
for _, e := range examples {
90+
repo.ToV5DisputeResolution(e)
91+
}
92+
}
93+
94+
func TestToV5DisputeResolutionHandlesMissingPayout(t *testing.T) {
95+
var example = &pb.DisputeResolution{Payout: nil}
96+
repo.ToV5DisputeResolution(example)
97+
}

0 commit comments

Comments
 (0)