mirror of
https://github.com/astral-sh/uv.git
synced 2025-07-07 13:25:00 +00:00
Move fragment preservation test to directly test our redirect handling logic (#14480)
When [updating](https://github.com/astral-sh/uv/pull/14475) to the latest `reqwest` version, our fragment propagation test broke. That test was partially testing the `reqwest` behavior, so this PR moves the fragment test to directly test our logic for constructing redirect requests.
This commit is contained in:
parent
3a77b9cdd9
commit
d31e6ad7c7
2 changed files with 39 additions and 38 deletions
|
@ -982,6 +982,45 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[tokio::test]
|
||||||
|
async fn test_redirect_preserves_fragment() -> Result<()> {
|
||||||
|
for status in &[301, 302, 303, 307, 308] {
|
||||||
|
let server = MockServer::start().await;
|
||||||
|
Mock::given(method("GET"))
|
||||||
|
.respond_with(
|
||||||
|
ResponseTemplate::new(*status)
|
||||||
|
.insert_header("location", format!("{}/redirect", server.uri())),
|
||||||
|
)
|
||||||
|
.mount(&server)
|
||||||
|
.await;
|
||||||
|
|
||||||
|
let request = Client::new()
|
||||||
|
.get(format!("{}#fragment", server.uri()))
|
||||||
|
.build()
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let response = Client::builder()
|
||||||
|
.redirect(reqwest::redirect::Policy::none())
|
||||||
|
.build()
|
||||||
|
.unwrap()
|
||||||
|
.execute(request.try_clone().unwrap())
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let redirect_request =
|
||||||
|
request_into_redirect(request, &response, CrossOriginCredentialsPolicy::Secure)?
|
||||||
|
.unwrap();
|
||||||
|
assert!(
|
||||||
|
redirect_request
|
||||||
|
.url()
|
||||||
|
.fragment()
|
||||||
|
.is_some_and(|fragment| fragment == "fragment")
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
#[tokio::test]
|
||||||
async fn test_redirect_removes_authorization_header_on_cross_origin() -> Result<()> {
|
async fn test_redirect_removes_authorization_header_on_cross_origin() -> Result<()> {
|
||||||
for status in &[301, 302, 303, 307, 308] {
|
for status in &[301, 302, 303, 307, 308] {
|
||||||
|
|
|
@ -1416,44 +1416,6 @@ mod tests {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::test]
|
|
||||||
async fn test_redirect_preserve_fragment() -> Result<(), Error> {
|
|
||||||
let redirect_server = MockServer::start().await;
|
|
||||||
|
|
||||||
// Configure the redirect server to respond with a 307 with a relative URL.
|
|
||||||
Mock::given(method("GET"))
|
|
||||||
.respond_with(ResponseTemplate::new(307).insert_header("Location", "/foo".to_string()))
|
|
||||||
.mount(&redirect_server)
|
|
||||||
.await;
|
|
||||||
|
|
||||||
Mock::given(method("GET"))
|
|
||||||
.and(path_regex("/foo"))
|
|
||||||
.respond_with(ResponseTemplate::new(200))
|
|
||||||
.mount(&redirect_server)
|
|
||||||
.await;
|
|
||||||
|
|
||||||
let cache = Cache::temp()?;
|
|
||||||
let registry_client = RegistryClientBuilder::new(cache).build();
|
|
||||||
let client = registry_client.cached_client().uncached();
|
|
||||||
|
|
||||||
let mut url = DisplaySafeUrl::parse(&redirect_server.uri())?;
|
|
||||||
url.set_fragment(Some("fragment"));
|
|
||||||
|
|
||||||
assert_eq!(
|
|
||||||
client
|
|
||||||
.for_host(&url)
|
|
||||||
.get(Url::from(url.clone()))
|
|
||||||
.send()
|
|
||||||
.await?
|
|
||||||
.url()
|
|
||||||
.to_string(),
|
|
||||||
format!("{}/foo#fragment", redirect_server.uri()),
|
|
||||||
"Requests should preserve fragment"
|
|
||||||
);
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn ignore_failing_files() {
|
fn ignore_failing_files() {
|
||||||
// 1.7.7 has an invalid requires-python field (double comma), 1.7.8 is valid
|
// 1.7.7 has an invalid requires-python field (double comma), 1.7.8 is valid
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue