use crate::evergreen_names::ENTERPRISE_MODULE;
const GEN_SUFFIX: &str = "_gen";
pub fn name_generated_task(
display_name: &str,
sub_task_index: usize,
total_tasks: usize,
is_enterprise: bool,
platform: Option<&str>,
) -> String {
let mut suffix = if is_enterprise {
format!("-{}", ENTERPRISE_MODULE)
} else {
"".to_string()
};
if let Some(platform) = platform {
suffix = format!("-{}{}", platform, suffix)
}
let alignment = (total_tasks as f64).log10().ceil() as usize;
format!(
"{}_{:0fill$}{}",
display_name,
sub_task_index,
suffix,
fill = alignment
)
}
pub fn remove_gen_suffix(task_name: &str) -> &str {
if task_name.ends_with(GEN_SUFFIX) {
let end = task_name.len() - GEN_SUFFIX.len();
&task_name[..end]
} else {
task_name
}
}
#[cfg(test)]
mod tests {
use super::*;
use rstest::*;
#[rstest]
#[case("task", 0, 10, false, None, "task_0")]
#[case("task", 0, 10, false, Some("linux"), "task_0-linux")]
#[case("task", 42, 1001, false, None, "task_0042")]
#[case("task", 42, 1001, false, Some("linux"), "task_0042-linux")]
#[case("task", 0, 10, true, None, "task_0-enterprise")]
#[case("task", 0, 10, true, Some("linux"), "task_0-linux-enterprise")]
#[case("task", 42, 1001, true, None, "task_0042-enterprise")]
#[case("task", 42, 1001, true, Some("linux"), "task_0042-linux-enterprise")]
fn test_name_generated_task_should_not_include_suffix(
#[case] name: &str,
#[case] index: usize,
#[case] total: usize,
#[case] is_enterprise: bool,
#[case] platform: Option<&str>,
#[case] expected: &str,
) {
let task_name = name_generated_task(name, index, total, is_enterprise, platform);
assert_eq!(task_name, expected);
}
#[rstest]
#[case("task_name", "task_name")]
#[case("task_name_gen", "task_name")]
#[case("task_name_", "task_name_")]
fn test_remove_gen_suffix(#[case] original_task: &str, #[case] expected_task: &str) {
assert_eq!(remove_gen_suffix(original_task), expected_task);
}
}