-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathpike_test.go
120 lines (102 loc) · 3.59 KB
/
pike_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
116
117
118
119
120
package paymail
import (
"fmt"
"net/http"
"strconv"
"testing"
"github.com/jarcoal/httpmock"
"github.com/stretchr/testify/require"
)
// ExampleClient_GetOutputsTemplate example using GetOutputsTemplate()
//
// See more examples in /examples/
func ExampleClient_GetOutputsTemplate() {
// Activate httpmock
httpmock.Activate()
defer httpmock.DeactivateAndReset()
// Setup a mock HTTP client
client := newTestClient(nil)
var amount uint64 = 1000
mockPIKEOutputs(http.StatusOK, amount)
// Assume we have a PIKE Outputs URL
pikeOutputsURL := "https://test.com/v1/bsvalias/pike/outputs/{alias}@{domain.tld}"
// Prepare the payload
payload := &PikePaymentOutputsPayload{
SenderPaymail: "[email protected]",
Amount: amount, // Example amount in satoshis
}
// Get the outputs template from PIKE
outputs, err := client.GetOutputsTemplate(pikeOutputsURL, "alias", "domain.tld", payload)
if err != nil {
fmt.Printf("error getting outputs template: %s", err.Error())
return
}
fmt.Printf("found outputs template, reference: %+v", outputs.Reference)
// Output: found outputs template, reference: 1262077636c27af74c01bb4535a7a90e
}
// TestClient_GetOutputsTemplate will test the method GetOutputsTemplate()
func TestClient_GetOutputsTemplate(t *testing.T) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
client := newTestClient(t)
t.Run("successful PIKE outputs response", func(t *testing.T) {
var amount uint64 = 1000
mockPIKEOutputs(http.StatusOK, amount)
outputsURL := "https://" + testDomain + "/v1/bsvalias/pike/outputs/{alias}@{domain.tld}"
payload := &PikePaymentOutputsPayload{
SenderPaymail: "[email protected]",
Amount: amount,
}
response, err := client.GetOutputsTemplate(outputsURL, "alias", "domain.tld", payload)
require.NoError(t, err)
require.NotNil(t, response)
require.NotNil(t, response.Reference)
require.Equal(t, payload.Amount, response.Outputs[0].Satoshis)
})
t.Run("PIKE outputs response error", func(t *testing.T) {
httpmock.Reset()
httpmock.RegisterResponder(http.MethodPost, "https://example.com/v1/bsvalias/pike/outputs/[email protected]",
httpmock.NewStringResponder(http.StatusBadRequest, `{"message": "bad request"}`),
)
outputsURL := "https://example.com/v1/bsvalias/pike/outputs/{alias}@{domain.tld}"
payload := &PikePaymentOutputsPayload{
SenderPaymail: "[email protected]",
Amount: 1000,
}
response, err := client.GetOutputsTemplate(outputsURL, "alias", "domain.tld", payload)
require.Error(t, err)
require.Nil(t, response)
})
}
// mockPIKEOutputs is used for mocking the PIKE outputs response
func mockPIKEOutputs(statusCode int, amount uint64) {
httpmock.RegisterResponder(http.MethodPost, "https://"+testDomain+"/v1/bsvalias/pike/outputs/[email protected]",
httpmock.NewStringResponder(
statusCode,
`{
"reference": "1262077636c27af74c01bb4535a7a90e",
"outputs": [
{
"script": "76a9fd88ac",
"satoshis": `+strconv.Itoa(int(amount))+`
}
]
}`,
),
)
}
// BenchmarkClient_GetOutputsTemplate benchmarks the method GetOutputsTemplate()
func BenchmarkClient_GetOutputsTemplate(b *testing.B) {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
client := newTestClient(nil)
mockPIKEOutputs(http.StatusOK, 1000)
outputsURL := "https://example.com/v1/bsvalias/pike/outputs/{alias}@{domain.tld}"
payload := &PikePaymentOutputsPayload{
SenderPaymail: "[email protected]",
Amount: 1000, // Example amount in satoshis
}
for i := 0; i < b.N; i++ {
_, _ = client.GetOutputsTemplate(outputsURL, "alias", "domain.tld", payload)
}
}