From c2ece55040d4f1f03e189636895645435d762322 Mon Sep 17 00:00:00 2001 From: cyqsimon <28627918+cyqsimon@users.noreply.github.com> Date: Wed, 20 Jul 2022 20:09:55 +0800 Subject: Fix tests --- tests/qrcode.rs | 85 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 68 insertions(+), 17 deletions(-) (limited to 'tests') diff --git a/tests/qrcode.rs b/tests/qrcode.rs index a9c27fe..eb37abc 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -1,43 +1,94 @@ mod fixtures; -use fixtures::{server, server_no_stderr, Error, TestServer}; +use assert_cmd::prelude::CommandCargoExt; +use assert_fs::TempDir; +use fixtures::{port, server_no_stderr, tmpdir, Error, TestServer}; use reqwest::StatusCode; use rstest::rstest; -use select::document::Document; -use select::predicate::Attr; -use std::iter::repeat_with; +use std::process::Command; +use std::thread::sleep; +use std::time::Duration; + +fn run_in_faketty_kill_and_get_stdout(template: &Command) -> Result { + use fake_tty::{bash_command, get_stdout}; + + let cmd = { + let bin = template.get_program().to_str().expect("not UTF8"); + let args = template + .get_args() + .map(|s| s.to_str().expect("not UTF8")) + .collect::>() + .join(" "); + format!("{} {}", bin, args) + }; + let mut child = bash_command(&cmd).spawn()?; + + sleep(Duration::from_secs(1)); + + child.kill()?; + let output = child.wait_with_output().expect("Failed to read stdout"); + let all_text = get_stdout(output.stdout)?; + + Ok(all_text) +} #[rstest] -fn hide_qrcode_element(server: TestServer) -> Result<(), Error> { - let body = reqwest::blocking::get(server.url())?.error_for_status()?; - let parsed = Document::from_read(body)?; - assert!(parsed.find(Attr("id", "qrcode")).next().is_none()); +fn qrcode_hidden_in_tty_when_disabled(tmpdir: TempDir, port: u16) -> Result<(), Error> { + let mut template = Command::cargo_bin("miniserve")?; + template.arg("-p").arg(port.to_string()).arg(tmpdir.path()); + let output = run_in_faketty_kill_and_get_stdout(&template)?; + + assert!(!output.contains("QR code for ")); Ok(()) } #[rstest] -fn show_qrcode_element(#[with(&["-q"])] server: TestServer) -> Result<(), Error> { - let body = reqwest::blocking::get(server.url())?.error_for_status()?; - let parsed = Document::from_read(body)?; - assert!(parsed.find(Attr("id", "qrcode")).next().is_some()); +fn qrcode_shown_in_tty_when_enabled(tmpdir: TempDir, port: u16) -> Result<(), Error> { + let mut template = Command::cargo_bin("miniserve")?; + template + .arg("-p") + .arg(port.to_string()) + .arg("-q") + .arg(tmpdir.path()); + + let output = run_in_faketty_kill_and_get_stdout(&template)?; + + assert!(output.contains("QR code for ")); + Ok(()) +} + +#[rstest] +fn qrcode_hidden_in_non_tty_when_enabled(tmpdir: TempDir, port: u16) -> Result<(), Error> { + let mut child = Command::cargo_bin("miniserve")? + .arg("-p") + .arg(port.to_string()) + .arg("-q") + .arg(tmpdir.path()) + .spawn()?; + + sleep(Duration::from_secs(1)); + + child.kill()?; + let output = child.wait_with_output().expect("Failed to read stdout"); + let stdout = String::from_utf8(output.stdout)?; + assert!(!stdout.contains("QR code for ")); Ok(()) } #[rstest] fn get_svg_qrcode(#[from(server_no_stderr)] server: TestServer) -> Result<(), Error> { // Ok - let resp = reqwest::blocking::get(server.url().join("/?qrcode=test")?)?; + let resp = reqwest::blocking::get(server.url().join("?qrcode=test")?)?; assert_eq!(resp.status(), StatusCode::OK); - assert_eq!(resp.headers()["Content-Type"], "image/svg+xml"); let body = resp.text()?; - assert!(body.starts_with(" Date: Sat, 23 Jul 2022 00:46:55 +0800 Subject: Disable broken tests for Windows --- tests/qrcode.rs | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'tests') diff --git a/tests/qrcode.rs b/tests/qrcode.rs index eb37abc..21dae6a 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -9,6 +9,7 @@ use std::process::Command; use std::thread::sleep; use std::time::Duration; +#[cfg(not(windows))] fn run_in_faketty_kill_and_get_stdout(template: &Command) -> Result { use fake_tty::{bash_command, get_stdout}; @@ -33,6 +34,8 @@ fn run_in_faketty_kill_and_get_stdout(template: &Command) -> Result Result<(), Error> { let mut template = Command::cargo_bin("miniserve")?; template.arg("-p").arg(port.to_string()).arg(tmpdir.path()); @@ -44,6 +47,8 @@ fn qrcode_hidden_in_tty_when_disabled(tmpdir: TempDir, port: u16) -> Result<(), } #[rstest] +// Disabled for Windows because `fake_tty` does not currently support it. +#[cfg(not(windows))] fn qrcode_shown_in_tty_when_enabled(tmpdir: TempDir, port: u16) -> Result<(), Error> { let mut template = Command::cargo_bin("miniserve")?; template -- cgit v1.2.3 From 8c5a5b6bce1c846279aa8fb215d6b412ca134338 Mon Sep 17 00:00:00 2001 From: cyqsimon <28627918+cyqsimon@users.noreply.github.com> Date: Tue, 26 Jul 2022 15:20:10 +0800 Subject: Fix QR test screwing up terminal --- tests/qrcode.rs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/qrcode.rs b/tests/qrcode.rs index 21dae6a..32d9438 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -11,6 +11,8 @@ use std::time::Duration; #[cfg(not(windows))] fn run_in_faketty_kill_and_get_stdout(template: &Command) -> Result { + use std::process::Stdio; + use fake_tty::{bash_command, get_stdout}; let cmd = { @@ -22,7 +24,7 @@ fn run_in_faketty_kill_and_get_stdout(template: &Command) -> Result Date: Mon, 22 Aug 2022 18:21:23 +0800 Subject: Fix QR code test --- tests/qrcode.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/qrcode.rs b/tests/qrcode.rs index 32d9438..c2bebd6 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -5,14 +5,12 @@ use assert_fs::TempDir; use fixtures::{port, server_no_stderr, tmpdir, Error, TestServer}; use reqwest::StatusCode; use rstest::rstest; -use std::process::Command; +use std::process::{Command, Stdio}; use std::thread::sleep; use std::time::Duration; #[cfg(not(windows))] fn run_in_faketty_kill_and_get_stdout(template: &Command) -> Result { - use std::process::Stdio; - use fake_tty::{bash_command, get_stdout}; let cmd = { @@ -72,6 +70,8 @@ fn qrcode_hidden_in_non_tty_when_enabled(tmpdir: TempDir, port: u16) -> Result<( .arg(port.to_string()) .arg("-q") .arg(tmpdir.path()) + .stdout(Stdio::piped()) + .stderr(Stdio::piped()) .spawn()?; sleep(Duration::from_secs(1)); -- cgit v1.2.3 From 97db5065f4c02835509560b920cbd9680eac3f78 Mon Sep 17 00:00:00 2001 From: cyqsimon <28627918+cyqsimon@users.noreply.github.com> Date: Thu, 1 Sep 2022 19:41:49 +0800 Subject: Remove outdated test --- tests/qrcode.rs | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) (limited to 'tests') diff --git a/tests/qrcode.rs b/tests/qrcode.rs index c2bebd6..162c33a 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -2,8 +2,7 @@ mod fixtures; use assert_cmd::prelude::CommandCargoExt; use assert_fs::TempDir; -use fixtures::{port, server_no_stderr, tmpdir, Error, TestServer}; -use reqwest::StatusCode; +use fixtures::{port, tmpdir, Error}; use rstest::rstest; use std::process::{Command, Stdio}; use std::thread::sleep; @@ -83,22 +82,3 @@ fn qrcode_hidden_in_non_tty_when_enabled(tmpdir: TempDir, port: u16) -> Result<( assert!(!stdout.contains("QR code for ")); Ok(()) } - -#[rstest] -fn get_svg_qrcode(#[from(server_no_stderr)] server: TestServer) -> Result<(), Error> { - // Ok - let resp = reqwest::blocking::get(server.url().join("?qrcode=test")?)?; - - assert_eq!(resp.status(), StatusCode::OK); - let body = resp.text()?; - assert!(body.contains("qr_code_page")); - assert!(body.contains(" Date: Thu, 15 Sep 2022 18:32:49 +0800 Subject: Restores webpage QR tests --- tests/qrcode.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/qrcode.rs b/tests/qrcode.rs index 162c33a..de8ac88 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -2,12 +2,32 @@ mod fixtures; use assert_cmd::prelude::CommandCargoExt; use assert_fs::TempDir; -use fixtures::{port, tmpdir, Error}; +use fixtures::{port, server, tmpdir, Error, TestServer}; use rstest::rstest; +use select::document::Document; +use select::predicate::Attr; use std::process::{Command, Stdio}; use std::thread::sleep; use std::time::Duration; +#[rstest] +fn webpage_hides_qrcode_when_disabled(server: TestServer) -> Result<(), Error> { + let body = reqwest::blocking::get(server.url())?.error_for_status()?; + let parsed = Document::from_read(body)?; + assert!(parsed.find(Attr("id", "qrcode")).next().is_none()); + + Ok(()) +} + +#[rstest] +fn webpage_hides_qrcode_when_enabled(#[with(&["-q"])] server: TestServer) -> Result<(), Error> { + let body = reqwest::blocking::get(server.url())?.error_for_status()?; + let parsed = Document::from_read(body)?; + assert!(parsed.find(Attr("id", "qrcode")).next().is_some()); + + Ok(()) +} + #[cfg(not(windows))] fn run_in_faketty_kill_and_get_stdout(template: &Command) -> Result { use fake_tty::{bash_command, get_stdout}; -- cgit v1.2.3 From af436baf57b274a0146628711e2c8d407c70eff1 Mon Sep 17 00:00:00 2001 From: cyqsimon <28627918+cyqsimon@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:48:11 +0800 Subject: Fix test name --- tests/qrcode.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/qrcode.rs b/tests/qrcode.rs index de8ac88..3dbd4bd 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -20,7 +20,7 @@ fn webpage_hides_qrcode_when_disabled(server: TestServer) -> Result<(), Error> { } #[rstest] -fn webpage_hides_qrcode_when_enabled(#[with(&["-q"])] server: TestServer) -> Result<(), Error> { +fn webpage_shows_qrcode_when_enabled(#[with(&["-q"])] server: TestServer) -> Result<(), Error> { let body = reqwest::blocking::get(server.url())?.error_for_status()?; let parsed = Document::from_read(body)?; assert!(parsed.find(Attr("id", "qrcode")).next().is_some()); -- cgit v1.2.3 From 2d63d3d7a25483293789546a347f6235ef0aea67 Mon Sep 17 00:00:00 2001 From: cyqsimon <28627918+cyqsimon@users.noreply.github.com> Date: Thu, 15 Sep 2022 19:54:50 +0800 Subject: Add tooltip on QR code --- tests/qrcode.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/qrcode.rs b/tests/qrcode.rs index 3dbd4bd..98a3c67 100644 --- a/tests/qrcode.rs +++ b/tests/qrcode.rs @@ -23,7 +23,14 @@ fn webpage_hides_qrcode_when_disabled(server: TestServer) -> Result<(), Error> { fn webpage_shows_qrcode_when_enabled(#[with(&["-q"])] server: TestServer) -> Result<(), Error> { let body = reqwest::blocking::get(server.url())?.error_for_status()?; let parsed = Document::from_read(body)?; - assert!(parsed.find(Attr("id", "qrcode")).next().is_some()); + let qr_container = parsed + .find(Attr("id", "qrcode")) + .next() + .ok_or("QR container not found")?; + let tooltip = qr_container + .attr("title") + .ok_or("QR container has no title")?; + assert_eq!(tooltip, server.url().as_str()); Ok(()) } -- cgit v1.2.3