mirror of
https://gitlab.computer.surgery/matrix/grapevine.git
synced 2025-12-17 07:41:23 +01:00
Add a "check-config" command to validate config files & tests for it
This commit is contained in:
parent
70ee206031
commit
26ba489aa3
24 changed files with 492 additions and 0 deletions
95
tests/integrations/check_config.rs
Normal file
95
tests/integrations/check_config.rs
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
use std::{
|
||||
path::{Path, PathBuf},
|
||||
process::Output,
|
||||
};
|
||||
|
||||
use assert_cmd::Command;
|
||||
|
||||
type TestError = Box<dyn std::error::Error>;
|
||||
type TestResult = Result<(), TestError>;
|
||||
|
||||
fn fixture_path<P>(name: P) -> PathBuf
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
PathBuf::from("tests/integrations/fixtures/check_config").join(name)
|
||||
}
|
||||
|
||||
fn run<P>(file: P) -> Result<Output, TestError>
|
||||
where
|
||||
P: AsRef<Path>,
|
||||
{
|
||||
Command::cargo_bin("grapevine")?
|
||||
.args(["check-config", "--log-format=json", "-c"])
|
||||
.arg(fixture_path(file))
|
||||
.output()
|
||||
.map_err(Into::into)
|
||||
}
|
||||
|
||||
macro_rules! make_snapshot_test {
|
||||
($name:ident, $description:expr, $fixture_name:expr $(,)?) => {
|
||||
#[test]
|
||||
fn $name() -> TestResult {
|
||||
let output = run($fixture_name)?;
|
||||
|
||||
let stdout = String::from_utf8(output.stdout)?;
|
||||
let stderr = String::from_utf8(output.stderr)?;
|
||||
let status_code = output.status.code();
|
||||
|
||||
insta::with_settings!({
|
||||
description => $description,
|
||||
omit_expression => true,
|
||||
snapshot_suffix => "stdout",
|
||||
}, {
|
||||
insta::assert_snapshot!(stdout);
|
||||
});
|
||||
|
||||
let stderr_parse = serde_json::Deserializer::from_str(&stderr)
|
||||
.into_iter::<serde_json::Value>()
|
||||
.collect::<Result<Vec<_>, _>>();
|
||||
insta::with_settings!({
|
||||
description => $description,
|
||||
omit_expression => true,
|
||||
snapshot_suffix => "stderr",
|
||||
}, {
|
||||
if let Ok(stderr_json) = stderr_parse {
|
||||
insta::assert_json_snapshot!(stderr_json, {
|
||||
".*.timestamp" => "[timestamp]"
|
||||
});
|
||||
} else {
|
||||
insta::assert_snapshot!(stderr);
|
||||
}
|
||||
});
|
||||
|
||||
insta::with_settings!({
|
||||
description => $description,
|
||||
omit_expression => true,
|
||||
snapshot_suffix => "status_code",
|
||||
}, {
|
||||
insta::assert_debug_snapshot!(status_code);
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
make_snapshot_test!(valid_config, "A normal config is valid", "valid.toml");
|
||||
|
||||
make_snapshot_test!(
|
||||
minimal_valid_config,
|
||||
"A configuration containing only the required keys is valid",
|
||||
"minimal-valid.toml",
|
||||
);
|
||||
|
||||
make_snapshot_test!(
|
||||
invalid_keys,
|
||||
"A config with invalid keys fails",
|
||||
"invalid-keys.toml",
|
||||
);
|
||||
|
||||
make_snapshot_test!(
|
||||
invalid_values,
|
||||
"A config with invalid values fails",
|
||||
"invalid-values.toml",
|
||||
);
|
||||
Loading…
Add table
Add a link
Reference in a new issue