-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathapi_payments_test.go
More file actions
117 lines (103 loc) · 3.41 KB
/
api_payments_test.go
File metadata and controls
117 lines (103 loc) · 3.41 KB
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
package main
import (
"net/http"
"net/http/httptest"
"testing"
)
func TestGetPayment_Mock(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/Payments/b26fd49a-cbae-470a-a8f8-bcbc119e0379" {
t.Errorf("Unexpected path: %s", r.URL.Path)
}
w.Header().Set("Content-Type", "application/json")
_, err := w.Write([]byte(`{"Payments": [{"PaymentID": "b26fd49a-cbae-470a-a8f8-bcbc119e0379", "Amount": 411.35, "Reference": "Ref 02761", "Invoice": {"InvoiceID": "361a4980-7f53-4b68-820c-f6487f613284", "InvoiceNumber": "INV-0001", "Type": "ACCREC"}}]}`))
if err != nil {
t.Fatalf("Failed to write response: %v", err)
}
}))
defer server.Close()
client := &APIClient{
accessToken: "test-token",
tenantID: "test-tenant",
client: &http.Client{},
baseURL: server.URL,
}
payment, err := client.GetPayment("b26fd49a-cbae-470a-a8f8-bcbc119e0379")
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
if payment.PaymentID != "b26fd49a-cbae-470a-a8f8-bcbc119e0379" {
t.Errorf("Expected PaymentID b26fd49a-cbae-470a-a8f8-bcbc119e0379, got %s", payment.PaymentID)
}
if payment.Amount != 411.35 {
t.Errorf("Expected Amount 411.35, got %f", payment.Amount)
}
if payment.Reference != "Ref 02761" {
t.Errorf("Expected Reference 'Ref 02761', got %s", payment.Reference)
}
}
func TestGetPayment_NotFound(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusNotFound)
_, err := w.Write([]byte(`{"Payments": []}`))
if err != nil {
t.Fatalf("Failed to write response: %v", err)
}
}))
defer server.Close()
client := &APIClient{
accessToken: "test-token",
tenantID: "test-tenant",
client: &http.Client{},
baseURL: server.URL,
}
_, err := client.GetPayment("non-existent-id")
if err == nil {
t.Fatal("Expected error for non-existent payment, got nil")
}
if err.Error() != "failed to get payment: (0): " {
t.Logf("Got error (acceptable): %v", err)
}
}
func TestGetPaymentsPaginated_WithOrder(t *testing.T) {
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Check that order parameter is present (query param order may vary)
if r.URL.RawQuery == "" || !contains(r.URL.RawQuery, "order=") {
t.Errorf("Expected 'order' in query, got '%s'", r.URL.RawQuery)
}
w.Header().Set("Content-Type", "application/json")
_, err := w.Write([]byte(`{"Payments": [], "Page": 1, "PageCount": 0, "ItemCount": 0}`))
if err != nil {
t.Fatalf("Failed to write response: %v", err)
}
}))
defer server.Close()
client := &APIClient{
accessToken: "test-token",
tenantID: "test-tenant",
client: &http.Client{},
baseURL: server.URL,
}
payments, itemCount, err := client.GetPaymentsPaginated("", 1, 10, "Amount DESC")
if err != nil {
t.Fatalf("Unexpected error: %v", err)
}
if len(payments) != 0 {
t.Errorf("Expected 0 payments, got %d", len(payments))
}
if itemCount != 0 {
t.Errorf("Expected itemCount 0, got %d", itemCount)
}
}
func contains(s, substr string) bool {
return len(s) >= len(substr) && (s == substr || len(s) > 0 && containsAt(s, substr))
}
func containsAt(s, substr string) bool {
for i := 0; i <= len(s)-len(substr); i++ {
if s[i:i+len(substr)] == substr {
return true
}
}
return false
}