forked from ubogdan/peerless
-
Notifications
You must be signed in to change notification settings - Fork 0
/
transport_test.go
128 lines (113 loc) · 3.26 KB
/
transport_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
121
122
123
124
125
126
127
128
package peerless
import (
"context"
"fmt"
"net/http"
"testing"
)
func TestService_Call(t *testing.T) {
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:viewNumberDetailsResponse xmlns:ns2="http://publicapi.api.s2.peerless.com/">
</ns2:viewNumberDetailsResponse>
</S:Body>
</S:Envelope>`))
})
api, srvShutdown := testingHTTPClient(h)
defer srvShutdown()
service, ok := api.(*service)
if !ok {
t.Fatalf("Invalid service type")
}
_, err := service.call(context.Background(), requestBody{})
if err != nil {
t.Fatalf("ViewNumberDetails: %s", err)
}
}
func TestService_UserAgent(t *testing.T) {
expectUserAgent := "Custom User Agent"
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("User-Agent") != expectUserAgent {
t.Fatalf("Expected %s Got %s", expectUserAgent, r.Header.Get("User-Agent"))
}
})
api, srvShutdown := testingHTTPClient(h)
defer srvShutdown()
service, ok := api.(*service)
if !ok {
t.Fatalf("Invalid service type")
}
service.UserAgent = expectUserAgent
service.call(context.Background(), requestBody{})
}
func TestService_FaultResponse(t *testing.T) {
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(500)
w.Write([]byte(`<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body><S:Fault xmlns:ns4="http://www.w3.org/2003/05/soap-envelope"><faultcode>EO0000</faultcode>
<faultstring>GENERAL_ERROR</faultstring></S:Fault></S:Body></S:Envelope>`))
})
api, srvShutdown := testingHTTPClient(h)
defer srvShutdown()
service, ok := api.(*service)
if !ok {
t.Fatalf("Invalid service type")
}
_, err := service.call(context.Background(), requestBody{})
if err != nil {
faultErr, ok := err.(*Fault)
if !ok {
t.Fatalf("Must fail with SOAP FAUL error")
}
expected := fmt.Sprintf("%q: %q", faultErr.Code, faultErr.String)
if faultErr.Error() != expected {
t.Fatalf("Error expexted `%s` Got `%s`", expected, faultErr.Error())
}
}
}
func TestService_InvalidResponse(t *testing.T) {
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(500)
w.Write([]byte(`500 Internal server error`))
})
api, srvShutdown := testingHTTPClient(h)
defer srvShutdown()
service, ok := api.(*service)
if !ok {
t.Fatalf("Invalid service type")
}
_, err := service.call(context.Background(), requestBody{})
if err != nil {
httpErr, ok := err.(*HTTPError)
if !ok {
t.Fatalf("Must fail with HTTP error")
}
expected := fmt.Sprintf("%q: %q", httpErr.Status, httpErr.Msg)
if httpErr.Error() != expected {
t.Fatalf("Error expexted `%s` Got `%s`", expected, httpErr.Error())
}
}
}
func TestService_EmptyResponse(t *testing.T) {
h := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(500)
})
api, srvShutdown := testingHTTPClient(h)
defer srvShutdown()
service, ok := api.(*service)
if !ok {
t.Fatalf("Invalid service type")
}
_, err := service.call(context.Background(), requestBody{})
if err != nil {
httpErr, ok := err.(*HTTPError)
if !ok {
t.Fatalf("Must fail with HTTP error")
}
if httpErr.Msg != "" {
t.Fatalf("Empty response expected")
}
}
}