-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathrm_test.go
115 lines (101 loc) · 2.92 KB
/
rm_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package rm
import (
"context"
"errors"
"io/ioutil"
"testing"
"github.com/dchest/uniuri"
"github.com/stretchr/testify/require"
)
func mockRmClient() *Client {
pk, _ := ioutil.ReadFile("../test/pk.pem")
pub, _ := ioutil.ReadFile("../test/server_pub.pem")
storeID := "2808912573238362402"
return NewClient(
Config{
ClientID: "1599646279297591629",
ClientSecret: "NekiDbnNHbHLWdRmbqtwBCqywfYkVVnE",
PrivateKey: pk,
StoreID: storeID,
PublicKey: pub,
Sandbox: true,
},
)
}
func emptyRmClient() *Client {
pk, _ := ioutil.ReadFile("../test/pk.pem")
pub, _ := ioutil.ReadFile("../test/server_pub.pem")
return NewClient(Config{
PrivateKey: pk,
PublicKey: pub,
StoreID: "xxx",
})
}
func TestRmClient(t *testing.T) {
ctx := context.Background()
client := mockRmClient()
req := CreatePaymentCheckoutRequest{}
req.Order.ID = uniuri.NewLen(10)
req.Order.Title = "Testing #" + req.Order.ID
req.Order.Amount = 1000
req.Customer.UserID = "1234"
req.StoreID = client.storeID
req.NotifyURL = "https://www.google.com"
req.RedirectURL = "https://www.google.com"
resp, err := client.GetStores(ctx)
require.NoError(t, err)
require.True(t, len(resp.Items) > 0)
res, err := client.CreatePaymentCheckout(ctx, req)
require.NoError(t, err)
require.NotEmpty(t, res.Item.CheckoutID)
require.NotEmpty(t, res.Item.URL)
order, err := client.GetPaymentByCheckoutID(ctx, res.Item.CheckoutID)
require.NoError(t, err)
require.Equal(t, ResponseSuccess, order.Code)
require.Equal(t, req.Order.ID, order.Item.Order.ID)
require.Equal(t, res.Item.CheckoutID, order.Item.ID)
require.Equal(t, req.Order.Title, order.Item.Order.Title)
require.Equal(t, req.Order.Amount, order.Item.Order.Amount)
require.Equal(t, req.NotifyURL, order.Item.NotifyURL)
require.Equal(t, req.RedirectURL, order.Item.RedirectURL)
{
pymt, err := client.GetPaymentByOrderID(ctx, "128200910090623482313")
require.NoError(t, err)
require.Equal(t, ResponseSuccess, pymt.Code)
}
// invalid order id
{
_, err := client.GetPaymentByOrderID(ctx, "xxx")
require.Error(t, err)
require.True(t, errors.Is(err, ErrTransactionNotFound))
}
{
req := RefundPaymentRequest{}
req.TransactionID = "210922094709010322801968"
req.Reason = "Not received goods"
_, err := client.RefundPayment(ctx, req)
require.True(t, errors.Is(err, ErrPaymentAlreadyRefunded))
}
{
req := CreateTransactionQRRequest{}
req.Amount = 10000
req.Type = "STATIC"
req.Order.Title = "Payment Test"
req.CurrencyType = "MYR"
req.IsPreFillAmount = false
req.Method = make([]string, 0)
req.RedirectURL = "www.google.com"
req.Expiry.Type = "PERMANENT"
req.StoreID = client.storeID
resp, err := client.CreateTransactionQR(ctx, req)
require.NoError(t, err)
require.NotEmpty(t, resp.Item.QrCodeURL)
}
// expecting error
{
var emptyClient = emptyRmClient()
stores, err := emptyClient.GetStores(ctx)
require.Error(t, err)
require.Nil(t, stores)
}
}