diff --git a/Cargo.lock b/Cargo.lock index 2f9bcd749..8d3c87b80 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3727,6 +3727,7 @@ dependencies = [ "minijinja-contrib", "oauth2-types", "rand 0.8.5", + "rand_chacha 0.3.1", "serde", "serde_json", "serde_urlencoded", diff --git a/crates/templates/Cargo.toml b/crates/templates/Cargo.toml index ffe2dbf74..11bc3380b 100644 --- a/crates/templates/Cargo.toml +++ b/crates/templates/Cargo.toml @@ -42,3 +42,6 @@ mas-i18n.workspace = true mas-iana.workspace = true mas-router.workspace = true mas-spa.workspace = true + +[dev-dependencies] +rand_chacha.workspace = true diff --git a/crates/templates/src/lib.rs b/crates/templates/src/lib.rs index a57f718f0..3c3ea7391 100644 --- a/crates/templates/src/lib.rs +++ b/crates/templates/src/lib.rs @@ -482,14 +482,15 @@ impl Templates { #[cfg(test)] mod tests { + use rand::SeedableRng; + use super::*; #[tokio::test] async fn check_builtin_templates() { #[allow(clippy::disallowed_methods)] let now = chrono::Utc::now(); - #[allow(clippy::disallowed_methods)] - let rng = rand::thread_rng(); + let rng = rand_chacha::ChaCha8Rng::from_seed([42; 32]); let path = Utf8Path::new(env!("CARGO_MANIFEST_DIR")).join("../../templates/"); let url_builder = UrlBuilder::new("https://example.com/".parse().unwrap(), None, None); @@ -517,6 +518,11 @@ mod tests { ) .await .unwrap(); - templates.check_render(now, &rng).unwrap(); + + // Check the renders are deterministic, when given the same rng + let render1 = templates.check_render(now, &rng).unwrap(); + let render2 = templates.check_render(now, &rng).unwrap(); + + assert_eq!(render1, render2); } }