taldir

Directory service to resolve wallet mailboxes by messenger addresses
Log | Files | Refs | Submodules | README | LICENSE

commit 04281a18fe4b49e4188bf516d6e40b28497c705f
parent a1472480495a815194c5dd55072637f937ac2877
Author: Martin Schanzenbach <schanzen@gnunet.org>
Date:   Tue, 12 Jul 2022 00:10:03 +0200

mockup merchant API

Diffstat:
Mcmd/taldir-server/main_test.go | 24++++++++++++++++++++++--
Mgo.mod | 8+-------
Mpkg/rest/taldir.go | 12++++++------
Mpkg/taler/merchant.go | 9+++++++--
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