Skip to main content

sova_testing/
assert.rs

1//! Uniform JSON snapshot helpers (insta).
2
3/// Assert JSON snapshot with common redactions (`id`, timestamps).
4#[macro_export]
5macro_rules! assert_json_snapshot {
6    ($name:expr, $value:expr) => {{
7        let mut settings = ::insta::Settings::clone_current();
8        $crate::with_json_redactions(&mut settings);
9        settings.bind(|| {
10            ::insta::assert_json_snapshot!($name, $value);
11        });
12    }};
13    ($value:expr) => {{
14        let mut settings = ::insta::Settings::clone_current();
15        $crate::with_json_redactions(&mut settings);
16        settings.bind(|| {
17            ::insta::assert_json_snapshot!($value);
18        });
19    }};
20}
21
22/// Redact volatile fields commonly present in API JSON.
23pub fn with_json_redactions(settings: &mut insta::Settings) {
24    settings.add_filter(r#""id"\s*:\s*\d+"#, r#""id": "[id]""#);
25    settings.add_filter(
26        r#""created_at"\s*:\s*"[^"]*""#,
27        r#""created_at": "[datetime]""#,
28    );
29    settings.add_filter(
30        r#""updated_at"\s*:\s*"[^"]*""#,
31        r#""updated_at": "[datetime]""#,
32    );
33    settings.add_filter(
34        r#""read_at"\s*:\s*("[^"]*"|null)"#,
35        r#""read_at": "[read_at]""#,
36    );
37}