Phase C4 executor 의 마지막 `fix(test): clippy + fmt fixes` commit 이 test file 부분만 fmt 적용. workspace 전체 fmt 누락 발견 → cargo fmt --all 적용. 모든 import alphabetical reorder + line wrapping 정합. 추가 untracked artifact 동시 commit: - docs/superpowers/specs/2026-05-28-v0.20-ingest-log-spec.md (491 line, ACCEPT) - docs/superpowers/plans/2026-05-28-v0.20-ingest-log-plan.md (616 line, ACCEPT) workspace test: 1370 passed / 0 failed / 50 ignored, ingest_log_smoke green. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
65 lines
1.9 KiB
Rust
65 lines
1.9 KiB
Rust
//! Integration tests for Bug #10: explicit --config <path> that does not exist
|
|
//! must fail with exit≠0 and error.v1 code=config_not_found (not silently fall
|
|
//! back to XDG defaults).
|
|
|
|
use serde_json::Value;
|
|
use std::process::Command;
|
|
|
|
fn kebab_bin() -> String {
|
|
env!("CARGO_BIN_EXE_kebab").to_string()
|
|
}
|
|
|
|
fn parse_error_v1(stderr: &str) -> Value {
|
|
let last = stderr
|
|
.lines()
|
|
.last()
|
|
.expect("expected error.v1 ndjson on stderr");
|
|
serde_json::from_str(last)
|
|
.unwrap_or_else(|e| panic!("expected ndjson on stderr: {e}\nstderr={stderr}"))
|
|
}
|
|
|
|
#[test]
|
|
fn invalid_config_path_emits_error_v1_with_nonzero_exit() {
|
|
let absent = "/tmp/__kebab_bugfix3_absolute_nonexistent.toml";
|
|
assert!(!std::path::Path::new(absent).exists());
|
|
|
|
let out = Command::new(kebab_bin())
|
|
.args(["search", "rust", "--config", absent, "--json"])
|
|
.output()
|
|
.expect("spawn kebab");
|
|
|
|
assert_ne!(
|
|
out.status.code(),
|
|
Some(0),
|
|
"exit must be nonzero on missing --config"
|
|
);
|
|
let stderr = String::from_utf8_lossy(&out.stderr);
|
|
let v = parse_error_v1(&stderr);
|
|
assert_eq!(v["schema_version"], "error.v1");
|
|
assert_eq!(v["code"], "config_not_found");
|
|
assert!(v["hint"].is_string(), "hint must be present");
|
|
}
|
|
|
|
#[test]
|
|
fn invalid_relative_config_path_emits_config_not_found() {
|
|
// Bug #10 spec §6 R-1: relative path も cwd-relative で cover.
|
|
let tmp = tempfile::tempdir().unwrap();
|
|
let out = Command::new(kebab_bin())
|
|
.args([
|
|
"search",
|
|
"rust",
|
|
"--config",
|
|
"nonexistent-rel.toml",
|
|
"--json",
|
|
])
|
|
.current_dir(tmp.path())
|
|
.output()
|
|
.expect("spawn kebab");
|
|
|
|
assert_ne!(out.status.code(), Some(0));
|
|
let stderr = String::from_utf8_lossy(&out.stderr);
|
|
let v = parse_error_v1(&stderr);
|
|
assert_eq!(v["schema_version"], "error.v1");
|
|
assert_eq!(v["code"], "config_not_found");
|
|
}
|