diff options
Diffstat (limited to 'backend/internal/ibd/auth_test.go')
-rw-r--r-- | backend/internal/ibd/auth_test.go | 84 |
1 files changed, 34 insertions, 50 deletions
diff --git a/backend/internal/ibd/auth_test.go b/backend/internal/ibd/auth_test.go index d28b33a..8a00d42 100644 --- a/backend/internal/ibd/auth_test.go +++ b/backend/internal/ibd/auth_test.go @@ -9,6 +9,8 @@ import ( "testing" "time" + "github.com/ansg191/ibd-trader-backend/internal/ibd/transport" + "github.com/jarcoal/httpmock" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/net/html" @@ -134,44 +136,36 @@ func TestClient_Authenticate(t *testing.T) { expectedVal := "test-cookie" expectedExp := time.Now().Add(time.Hour).Round(time.Second).In(time.UTC) - server := newServer(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - uri := r.URL.String() - switch uri { - case signInUrl: - w.Header().Set("Content-Type", "text/html") - _, err := w.Write([]byte(extractAuthHtml)) - require.NoError(t, err) - return - case authenticateUrl: + tp := httpmock.NewMockTransport() + tp.RegisterResponder("GET", signInUrl, + httpmock.NewStringResponder(http.StatusOK, extractAuthHtml)) + tp.RegisterResponder("POST", authenticateUrl, + func(request *http.Request) (*http.Response, error) { var body authRequestBody - require.NoError(t, json.NewDecoder(r.Body).Decode(&body)) + require.NoError(t, json.NewDecoder(request.Body).Decode(&body)) assert.Equal(t, "abc", body.Username) assert.Equal(t, "xyz", body.Password) - w.Header().Set("Content-Type", "text/html") - _, err := w.Write([]byte(extractTokenParamsHtml)) - require.NoError(t, err) - return - case postAuthUrl: - require.NoError(t, r.ParseForm()) - assert.Equal(t, extractTokenExpectedToken, r.Form.Get("token")) + return httpmock.NewStringResponse(http.StatusOK, extractTokenParamsHtml), nil + }) + tp.RegisterResponder("POST", postAuthUrl, + func(request *http.Request) (*http.Response, error) { + require.NoError(t, request.ParseForm()) + assert.Equal(t, extractTokenExpectedToken, request.Form.Get("token")) params, err := url.QueryUnescape(extractTokenExpectedParams) require.NoError(t, err) - assert.Equal(t, params, r.Form.Get("params")) + assert.Equal(t, params, request.Form.Get("params")) - w.Header().Set("Content-Type", "text/html") - http.SetCookie(w, &http.Cookie{Name: cookieName, Value: expectedVal, Expires: expectedExp}) - _, err = w.Write([]byte("OK")) - require.NoError(t, err) - return - default: - t.Fatalf("unexpected URL: %s", uri) - } - })) + resp := httpmock.NewStringResponse(http.StatusOK, "OK") + cookie := &http.Cookie{Name: cookieName, Value: expectedVal, Expires: expectedExp} + resp.Header.Set("Set-Cookie", cookie.String()) + return resp, nil + }) - client, err := NewClient(http.DefaultClient, apiKey, nil, "", WithBaseURL(server.URL)) - require.NoError(t, err) + client := NewClient([]transport.Transport{ + &http.Client{Transport: tp}, + }, nil) cookie, err := client.Authenticate(context.Background(), "abc", "xyz") require.NoError(t, err) @@ -184,32 +178,22 @@ func TestClient_Authenticate(t *testing.T) { func TestClient_Authenticate_401(t *testing.T) { t.Parallel() - server := newServer(t, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - uri := r.URL.String() - switch uri { - case signInUrl: - w.Header().Set("Content-Type", "text/html") - _, err := w.Write([]byte(extractAuthHtml)) - require.NoError(t, err) - return - case authenticateUrl: + tp := httpmock.NewMockTransport() + tp.RegisterResponder("GET", signInUrl, + httpmock.NewStringResponder(http.StatusOK, extractAuthHtml)) + tp.RegisterResponder("POST", authenticateUrl, + func(request *http.Request) (*http.Response, error) { var body authRequestBody - require.NoError(t, json.NewDecoder(r.Body).Decode(&body)) + require.NoError(t, json.NewDecoder(request.Body).Decode(&body)) assert.Equal(t, "abc", body.Username) assert.Equal(t, "xyz", body.Password) - w.Header().Set("Content-Type", "application/json") - w.WriteHeader(http.StatusUnauthorized) - _, err := w.Write([]byte(`{"name":"ValidationError","code":"ERR016","message":"Wrong username or password","description":"Wrong username or password"}`)) - require.NoError(t, err) - return - default: - t.Fatalf("unexpected URL: %s", uri) - } - })) + return httpmock.NewStringResponse(http.StatusUnauthorized, `{"name":"ValidationError","code":"ERR016","message":"Wrong username or password","description":"Wrong username or password"}`), nil + }) - client, err := NewClient(http.DefaultClient, apiKey, nil, "", WithBaseURL(server.URL)) - require.NoError(t, err) + client := NewClient([]transport.Transport{ + &http.Client{Transport: tp}, + }, nil) cookie, err := client.Authenticate(context.Background(), "abc", "xyz") assert.Nil(t, cookie) |