use super::TestFetcher;
use crate::fetch::request::JsRequest;
use crate::fetch::response::JsResponse;
use crate::test::{TestAction, run_test_actions};
use boa_engine::{js_str, js_string};
use either::Either;
use http::{Response, Uri};
#[test]
fn request_constructor() {
run_test_actions([
TestAction::inspect_context(|ctx| {
let mut fetcher = TestFetcher::default();
fetcher.add_response(
Uri::from_static("http://unit.test"),
Response::new("Hello World".as_bytes().to_vec()),
);
crate::fetch::register(fetcher, None, ctx).expect("failed to register fetch");
}),
TestAction::run(
r#"
const request = new Request("http://unit.test");
globalThis.response = fetch(request);
"#,
),
TestAction::inspect_context(|ctx| {
let response = ctx.global_object().get(js_str!("response"), ctx).unwrap();
let response = response.as_promise().unwrap().await_blocking(ctx).unwrap();
assert_eq!(
response
.as_object()
.as_ref()
.and_then(|o| o.downcast_ref::<JsResponse>())
.unwrap()
.body()
.as_ref()
.as_slice(),
"Hello World".as_bytes()
);
}),
TestAction::inspect_context(|_ctx| {
let request =
JsRequest::create_from_js(Either::Left(js_string!("http://example.com")), None)
.unwrap();
assert_eq!(request.uri().to_string(), "http://example.com/");
}),
]);
}