use crate::common::{run_rsconstruct, run_rsconstruct_with_env, setup_test_project};
use std::fs;
#[test]
fn dry_run_shows_build_actions() {
let temp_dir = setup_test_project();
let project_path = temp_dir.path();
fs::write(project_path.join("tera.templates/dry.txt.tera"), "hello").unwrap();
let output =
run_rsconstruct_with_env(project_path, &["build", "--dry-run"], &[("NO_COLOR", "1")]);
assert!(output.status.success());
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("BUILD"),
"Dry run should show BUILD for unbuilt product: {}",
stdout
);
assert!(stdout.contains("Total"), "Dry run should show Total");
assert!(
!project_path.join("dry.txt").exists(),
"Dry run should not create output files"
);
let build = run_rsconstruct(project_path, &["build"]);
assert!(build.status.success());
let output2 =
run_rsconstruct_with_env(project_path, &["build", "--dry-run"], &[("NO_COLOR", "1")]);
assert!(output2.status.success());
let stdout2 = String::from_utf8_lossy(&output2.stdout);
assert!(
stdout2.contains("SKIP"),
"Dry run after build should show SKIP: {}",
stdout2
);
}
#[test]
fn dry_run_short_flag() {
let temp_dir = setup_test_project();
let project_path = temp_dir.path();
fs::write(project_path.join("tera.templates/short.txt.tera"), "hello").unwrap();
let output = run_rsconstruct_with_env(project_path, &["build", "-n"], &[("NO_COLOR", "1")]);
assert!(
output.status.success(),
"Short flag -n should work: {}",
String::from_utf8_lossy(&output.stderr)
);
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("BUILD"),
"-n flag should show BUILD: {}",
stdout
);
assert!(
!project_path.join("short.txt").exists(),
"-n should not create output files"
);
}
#[test]
fn dry_run_with_force() {
let temp_dir = setup_test_project();
let project_path = temp_dir.path();
fs::write(
project_path.join("tera.templates/force_dry.txt.tera"),
"hello",
)
.unwrap();
let build = run_rsconstruct(project_path, &["build"]);
assert!(build.status.success());
let output = run_rsconstruct_with_env(
project_path,
&["build", "--dry-run", "--force"],
&[("NO_COLOR", "1")],
);
assert!(output.status.success());
let stdout = String::from_utf8_lossy(&output.stdout);
assert!(
stdout.contains("BUILD"),
"Dry run with --force should show BUILD: {}",
stdout
);
assert!(
!stdout.contains("SKIP"),
"Dry run with --force should not show SKIP: {}",
stdout
);
}