package fa import ( "context" "net/http" "net/http/httptest" "net/url" "strings" "testing" "time" ) // TestSFW_CookieOnOutboundRequest sets up an httptest server that records // the Cookie header it received, then asserts each SFW mode produces the // expected `sfw=…` cookie value (or none, for SFWAuto). func TestSFW_CookieOnOutboundRequest(t *testing.T) { cases := []struct { name string mode SFWMode wantSFW string // "" = expect no sfw cookie at all }{ {"auto omits cookie", SFWAuto, ""}, {"on sets sfw=1", SFWOn, "1"}, {"off sets sfw=0", SFWOff, "0"}, } for _, tc := range cases { t.Run(tc.name, func(t *testing.T) { var seen string srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if c, err := r.Cookie("sfw"); err == nil { seen = c.Value } w.Header().Set("Content-Type", "text/html") _, _ = w.Write([]byte(`
`))
}))
defer srv.Close()
target, _ := url.Parse(srv.URL)
hc := &http.Client{
Transport: &rewritingRT{target: target, base: http.DefaultTransport},
Timeout: 5 * time.Second,
}
client := New(
WithHTTPClient(hc),
WithRateLimit(time.Microsecond, 16),
WithMaxRetries(0),
WithSFW(tc.mode),
)
if _, err := client.GetSubmission(context.Background(), 1); err != nil {
t.Fatalf("GetSubmission: %v", err)
}
if seen != tc.wantSFW {
t.Errorf("sfw cookie sent = %q; want %q", seen, tc.wantSFW)
}
})
}
}
// TestSFW_CookieDoesNotClobberAuth confirms that enabling SFW does not
// wipe out the a/b session cookies on the same jar both should ride on
// the same request.
func TestSFW_CookieDoesNotClobberAuth(t *testing.T) {
var got string
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
got = r.Header.Get("Cookie")
_, _ = w.Write([]byte(`