@@ -3,6 +3,7 @@ package eywa_test
33import (
44 "bytes"
55 "context"
6+ "errors"
67 "io"
78 "net/http"
89 "net/http/httptest"
@@ -24,6 +25,82 @@ func (m *MockQuerable) Variables() map[string]interface{} {
2425 return m .Vars
2526}
2627
28+ func TestDoClient (t * testing.T ) {
29+ tt := []struct {
30+ name string
31+ server * httptest.Server
32+ expectedErr error
33+ expectedResponse []byte
34+ }{
35+ {
36+ name : "Valid GQL response" ,
37+ server : httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
38+ w .WriteHeader (http .StatusOK )
39+ w .Write ([]byte (`{"data": {"test": "test"}}` ))
40+ })),
41+ expectedResponse : []byte (`{"data": {"test": "test"}}` ),
42+ },
43+ {
44+ name : "A 401 response" ,
45+ server : httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
46+ w .WriteHeader (http .StatusUnauthorized )
47+ w .Write ([]byte (`{"error": {"message": "unauthorized"}}` ))
48+ })),
49+ expectedErr : eywa .ErrHTTPFailedStatus ,
50+ },
51+ {
52+ name : "A 403 response" ,
53+ server : httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
54+ w .WriteHeader (http .StatusUnauthorized )
55+ w .Write ([]byte (`{"error": {"message": "forbidden"}}` ))
56+ })),
57+ expectedErr : eywa .ErrHTTPFailedStatus ,
58+ },
59+ {
60+ name : "A 503 non-json response" ,
61+ server : httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
62+ w .WriteHeader (http .StatusServiceUnavailable )
63+ w .Write ([]byte (`Service unavailable` ))
64+ })),
65+ expectedErr : eywa .ErrHTTPFailedStatus ,
66+ },
67+ {
68+ name : "A 301 Redirect" ,
69+ server : httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
70+ w .WriteHeader (http .StatusMovedPermanently )
71+ w .Write ([]byte (`Moved Permanently` ))
72+ })),
73+ expectedErr : eywa .ErrHTTPRedirect ,
74+ },
75+ }
76+
77+ for _ , tc := range tt {
78+ t .Run (tc .name , func (t * testing.T ) {
79+ gqlClient := eywa .NewClient (tc .server .URL , nil )
80+ resp , err := gqlClient .Do (context .TODO (), & MockQuerable {})
81+ if err != nil && tc .expectedErr == nil {
82+ t .Errorf ("Expected no error, got %v" , err )
83+ return
84+ }
85+ if err == nil && tc .expectedErr != nil {
86+ t .Errorf ("Expected error %v, got nil" , tc .expectedErr )
87+ return
88+ }
89+ if err != nil && tc .expectedErr != nil {
90+ if ! errors .Is (err , tc .expectedErr ) {
91+ t .Errorf ("Expected error %v, got %v" , tc .expectedErr , err )
92+ return
93+ }
94+ return
95+ }
96+ if ! bytes .Equal (tc .expectedResponse , resp .Bytes ()) {
97+ t .Errorf ("Expected response %s, got %s" , string (tc .expectedResponse ), resp .String ())
98+ return
99+ }
100+ })
101+ }
102+ }
103+
27104func TestRawClient (t * testing.T ) {
28105 tt := []struct {
29106 name string
0 commit comments