@@ -99,6 +99,38 @@ def test_fingerprint_different_urls(self):
9999 r2 = Request ("https://example.com/page2" )
100100 assert r1 .update_fingerprint () != r2 .update_fingerprint ()
101101
102+ def test_fingerprint_include_kwargs_uses_kwarg_values (self ):
103+ """Test kwargs with different values produce different fingerprints."""
104+ r1 = Request ("https://example.com" , timeout = 1 )
105+ r2 = Request ("https://example.com" , timeout = 2 )
106+
107+ assert r1 .update_fingerprint (include_kwargs = True ) != r2 .update_fingerprint (include_kwargs = True )
108+
109+ def test_fingerprint_include_kwargs_handles_non_primitive_values (self ):
110+ class _Opaque :
111+ def __repr__ (self ) -> str :
112+ return "_Opaque(stable)"
113+
114+ opaque = _Opaque ()
115+ r1 = Request ("https://example.com" , proxies = {"http" : "p1" }, custom = opaque )
116+ r2 = Request ("https://example.com" , proxies = {"http" : "p1" }, custom = opaque )
117+ r3 = Request ("https://example.com" , proxies = {"http" : "p2" }, custom = opaque )
118+
119+ fp1 = r1 .update_fingerprint (include_kwargs = True )
120+ r2 ._fp = None
121+ fp2 = r2 .update_fingerprint (include_kwargs = True )
122+ fp3 = r3 .update_fingerprint (include_kwargs = True )
123+
124+ assert fp1 == fp2
125+ assert fp1 != fp3
126+
127+ def test_fingerprint_include_headers_preserves_header_value_case (self ):
128+ """Test header values are fingerprinted without lowercasing."""
129+ r1 = Request ("https://example.com" , headers = {"X-Test" : "A" })
130+ r2 = Request ("https://example.com" , headers = {"X-Test" : "a" })
131+
132+ assert r1 .update_fingerprint (include_headers = True ) != r2 .update_fingerprint (include_headers = True )
133+
102134
103135class TestRequestCopy :
104136 """Test Request copy functionality."""
0 commit comments