Fix record-to-JSON conversion for HTTP commands (#8663)

This PR fixes a bug introduced in
https://github.com/nushell/nushell/pull/8571.

We were accidentally converting a `Result<Value, ShellError>` to JSON
instead of converting a `Value`. The upshot was that we were sending
JSON like `{"Ok":{"foo":"bar"}}` instead of `{"foo":"bar"}`.

This was an easy bug to miss, because `ureq::send_json()` accepts any
`impl serde::Serialize`. I've added a test to prevent regression.
This commit is contained in:
Reilly Wood
2023-03-29 11:55:51 -07:00
committed by GitHub
parent a49e5b30ff
commit 995603b08c
2 changed files with 25 additions and 10 deletions

View File

@ -76,3 +76,21 @@ fn http_post_failed_due_to_unexpected_body() {
assert!(actual.err.contains("Cannot make request"))
}
#[test]
fn http_post_json_is_success() {
let mut server = Server::new();
let mock = server
.mock("POST", "/")
.match_body(r#"{"foo":"bar"}"#)
.create();
let actual = nu!(format!(
r#"http post -t 'application/json' {url} {{foo: 'bar'}}"#,
url = server.url()
));
mock.assert();
assert!(actual.out.is_empty())
}