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

Commit a831cbd

Browse files
authored
Merge pull request #1025 from OpenBazaar/TS_payment_coin_and_coin_type
Payment coin and coin type
2 parents ef556d3 + 1889050 commit a831cbd

23 files changed

+1527
-261
lines changed

api/jsonapi_helpers_test.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ import (
1717
manet "gx/ipfs/QmRK2LxanhK2gZq6k6R7vk5ZoYZk8ULSSTB7FzDsMUX6CB/go-multiaddr-net"
1818
ma "gx/ipfs/QmWWQ2Txc2c6tqjsBpzg5Ar652cHPGNsQQp2SejkNmkUMb/go-multiaddr"
1919

20-
"github.com/op/go-logging"
2120
"os"
21+
22+
"github.com/op/go-logging"
2223
)
2324

2425
// testURIRoot is the root http URI to hit for testing
@@ -196,6 +197,21 @@ func errorResponseJSON(err error) string {
196197
return `{"success": false, "reason": "` + err.Error() + `"}`
197198
}
198199

200+
func httpGet(endpoint string) ([]byte, error) {
201+
req, err := buildRequest("GET", endpoint, "")
202+
if err != nil {
203+
return nil, err
204+
}
205+
resp, err := testHTTPClient.Do(req)
206+
if err != nil {
207+
return nil, err
208+
}
209+
if resp.StatusCode != 200 {
210+
return nil, err
211+
}
212+
return ioutil.ReadAll(resp.Body)
213+
}
214+
199215
func jsonFor(t *testing.T, fixture proto.Message) string {
200216
m := jsonpb.Marshaler{}
201217

api/jsonapi_test.go

+143
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,149 @@ func TestZECSalesCannotReleaseEscrow(t *testing.T) {
541541
}, dbSetup, nil)
542542
}
543543

544+
func TestSalesGet(t *testing.T) {
545+
sale := factory.NewSaleRecord()
546+
sale.Contract.VendorListings[0].Metadata.AcceptedCurrencies = []string{"BTC"}
547+
sale.Contract.VendorListings[0].Metadata.CoinType = "ZEC"
548+
sale.Contract.VendorListings[0].Metadata.ContractType = pb.Listing_Metadata_CRYPTOCURRENCY
549+
dbSetup := func(testRepo *test.Repository) error {
550+
return testRepo.DB.Sales().Put(sale.OrderID, *sale.Contract, sale.OrderState, false)
551+
}
552+
553+
runAPITestsWithSetup(t, apiTests{
554+
{"GET", "/ob/sales", "", 200, anyResponseJSON},
555+
}, dbSetup, nil)
556+
557+
respBytes, err := httpGet("/ob/sales")
558+
if err != nil {
559+
t.Fatal(err)
560+
}
561+
respObj := struct {
562+
Sales []repo.Sale `json:"sales"`
563+
}{}
564+
err = json.Unmarshal(respBytes, &respObj)
565+
if err != nil {
566+
t.Fatal(err)
567+
}
568+
569+
actualSale := respObj.Sales[0]
570+
571+
if actualSale.BuyerHandle != sale.Contract.BuyerOrder.BuyerID.Handle {
572+
t.Fatal("Incorrect buyerHandle:", actualSale.BuyerHandle, "\nwanted:", sale.Contract.BuyerOrder.BuyerID.Handle)
573+
}
574+
if actualSale.BuyerId != sale.Contract.BuyerOrder.BuyerID.PeerID {
575+
t.Fatal("Incorrect buyerId:", actualSale.BuyerId, "\nwanted:", sale.Contract.BuyerOrder.BuyerID.PeerID)
576+
}
577+
if actualSale.CoinType != sale.Contract.VendorListings[0].Metadata.CoinType {
578+
t.Fatal("Incorrect coinType:", actualSale.CoinType, "\nwanted:", sale.Contract.VendorListings[0].Metadata.CoinType)
579+
}
580+
if actualSale.OrderId != sale.OrderID {
581+
t.Fatal("Incorrect orderId:", actualSale.OrderId, "\nwanted:", sale.OrderID)
582+
}
583+
if actualSale.PaymentCoin != sale.Contract.VendorListings[0].Metadata.AcceptedCurrencies[0] {
584+
t.Fatal("Incorrect paymentCoin:", actualSale.PaymentCoin, "\nwanted:", sale.Contract.VendorListings[0].Metadata.AcceptedCurrencies[0])
585+
}
586+
if actualSale.ShippingAddress != sale.Contract.BuyerOrder.Shipping.Address {
587+
t.Fatal("Incorrect shippingAddress:", actualSale.ShippingAddress, "\nwanted:", sale.Contract.BuyerOrder.Shipping.Address)
588+
}
589+
if actualSale.ShippingName != sale.Contract.BuyerOrder.Shipping.ShipTo {
590+
t.Fatal("Incorrect shippingName:", actualSale.ShippingName, "\nwanted:", sale.Contract.BuyerOrder.Shipping.ShipTo)
591+
}
592+
if actualSale.State != sale.OrderState.String() {
593+
t.Fatal("Incorrect state:", actualSale.State, "\nwanted:", sale.OrderState.String())
594+
}
595+
}
596+
func TestPurchasesGet(t *testing.T) {
597+
purchase := factory.NewPurchaseRecord()
598+
purchase.Contract.VendorListings[0].Metadata.AcceptedCurrencies = []string{"BTC"}
599+
purchase.Contract.VendorListings[0].Metadata.CoinType = "ZEC"
600+
purchase.Contract.VendorListings[0].Metadata.ContractType = pb.Listing_Metadata_CRYPTOCURRENCY
601+
dbSetup := func(testRepo *test.Repository) error {
602+
return testRepo.DB.Purchases().Put(purchase.OrderID, *purchase.Contract, purchase.OrderState, false)
603+
}
604+
605+
runAPITestsWithSetup(t, apiTests{
606+
{"GET", "/ob/purchases", "", 200, anyResponseJSON},
607+
}, dbSetup, nil)
608+
609+
respBytes, err := httpGet("/ob/purchases")
610+
if err != nil {
611+
t.Fatal(err)
612+
}
613+
respObj := struct {
614+
Purchases []repo.Purchase `json:"purchases"`
615+
}{}
616+
err = json.Unmarshal(respBytes, &respObj)
617+
if err != nil {
618+
t.Fatal(err)
619+
}
620+
621+
actualPurchase := respObj.Purchases[0]
622+
623+
if actualPurchase.VendorHandle != purchase.Contract.VendorListings[0].VendorID.Handle {
624+
t.Fatal("Incorrect vendorHandle:", actualPurchase.VendorId, "\nwanted:", purchase.Contract.VendorListings[0].VendorID.Handle)
625+
}
626+
if actualPurchase.VendorId != purchase.Contract.VendorListings[0].VendorID.PeerID {
627+
t.Fatal("Incorrect vendorId:", actualPurchase.VendorId, "\nwanted:", purchase.Contract.VendorListings[0].VendorID.PeerID)
628+
}
629+
if actualPurchase.CoinType != purchase.Contract.VendorListings[0].Metadata.CoinType {
630+
t.Fatal("Incorrect coinType:", actualPurchase.CoinType, "\nwanted:", purchase.Contract.VendorListings[0].Metadata.CoinType)
631+
}
632+
if actualPurchase.OrderId != purchase.OrderID {
633+
t.Fatal("Incorrect orderId:", actualPurchase.OrderId, "\nwanted:", purchase.OrderID)
634+
}
635+
if actualPurchase.PaymentCoin != purchase.Contract.VendorListings[0].Metadata.AcceptedCurrencies[0] {
636+
t.Fatal("Incorrect paymentCoin:", actualPurchase.PaymentCoin, "\nwanted:", purchase.Contract.VendorListings[0].Metadata.AcceptedCurrencies[0])
637+
}
638+
if actualPurchase.ShippingAddress != purchase.Contract.BuyerOrder.Shipping.Address {
639+
t.Fatal("Incorrect shippingAddress:", actualPurchase.ShippingAddress, "\nwanted:", purchase.Contract.BuyerOrder.Shipping.Address)
640+
}
641+
if actualPurchase.ShippingName != purchase.Contract.BuyerOrder.Shipping.ShipTo {
642+
t.Fatal("Incorrect shippingName:", actualPurchase.ShippingName, "\nwanted:", purchase.Contract.BuyerOrder.Shipping.ShipTo)
643+
}
644+
if actualPurchase.State != purchase.OrderState.String() {
645+
t.Fatal("Incorrect state:", actualPurchase.State, "\nwanted:", purchase.OrderState.String())
646+
}
647+
}
648+
649+
func TestCasesGet(t *testing.T) {
650+
disputeCaseRecord := factory.NewDisputeCaseRecord()
651+
disputeCaseRecord.BuyerContract.VendorListings[0].Metadata.AcceptedCurrencies = []string{"BTC"}
652+
disputeCaseRecord.BuyerContract.VendorListings[0].Metadata.CoinType = "ZEC"
653+
disputeCaseRecord.BuyerContract.VendorListings[0].Metadata.ContractType = pb.Listing_Metadata_CRYPTOCURRENCY
654+
dbSetup := func(testRepo *test.Repository) error {
655+
return testRepo.DB.Cases().PutRecord(disputeCaseRecord)
656+
}
657+
658+
runAPITestsWithSetup(t, apiTests{
659+
{"GET", "/ob/cases", "", 200, anyResponseJSON},
660+
}, dbSetup, nil)
661+
662+
respBytes, err := httpGet("/ob/cases")
663+
if err != nil {
664+
t.Fatal(err)
665+
}
666+
respObj := struct {
667+
Cases []repo.Case `json:"cases"`
668+
}{}
669+
err = json.Unmarshal(respBytes, &respObj)
670+
if err != nil {
671+
t.Fatal(err)
672+
}
673+
674+
actualCase := respObj.Cases[0]
675+
676+
if actualCase.CoinType != disputeCaseRecord.BuyerContract.VendorListings[0].Metadata.CoinType {
677+
t.Fatal("Incorrect coinType:", actualCase.CoinType, "\nwanted:", disputeCaseRecord.BuyerContract.VendorListings[0].Metadata.CoinType)
678+
}
679+
if actualCase.PaymentCoin != disputeCaseRecord.BuyerContract.VendorListings[0].Metadata.AcceptedCurrencies[0] {
680+
t.Fatal("Incorrect paymentCoin:", actualCase.PaymentCoin, "\nwanted:", disputeCaseRecord.BuyerContract.VendorListings[0].Metadata.AcceptedCurrencies[0])
681+
}
682+
if actualCase.State != disputeCaseRecord.OrderState.String() {
683+
t.Fatal("Incorrect state:", actualCase.State, "\nwanted:", disputeCaseRecord.OrderState.String())
684+
}
685+
}
686+
544687
func TestNotificationsAreReturnedInExpectedOrder(t *testing.T) {
545688
const sameTimestampsAreReturnedInReverse = `{
546689
"notifications": [

core/order.go

+1
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ func (n *OpenBazaarNode) Purchase(data *PurchaseData) (orderId string, paymentAd
8787
payment := new(pb.Order_Payment)
8888
payment.Method = pb.Order_Payment_MODERATED
8989
payment.Moderator = data.Moderator
90+
payment.Coin = NormalizeCurrencyCode(n.Wallet.CurrencyCode())
9091

9192
profile, err := n.FetchProfile(data.Moderator, true)
9293
if err != nil {

0 commit comments

Comments
 (0)