Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions api/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package api

import (
"fmt"
"io"
"net/http"
)

type IOStreams struct {
Out io.Writer
ErrOut io.Writer
}

type AuthTransport struct {
Transport http.RoundTripper
Streams IOStreams
}

func (t *AuthTransport) RoundTrip(req *http.Request) (*http.Response, error) {
// Simulate checking if token is expired and refreshing
// Write refresh logs to ErrOut instead of Out
fmt.Fprintln(t.Streams.ErrOut, "Refreshing token...")

// Proceed with the actual request (mocked for test)
return &http.Response{StatusCode: http.StatusOK}, nil
}
37 changes: 37 additions & 0 deletions api/client_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package api

import (
"bytes"
"net/http"
"testing"
)

func TestAuthTransport_TokenRefreshLogsToStderr(t *testing.T) {
stdout := &bytes.Buffer{}
stderr := &bytes.Buffer{}

streams := IOStreams{
Out: stdout,
ErrOut: stderr,
}

transport := &AuthTransport{
Transport: http.DefaultTransport,
Streams: streams,
}

req, _ := http.NewRequest("GET", "https://api.github.com/user", nil)

_, err := transport.RoundTrip(req)
if err != nil {
t.Fatalf("unexpected error: %v", err)
}

if stdout.Len() > 0 {
t.Errorf("expected stdout to be clean, got %s", stdout.String())
}

if stderr.Len() == 0 {
t.Error("expected token refresh logs in stderr, got none")
}
}