From 006ee6d3befff8d81749efb0d447f0b6d2d4e18d Mon Sep 17 00:00:00 2001 From: Matthias Endler Date: Thu, 17 Aug 2023 16:54:59 +0200 Subject: [PATCH] Make suggestion test more robust (#1229) --- lychee-bin/tests/cli.rs | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/lychee-bin/tests/cli.rs b/lychee-bin/tests/cli.rs index efdc4de..66a39bd 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,33 @@ mod cli { #[test] fn test_suggests_url_alternatives() -> Result<()> { - let mut cmd = main_command(); - let input = fixtures_path().join("INTERNET_ARCHIVE.md"); + 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("--suggest") - .arg(input) - .assert() - .failure() - .code(2) - .stdout(contains("Suggestions")) - .stdout(contains("http://web.archive.org/web/")); + cmd.arg("--no-progress").arg("--suggest").arg(input); - Ok(()) + // Run he command and check if the output contains the expected + // suggestions + let assert = cmd.assert(); + let output = assert.get_output(); + + // 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(&String::from_utf8_lossy(&output.stdout)) { + // Test passed + return Ok(()); + } else { + // Wait for a second before retrying + std::thread::sleep(std::time::Duration::from_secs(1)); + } + } + + // 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]