From 7b1474a92e80a0e35c2d20f235c27bfbeea61d74 Mon Sep 17 00:00:00 2001 From: Leynos Date: Mon, 4 Aug 2025 21:48:26 +0100 Subject: [PATCH 1/3] Return TempDir from setup_run_worker --- crates/comenqd/src/daemon.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/crates/comenqd/src/daemon.rs b/crates/comenqd/src/daemon.rs index a3e28d7..872ddb3 100644 --- a/crates/comenqd/src/daemon.rs +++ b/crates/comenqd/src/daemon.rs @@ -331,7 +331,9 @@ mod tests { path.exists() } - async fn setup_run_worker(status: u16) -> (MockServer, Arc, Receiver, Arc) { + async fn setup_run_worker( + status: u16, + ) -> (MockServer, Arc, Receiver, Arc, TempDir) { let dir = tempdir().expect("tempdir"); let cfg = Arc::new(Config { // Use a positive cooldown to ensure retries are throttled. @@ -363,7 +365,7 @@ mod tests { .await; let octo = octocrab_for(&server); - (server, cfg, rx, octo) + (server, cfg, rx, octo, dir) } #[tokio::test] @@ -457,7 +459,7 @@ mod tests { #[tokio::test] async fn run_worker_commits_on_success() { - let (server, cfg, rx, octo) = setup_run_worker(201).await; + let (server, cfg, rx, octo, _dir) = setup_run_worker(201).await; let h = tokio::spawn(run_worker(cfg.clone(), rx, octo)); sleep(Duration::from_millis(50)).await; h.abort(); @@ -467,7 +469,7 @@ mod tests { #[tokio::test] async fn run_worker_requeues_on_error() { - let (server, cfg, rx, octo) = setup_run_worker(500).await; + let (server, cfg, rx, octo, _dir) = setup_run_worker(500).await; let h = tokio::spawn(run_worker(cfg.clone(), rx, octo)); sleep(Duration::from_millis(50)).await; h.abort(); From 80b4b59fff33ec2f16c7b1d01e60f8a0602f1fba Mon Sep 17 00:00:00 2001 From: Leynos Date: Mon, 4 Aug 2025 22:08:10 +0100 Subject: [PATCH 2/3] Refactor worker tests with rstest fixtures --- crates/comenqd/src/daemon.rs | 80 +++++++++++++++++++++++++++++------- 1 file changed, 66 insertions(+), 14 deletions(-) diff --git a/crates/comenqd/src/daemon.rs b/crates/comenqd/src/daemon.rs index 872ddb3..ec20e05 100644 --- a/crates/comenqd/src/daemon.rs +++ b/crates/comenqd/src/daemon.rs @@ -282,6 +282,7 @@ mod tests { //! Tests for the daemon tasks. use super::*; use octocrab::Octocrab; + use rstest::{fixture, rstest}; use std::fs as stdfs; use std::path::Path; use std::sync::Arc; @@ -331,9 +332,18 @@ mod tests { path.exists() } - async fn setup_run_worker( - status: u16, - ) -> (MockServer, Arc, Receiver, Arc, TempDir) { + /// Context dependencies for worker tests. + struct WorkerTestContext { + server: MockServer, + cfg: Arc, + rx: Receiver, + octo: Arc, + // Hold the directory to ensure temporary paths remain valid. + _dir: TempDir, + } + + #[fixture] + async fn worker_test_context(#[default(201)] status: u16) -> WorkerTestContext { let dir = tempdir().expect("tempdir"); let cfg = Arc::new(Config { // Use a positive cooldown to ensure retries are throttled. @@ -365,7 +375,14 @@ mod tests { .await; let octo = octocrab_for(&server); - (server, cfg, rx, octo, dir) + + WorkerTestContext { + server, + cfg, + rx, + octo, + _dir: dir, + } } #[tokio::test] @@ -457,23 +474,58 @@ mod tests { drop(writer); } + #[rstest] #[tokio::test] - async fn run_worker_commits_on_success() { - let (server, cfg, rx, octo, _dir) = setup_run_worker(201).await; - let h = tokio::spawn(run_worker(cfg.clone(), rx, octo)); + async fn run_worker_commits_on_success( + #[future] + #[from(worker_test_context)] + ctx: WorkerTestContext, + ) { + let ctx = ctx.await; + let h = tokio::spawn(run_worker(ctx.cfg.clone(), ctx.rx, ctx.octo)); sleep(Duration::from_millis(50)).await; h.abort(); - assert_eq!(server.received_requests().await.unwrap().len(), 1); - assert_eq!(std::fs::read_dir(&cfg.queue_path).unwrap().count(), 0); + assert_eq!( + ctx.server + .received_requests() + .await + .expect("requests") + .len(), + 1 + ); + assert_eq!( + stdfs::read_dir(&ctx.cfg.queue_path) + .expect("queue_path") + .count(), + 0 + ); } + #[rstest] #[tokio::test] - async fn run_worker_requeues_on_error() { - let (server, cfg, rx, octo, _dir) = setup_run_worker(500).await; - let h = tokio::spawn(run_worker(cfg.clone(), rx, octo)); + async fn run_worker_requeues_on_error( + #[future] + #[with(500)] + #[from(worker_test_context)] + ctx: WorkerTestContext, + ) { + let ctx = ctx.await; + let h = tokio::spawn(run_worker(ctx.cfg.clone(), ctx.rx, ctx.octo)); sleep(Duration::from_millis(50)).await; h.abort(); - assert_eq!(server.received_requests().await.unwrap().len(), 1); - assert!(std::fs::read_dir(&cfg.queue_path).unwrap().count() > 0); + assert_eq!( + ctx.server + .received_requests() + .await + .expect("requests") + .len(), + 1 + ); + assert!( + stdfs::read_dir(&ctx.cfg.queue_path) + .expect("queue_path") + .count() + > 0 + ); } } From 8070394c70bf1f82f9426793d262239f67a5ff35 Mon Sep 17 00:00:00 2001 From: Leynos Date: Mon, 4 Aug 2025 22:51:11 +0100 Subject: [PATCH 3/3] Use expect when reading worker queue --- crates/comenqd/src/daemon.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/comenqd/src/daemon.rs b/crates/comenqd/src/daemon.rs index ec20e05..5eb4caa 100644 --- a/crates/comenqd/src/daemon.rs +++ b/crates/comenqd/src/daemon.rs @@ -495,7 +495,7 @@ mod tests { ); assert_eq!( stdfs::read_dir(&ctx.cfg.queue_path) - .expect("queue_path") + .expect("read queue directory") .count(), 0 ); @@ -523,7 +523,7 @@ mod tests { ); assert!( stdfs::read_dir(&ctx.cfg.queue_path) - .expect("queue_path") + .expect("read queue directory") .count() > 0 );