Skip to content

Commit

Permalink
--as-of tag testing for params (#538)
Browse files Browse the repository at this point in the history
  • Loading branch information
erratic-pattern authored Jul 24, 2023
1 parent 9b63ff3 commit 6158c74
Show file tree
Hide file tree
Showing 3 changed files with 177 additions and 5 deletions.
16 changes: 14 additions & 2 deletions tests/harness/src/output/parameter.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,28 @@ impl ParamList {
}
}

#[derive(Clone, Debug, Deserialize)]
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Ord, PartialOrd)]
#[serde(rename_all = "PascalCase")]
pub struct Param {
pub name: String,
pub value: String,
pub raw: String,
pub raw: Option<String>,
#[serde(rename = "Modified At")]
pub modified_at: Option<String>,
#[serde(rename = "Created At")]
pub created_at: Option<String>,
}

pub trait ParseParamListExt {
fn parse_param_list(&self) -> ParamList;
fn get_param(&self, name: &str) -> Option<Param> {
let mut params = self.parse_param_list();
let (index, _) = params
.iter()
.enumerate()
.find(|(_, param)| param.name == name)?;
Some(params.swap_remove(index))
}
}

impl ParseParamListExt for assert_cmd::assert::Assert {
Expand Down
156 changes: 155 additions & 1 deletion tests/test_parameters.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use cloudtruth_config::{CT_ENVIRONMENT, CT_PROJECT};
use cloudtruth_test_harness::prelude::*;
use cloudtruth_test_harness::{output::parameter::ParseParamListExt, prelude::*};
use indoc::{formatdoc, indoc};
use maplit::hashmap;

Expand Down Expand Up @@ -1090,3 +1090,157 @@ fn test_parameters_pagination() {
.success()
.paginated(PAGE_SIZE);
}

#[test]
#[use_harness]
fn test_parameters_as_of_tag() {
let proj = Project::with_prefix("param-tags").create();
let env = Environment::with_prefix("param-tags").create();
let mut envs = hashmap! {
CT_PROJECT => proj.name().as_str(),
CT_ENVIRONMENT => env.name().as_str()
};
cloudtruth!("param set param1 --value original")
.envs(&envs)
.assert()
.success();
let param1 = cloudtruth!("param list --show-times -f json")
.envs(&envs)
.assert()
.success()
.get_param("param1")
.unwrap();
cloudtruth!("param set param1 --value updated")
.envs(&envs)
.assert()
.success();
let param2 = cloudtruth!("param list --show-times -f json")
.envs(&envs)
.assert()
.success()
.get_param("param1")
.unwrap();
cloudtruth!("env tag set {env} my-tag --desc 'quick tag'")
.envs(&envs)
.assert()
.success();
cloudtruth!("param set param1 --value final")
.envs(&envs)
.assert()
.success();
let result = cloudtruth!("param list --show-times -f json --as-of my-tag")
.envs(&envs)
.assert()
.success()
.get_param("param1")
.unwrap();
assert_eq!(result, param2);
let modified_at = param1.modified_at.as_deref().unwrap();
let result = cloudtruth!("param list --show-times -f json --as-of '{modified_at}'")
.envs(&envs)
.assert()
.success()
.get_param("param1")
.unwrap();
assert_eq!(result, param1);
cloudtruth!("env tag set {env} my-tag --time '2021-01-20'")
.envs(&envs)
.assert()
.success();
cloudtruth!("param ls -v --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains("No ProjectLedger matches the given query"));
cloudtruth!("param diff --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains("No ProjectLedger matches the given query"));
cloudtruth!("param env param1 --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains("No ProjectLedger matches the given query"));
cloudtruth!("param export docker --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains("No ProjectLedger matches the given query"));
cloudtruth!("param get param1 --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains("No ProjectLedger matches the given query"));
cloudtruth!("param ls -v --as-of no-such-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains!(
"Tag `no-such-tag` could not be found in environment `{env}`"
));
cloudtruth!("param diff --as-of no-such-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains!(
"Tag `no-such-tag` could not be found in environment `{env}`"
));
cloudtruth!("param env param1 --as-of no-such-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains!(
"Tag `no-such-tag` could not be found in environment `{env}`"
));
cloudtruth!("param export docker --as-of no-such-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains!(
"Tag `no-such-tag` could not be found in environment `{env}`"
));
cloudtruth!("param get param1 --as-of no-such-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains!(
"Tag `no-such-tag` could not be found in environment `{env}`"
));
envs.insert(CT_ENVIRONMENT, "default");
cloudtruth!("param ls -v --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains(
"Tag `my-tag` could not be found in environment `default`",
));
cloudtruth!("param diff --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains(
"Tag `my-tag` could not be found in environment `default`",
));
cloudtruth!("param env param1 --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains(
"Tag `my-tag` could not be found in environment `default`",
));
cloudtruth!("param export docker --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains(
"Tag `my-tag` could not be found in environment `default`",
));
cloudtruth!("param get param1 --as-of my-tag")
.envs(&envs)
.assert()
.failure()
.stderr(contains(
"Tag `my-tag` could not be found in environment `default`",
));
}
10 changes: 8 additions & 2 deletions tests/test_templates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1037,7 +1037,10 @@ fn test_templates_ref_by_param() {
.expect("Could not find parameter 'my_parameter'");
assert_eq!(&param.name, "my_parameter");
assert_eq!(&param.value, "nothing to evaluate here");
assert_eq!(param.raw, format!("{{{{ cloudtruth.templates.{temp} }}}}"));
assert_eq!(
param.raw,
Some(format!("{{{{ cloudtruth.templates.{temp} }}}}"))
);

cloudtruth!("template del -y {temp}")
.envs(&vars)
Expand Down Expand Up @@ -1083,7 +1086,10 @@ fn test_templates_ref_by_param() {
.find_by_name("param1")
.expect("Could not find parameter 'param1'");
assert_eq!("new-param-name = sample value", param.value);
assert_eq!(format!("{{{{ cloudtruth.templates.{temp} }}}}"), param.raw);
assert_eq!(
Some(format!("{{{{ cloudtruth.templates.{temp} }}}}")),
param.raw
);
}

#[test]
Expand Down

0 comments on commit 6158c74

Please sign in to comment.