mirror of
https://github.com/bestbytes/datatrans.git
synced 2025-10-16 12:05:36 +00:00
check for invalid internalIDs
This commit is contained in:
parent
3e4652d535
commit
d27234f7e6
@ -71,6 +71,7 @@ type Client struct {
|
|||||||
doFn OptionHTTPRequestFn
|
doFn OptionHTTPRequestFn
|
||||||
merchants map[string]OptionMerchant // string = your custom merchant ID
|
merchants map[string]OptionMerchant // string = your custom merchant ID
|
||||||
currentInternalID string
|
currentInternalID string
|
||||||
|
internalIDFound bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type Option interface {
|
type Option interface {
|
||||||
@ -99,7 +100,8 @@ func MakeClient(opts ...Option) (Client, error) {
|
|||||||
},
|
},
|
||||||
}).Do
|
}).Do
|
||||||
}
|
}
|
||||||
|
// see if we have a default one, otherwise you always have to call WithMerchant.
|
||||||
|
_, c.internalIDFound = c.merchants[""]
|
||||||
return c, nil
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,11 +109,16 @@ func MakeClient(opts ...Option) (Client, error) {
|
|||||||
func (c *Client) WithMerchant(internalID string) *Client {
|
func (c *Client) WithMerchant(internalID string) *Client {
|
||||||
c2 := *c
|
c2 := *c
|
||||||
c2.currentInternalID = internalID
|
c2.currentInternalID = internalID
|
||||||
|
_, c2.internalIDFound = c2.merchants[internalID]
|
||||||
return &c2
|
return &c2
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) do(req *http.Request, v interface{}) error {
|
func (c *Client) do(req *http.Request, v interface{}) error {
|
||||||
internalID := c.currentInternalID
|
internalID := c.currentInternalID
|
||||||
|
if !c.internalIDFound {
|
||||||
|
return fmt.Errorf("ClientID %q not found in list of merchants", internalID)
|
||||||
|
}
|
||||||
|
|
||||||
req.SetBasicAuth(c.merchants[internalID].MerchantID, c.merchants[internalID].Password)
|
req.SetBasicAuth(c.merchants[internalID].MerchantID, c.merchants[internalID].Password)
|
||||||
resp, err := c.doFn(req)
|
resp, err := c.doFn(req)
|
||||||
defer closeResponse(resp)
|
defer closeResponse(resp)
|
||||||
|
|||||||
@ -101,7 +101,7 @@ func TestClient_Initialize(t *testing.T) {
|
|||||||
)
|
)
|
||||||
must(t, err)
|
must(t, err)
|
||||||
|
|
||||||
rs, err := c.Initialize(context.Background(), datatrans.RequestInitialize{
|
ri := datatrans.RequestInitialize{
|
||||||
Currency: "CHF",
|
Currency: "CHF",
|
||||||
RefNo: "872732",
|
RefNo: "872732",
|
||||||
Amount: 1337,
|
Amount: 1337,
|
||||||
@ -115,13 +115,27 @@ func TestClient_Initialize(t *testing.T) {
|
|||||||
CustomFields: map[string]interface{}{
|
CustomFields: map[string]interface{}{
|
||||||
"alp": true,
|
"alp": true,
|
||||||
},
|
},
|
||||||
})
|
|
||||||
must(t, err)
|
|
||||||
|
|
||||||
want := &datatrans.ResponseInitialize{TransactionId: "210215103033478409", RawJSONBody: datatrans.RawJSONBody{0x7b, 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x31, 0x30, 0x32, 0x31, 0x35, 0x31, 0x30, 0x33, 0x30, 0x33, 0x33, 0x34, 0x37, 0x38, 0x34, 0x30, 0x39, 0x22, 0x7d}}
|
|
||||||
if !reflect.DeepEqual(rs, want) {
|
|
||||||
t.Error("invalid response")
|
|
||||||
}
|
}
|
||||||
|
t.Run("successful request", func(t *testing.T) {
|
||||||
|
rs, err := c.Initialize(context.Background(), ri)
|
||||||
|
must(t, err)
|
||||||
|
|
||||||
|
want := &datatrans.ResponseInitialize{TransactionId: "210215103033478409", RawJSONBody: datatrans.RawJSONBody{0x7b, 0x22, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22, 0x3a, 0x20, 0x22, 0x32, 0x31, 0x30, 0x32, 0x31, 0x35, 0x31, 0x30, 0x33, 0x30, 0x33, 0x33, 0x34, 0x37, 0x38, 0x34, 0x30, 0x39, 0x22, 0x7d}}
|
||||||
|
if !reflect.DeepEqual(rs, want) {
|
||||||
|
t.Error("invalid response")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("invalid merchant", func(t *testing.T) {
|
||||||
|
rs, err := c.WithMerchant("sadfasdf").Initialize(context.Background(), ri)
|
||||||
|
if rs != nil {
|
||||||
|
t.Error("response should be nil")
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("expected an error")
|
||||||
|
}
|
||||||
|
t.Log(err)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMarshalJSON(t *testing.T) {
|
func TestMarshalJSON(t *testing.T) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user