From 971bf04907d517e71010d1851f625025872ac3a3 Mon Sep 17 00:00:00 2001 From: Matthias Date: Thu, 17 Aug 2023 16:36:34 +0200 Subject: [PATCH] Make suggestion test more robust --- lychee-bin/tests/cli.rs | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/lychee-bin/tests/cli.rs b/lychee-bin/tests/cli.rs index efdc4dea7e..25d793cfb9 100644 --- a/lychee-bin/tests/cli.rs +++ b/lychee-bin/tests/cli.rs @@ -14,6 +14,7 @@ mod cli { use lychee_lib::{InputSource, ResponseBody}; use predicates::str::{contains, is_empty}; use pretty_assertions::assert_eq; + use regex::Regex; use serde::Serialize; use serde_json::Value; use tempfile::NamedTempFile; @@ -1229,18 +1230,34 @@ mod cli { #[test] fn test_suggests_url_alternatives() -> Result<()> { - let mut cmd = main_command(); - let input = fixtures_path().join("INTERNET_ARCHIVE.md"); - - cmd.arg("--suggest") - .arg(input) - .assert() - .failure() - .code(2) - .stdout(contains("Suggestions")) - .stdout(contains("http://web.archive.org/web/")); + for _ in 0..3 { + // This can be flaky. Try up to 3 times + let mut cmd = main_command(); + let input = fixtures_path().join("INTERNET_ARCHIVE.md"); + + cmd.arg("--no-progress").arg("--suggest").arg(input); + + // Run he command and check if the output contains the expected + // suggestions + let assert = cmd.assert(); + let output = assert.get_output(); + let output = std::str::from_utf8(&output.stdout).unwrap(); + + // We're looking for a suggestion that + // - starts with http://web.archive.org/web/ + // - ends with google.com/jobs.html + let re = Regex::new(r"http://web\.archive\.org/web/.*google\.com/jobs\.html").unwrap(); + if re.is_match(output) { + // Test passed + return Ok(()); + } else { + // Wait for a second before retrying + std::thread::sleep(std::time::Duration::from_secs(1)); + } + } - Ok(()) + // If we reached here, it means the test did not pass after multiple attempts + Err("Did not get the expected command output after multiple attempts.".into()) } #[tokio::test]