diff --git a/api/client.go b/api/client.go new file mode 100644 index 0000000..f281d71 --- /dev/null +++ b/api/client.go @@ -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 +} diff --git a/api/client_test.go b/api/client_test.go new file mode 100644 index 0000000..c2dd172 --- /dev/null +++ b/api/client_test.go @@ -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") + } +}