MCPcopy Create free account
hub / github.com/GoogleChrome/webstatus.dev / TestHTTPFetcher_Fetch

Function TestHTTPFetcher_Fetch

lib/httputils/fetcher_test.go:60–168  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

58}
59
60func TestHTTPFetcher_Fetch(t *testing.T) {
61 t.Run("successful fetch", func(t *testing.T) {
62 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
63 w.WriteHeader(http.StatusOK)
64 _, _ = w.Write([]byte("test data"))
65 }))
66 defer server.Close()
67
68 fetcher, err := NewHTTPFetcher(server.URL, server.Client())
69 if err != nil {
70 t.Fatalf("unexpected error creating fetcher: %v", err)
71 }
72
73 body, err := fetcher.Fetch(context.Background())
74 if err != nil {
75 t.Fatalf("unexpected error on fetch: %v", err)
76 }
77 defer body.Close()
78
79 data, err := io.ReadAll(body)
80 if err != nil {
81 t.Fatalf("unexpected error reading body: %v", err)
82 }
83
84 if string(data) != "test data" {
85 t.Errorf("expected 'test data', got '%s'", string(data))
86 }
87 })
88
89 t.Run("unexpected status code", func(t *testing.T) {
90 server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, _ *http.Request) {
91 w.WriteHeader(http.StatusNotFound)
92 }))
93 defer server.Close()
94
95 fetcher, err := NewHTTPFetcher(server.URL, server.Client())
96 if err != nil {
97 t.Fatalf("unexpected error creating fetcher: %v", err)
98 }
99
100 _, err = fetcher.Fetch(context.Background())
101 if !errors.Is(err, fetchtypes.ErrUnexpectedResult) {
102 t.Errorf("expected ErrUnexpectedResult, got %v", err)
103 }
104 })
105
106 t.Run("fetch error", func(t *testing.T) {
107 // nolint:exhaustruct // WONTFIX - external struct.
108 client := &http.Client{
109 Transport: &mockRoundTripper{
110 roundTripFunc: func(_ *http.Request) (*http.Response, error) {
111 return nil, errors.New("network error")
112 },
113 },
114 }
115
116 fetcher, err := NewHTTPFetcher("http://example.com", client)
117 if err != nil {

Callers

nothing calls this directly

Calls 7

FetchMethod · 0.95
NewHTTPFetcherFunction · 0.85
WithHeadersFunction · 0.85
RunMethod · 0.65
GetMethod · 0.65
CloseMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected