commit 04281a18fe4b49e4188bf516d6e40b28497c705f
parent a1472480495a815194c5dd55072637f937ac2877
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date: Tue, 12 Jul 2022 00:10:03 +0200
mockup merchant API
Diffstat:
4 files changed, 36 insertions(+), 17 deletions(-)
diff --git a/cmd/taldir-server/main_test.go b/cmd/taldir-server/main_test.go
@@ -31,6 +31,7 @@ import (
"log"
"taler.net/taldir/pkg/rest"
_ "taler.net/taldir/cmd/taldir-server"
+ "github.com/jarcoal/httpmock"
"taler.net/taldir/pkg/util"
)
@@ -54,6 +55,22 @@ var validRegisterRequestShort = []byte(`
}
`)
+var newOrderMockResponse = `
+ {
+ "order_id": "testOrder1234",
+ "taler_pay_uri": "payto://ladida"
+ }
+`
+
+var newOrderStatusUnpaidMockResponse = `
+ {
+ "order_status": "unpaid",
+ "taler_pay_uri": "payto://somedude"
+ }
+`
+
+
+
func TestMain(m *testing.M) {
t.Initialize("testdata/taldir-test.conf")
@@ -293,10 +310,13 @@ func TestUnsupportedMethod(s *testing.T) {
func TestPaymentRequiredMethod(s *testing.T) {
t.ClearDatabase()
-
+ httpmock.Activate()
+ defer httpmock.DeactivateAndReset()
req, _ := http.NewRequest("POST", "/register/test-cost", bytes.NewBuffer(validRegisterRequest))
- response := executeRequest(req)
+ httpmock.RegisterResponder("POST", "http://merchant.taldir/instances/myInstance/private/orders", httpmock.NewStringResponder(200, newOrderMockResponse))
+ httpmock.RegisterResponder("GET", "http://merchant.taldir/instances/myInstance/private/orders/testOrder1234", httpmock.NewStringResponder(200, newOrderStatusUnpaidMockResponse))
+ response := executeRequest(req)
if http.StatusPaymentRequired != response.Code {
s.Errorf("Expected response code %d. Got %d\n", http.StatusPaymentRequired, response.Code)
}
diff --git a/go.mod b/go.mod
@@ -3,19 +3,13 @@ module taler.net/taldir
go 1.16
require (
- github.com/alexbrainman/sspi v0.0.0-20180613141037-e580b900e9f5 // indirect
github.com/gorilla/mux v1.8.0
- github.com/jcmturner/gokrb5/v8 v8.2.0 // indirect
+ github.com/jarcoal/httpmock v1.2.0
github.com/jinzhu/now v1.1.5 // indirect
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
golang.org/x/text v0.3.7
gopkg.in/ini.v1 v1.66.4
- gopkg.in/jcmturner/aescts.v1 v1.0.1 // indirect
- gopkg.in/jcmturner/dnsutils.v1 v1.0.1 // indirect
- gopkg.in/jcmturner/goidentity.v3 v3.0.0 // indirect
- gopkg.in/jcmturner/gokrb5.v7 v7.5.0 // indirect
- gopkg.in/jcmturner/rpc.v1 v1.1.0 // indirect
gorm.io/driver/postgres v1.3.4
gorm.io/gorm v1.23.4
)
diff --git a/pkg/rest/taldir.go b/pkg/rest/taldir.go
@@ -433,15 +433,15 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r *http.Request){
// Check if order paid
payto, paytoErr := t.Merchant.IsOrderPaid(validation.OrderId)
if paytoErr != nil {
- if len(payto) != 0 {
- w.WriteHeader(http.StatusPaymentRequired)
- w.Header().Set("Location", payto) // FIXME no idea what to do with this.
- return
- }
w.WriteHeader(http.StatusInternalServerError)
log.Println(paytoErr)
return
}
+ if len(payto) != 0 {
+ w.WriteHeader(http.StatusPaymentRequired)
+ w.Header().Set("Location", payto) // FIXME no idea what to do with this.
+ return
+ }
// In this case, this order was paid
}
@@ -758,7 +758,7 @@ func (t *Taldir) Initialize(cfgfile string) {
if "" == t.Salt {
t.Salt = t.Cfg.Section("taldir").Key("salt").MustString("ChangeMe")
}
- t.Merchant = taler.NewMerchant("http://localhost:8880", "myInstance")
+ t.Merchant = taler.NewMerchant("http://merchant.taldir", "myInstance")
t.setupHandlers()
}
diff --git a/pkg/taler/merchant.go b/pkg/taler/merchant.go
@@ -6,6 +6,7 @@ import (
"bytes"
"fmt"
"errors"
+ "io/ioutil"
)
type PostOrderRequest struct {
@@ -119,12 +120,16 @@ func (m *Merchant) IsOrderPaid(orderId string) (string, error) {
message := fmt.Sprintf("Expected response code %d. Got %d", http.StatusOK, resp.StatusCode)
return "", errors.New(message)
}
- err = json.NewDecoder(resp.Body).Decode(&orderPaidResponse)
+ respData, err := ioutil.ReadAll(resp.Body)
+ if err != nil {
+ return "", err
+ }
+ err = json.NewDecoder(bytes.NewReader(respData)).Decode(&orderPaidResponse)
if err != nil {
return "", err
}
if orderPaidResponse.OrderStatus != "paid" {
- err = json.NewDecoder(resp.Body).Decode(&paytoResponse)
+ err = json.NewDecoder(bytes.NewReader(respData)).Decode(&paytoResponse)
return paytoResponse.TalerPayUri, err
}
return "", nil