fabro/lib/crates/fabro-dev/tests/it/docker_build.rs
Bryan Helmkamp a4ee62a8a4
refactor(dev): dedupe shared helpers, remove check-boundary
Consolidate workspace_root, PlannedCommand, shell_arg, markdown_cell, and
replace_generated_region into commands/mod.rs; unify fabro_dev/output_text/
write_file/read_file into tests/it/main.rs. Drop the abandoned check-boundary
subcommand.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 18:10:31 -04:00

93 lines
2.4 KiB
Rust

use super::{fabro_dev, output_text};
#[test]
fn help_lists_docker_build_flags() {
let output = fabro_dev()
.args(["docker-build", "--help"])
.assert()
.success()
.get_output()
.clone();
let stdout = output_text(&output.stdout);
for flag in ["--arch", "--tag", "--compile-only", "--dry-run"] {
assert!(
stdout.contains(flag),
"docker-build help should list {flag}:\n{stdout}"
);
}
}
#[test]
fn invalid_arch_fails_with_clap_error() {
let output = fabro_dev()
.args(["docker-build", "--arch", "invalid"])
.assert()
.failure()
.code(2)
.get_output()
.clone();
let stderr = output_text(&output.stderr);
assert!(
stderr.contains("invalid value 'invalid'"),
"invalid arch should be rejected by clap:\n{stderr}"
);
}
#[test]
fn dry_run_prints_equivalent_build_commands() {
let output = fabro_dev()
.args([
"docker-build",
"--arch",
"amd64",
"--tag",
"fabro:smoke",
"--dry-run",
])
.assert()
.success()
.get_output()
.clone();
let stdout = output_text(&output.stdout);
assert!(
stdout.contains("docker run --rm --platform linux/amd64"),
"dry-run should print builder docker run:\n{stdout}"
);
assert!(
stdout.contains("cargo zigbuild --release -p fabro-cli --target x86_64-unknown-linux-musl"),
"dry-run should print cargo-zigbuild target:\n{stdout}"
);
assert!(
stdout.contains("docker build --platform linux/amd64 -t fabro:smoke ."),
"dry-run should print image build command:\n{stdout}"
);
}
#[test]
fn dry_run_compile_only_skips_image_build() {
let output = fabro_dev()
.args([
"docker-build",
"--arch",
"arm64",
"--compile-only",
"--dry-run",
])
.assert()
.success()
.get_output()
.clone();
let stdout = output_text(&output.stdout);
assert!(
stdout.contains("docker-context/arm64/fabro"),
"dry-run compile-only should print staged binary path:\n{stdout}"
);
assert!(
!stdout.contains("docker build --platform"),
"dry-run compile-only should not print image build:\n{stdout}"
);
}