Add unit tests for HTTP commands. (#8267)

# Description

Following the comment from @fdncred:
https://github.com/nushell/nushell/pull/8144#issuecomment-1442514338. I
added some unit tests for HTTP commands. The tests are not exhaustive,
but at least, this is a first good step IMO.

# User-Facing Changes

None.

# Tests + Formatting

Don't forget to add tests that cover your changes.

Make sure you've run and fixed any issues with these commands:

- `cargo fmt --all -- --check` to check standard code formatting (`cargo
fmt --all` applies these changes)
- `cargo clippy --workspace -- -D warnings -D clippy::unwrap_used -A
clippy::needless_collect` to check that you're using the standard code
style
- `cargo test --workspace` to check that all tests pass

# After Submitting

If your PR had any user-facing changes, update [the
documentation](https://github.com/nushell/nushell.github.io) after the
PR is merged, if necessary. This will help us keep the docs up to date.
This commit is contained in:
Jérémy Audiger
2023-03-02 20:05:18 +01:00
committed by GitHub
parent 12483fac92
commit c1d76bfac7
10 changed files with 476 additions and 0 deletions

View File

@ -0,0 +1,44 @@
use mockito::Server;
use nu_test_support::{nu, pipeline};
use reqwest::StatusCode;
#[test]
fn http_delete_is_success() {
let mut server = Server::new();
let _mock = server.mock("DELETE", "/").create();
let actual = nu!(pipeline(
format!(
r#"
http delete {url}
"#,
url = server.url()
)
.as_str()
));
assert!(actual.out.is_empty())
}
#[test]
fn http_delete_failed_due_to_server_error() {
let mut server = Server::new();
let _mock = server
.mock("DELETE", "/")
.with_status(StatusCode::BAD_REQUEST.as_u16() as usize)
.create();
let actual = nu!(pipeline(
format!(
r#"
http delete {url}
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Bad request (400)"))
}

View File

@ -0,0 +1,44 @@
use mockito::Server;
use nu_test_support::{nu, pipeline};
use reqwest::StatusCode;
#[test]
fn http_get_is_success() {
let mut server = Server::new();
let _mock = server.mock("GET", "/").with_body("foo").create();
let actual = nu!(pipeline(
format!(
r#"
http get {url}
"#,
url = server.url()
)
.as_str()
));
assert_eq!(actual.out, "foo")
}
#[test]
fn http_get_failed_due_to_server_error() {
let mut server = Server::new();
let _mock = server
.mock("GET", "/")
.with_status(StatusCode::BAD_REQUEST.as_u16() as usize)
.create();
let actual = nu!(pipeline(
format!(
r#"
http get {url}
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Bad request (400)"))
}

View File

@ -0,0 +1,45 @@
use mockito::Server;
use nu_test_support::{nu, pipeline};
use reqwest::StatusCode;
#[test]
fn http_head_is_success() {
let mut server = Server::new();
let _mock = server.mock("HEAD", "/").with_header("foo", "bar").create();
let actual = nu!(pipeline(
format!(
r#"
http head {url}
"#,
url = server.url()
)
.as_str()
));
assert!(actual.out.contains("foo"));
assert!(actual.out.contains("bar"));
}
#[test]
fn http_head_failed_due_to_server_error() {
let mut server = Server::new();
let _mock = server
.mock("HEAD", "/")
.with_status(StatusCode::BAD_REQUEST.as_u16() as usize)
.create();
let actual = nu!(pipeline(
format!(
r#"
http head {url}
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Bad request (400)"))
}

View File

@ -0,0 +1,6 @@
mod delete;
mod get;
mod head;
mod patch;
mod post;
mod put;

View File

@ -0,0 +1,82 @@
use mockito::Server;
use nu_test_support::{nu, pipeline};
use reqwest::StatusCode;
#[test]
fn http_patch_is_success() {
let mut server = Server::new();
let _mock = server.mock("PATCH", "/").match_body("foo").create();
let actual = nu!(pipeline(
format!(
r#"
http patch {url} "foo"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.out.is_empty())
}
#[test]
fn http_patch_failed_due_to_server_error() {
let mut server = Server::new();
let _mock = server
.mock("PATCH", "/")
.with_status(StatusCode::BAD_REQUEST.as_u16() as usize)
.create();
let actual = nu!(pipeline(
format!(
r#"
http patch {url} "body"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Bad request (400)"))
}
#[test]
fn http_patch_failed_due_to_missing_body() {
let mut server = Server::new();
let _mock = server.mock("PATCH", "/").create();
let actual = nu!(pipeline(
format!(
r#"
http patch {url}
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Usage: http patch"))
}
#[test]
fn http_patch_failed_due_to_unexpected_body() {
let mut server = Server::new();
let _mock = server.mock("PATCH", "/").match_body("foo").create();
let actual = nu!(pipeline(
format!(
r#"
http patch {url} "bar"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Cannot make request"))
}

View File

@ -0,0 +1,82 @@
use mockito::Server;
use nu_test_support::{nu, pipeline};
use reqwest::StatusCode;
#[test]
fn http_post_is_success() {
let mut server = Server::new();
let _mock = server.mock("POST", "/").match_body("foo").create();
let actual = nu!(pipeline(
format!(
r#"
http post {url} "foo"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.out.is_empty())
}
#[test]
fn http_post_failed_due_to_server_error() {
let mut server = Server::new();
let _mock = server
.mock("POST", "/")
.with_status(StatusCode::BAD_REQUEST.as_u16() as usize)
.create();
let actual = nu!(pipeline(
format!(
r#"
http post {url} "body"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Bad request (400)"))
}
#[test]
fn http_post_failed_due_to_missing_body() {
let mut server = Server::new();
let _mock = server.mock("POST", "/").create();
let actual = nu!(pipeline(
format!(
r#"
http post {url}
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Usage: http post"))
}
#[test]
fn http_post_failed_due_to_unexpected_body() {
let mut server = Server::new();
let _mock = server.mock("POST", "/").match_body("foo").create();
let actual = nu!(pipeline(
format!(
r#"
http post {url} "bar"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Cannot make request"))
}

View File

@ -0,0 +1,82 @@
use mockito::Server;
use nu_test_support::{nu, pipeline};
use reqwest::StatusCode;
#[test]
fn http_put_is_success() {
let mut server = Server::new();
let _mock = server.mock("PUT", "/").match_body("foo").create();
let actual = nu!(pipeline(
format!(
r#"
http put {url} "foo"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.out.is_empty())
}
#[test]
fn http_put_failed_due_to_server_error() {
let mut server = Server::new();
let _mock = server
.mock("PUT", "/")
.with_status(StatusCode::BAD_REQUEST.as_u16() as usize)
.create();
let actual = nu!(pipeline(
format!(
r#"
http put {url} "body"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Bad request (400)"))
}
#[test]
fn http_put_failed_due_to_missing_body() {
let mut server = Server::new();
let _mock = server.mock("PUT", "/").create();
let actual = nu!(pipeline(
format!(
r#"
http put {url}
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Usage: http put"))
}
#[test]
fn http_put_failed_due_to_unexpected_body() {
let mut server = Server::new();
let _mock = server.mock("PUT", "/").match_body("foo").create();
let actual = nu!(pipeline(
format!(
r#"
http put {url} "bar"
"#,
url = server.url()
)
.as_str()
));
assert!(actual.err.contains("Cannot make request"))
}

View File

@ -1 +1,2 @@
mod http;
mod port;