101 lines
2.5 KiB
Rust
101 lines
2.5 KiB
Rust
//! Integration: spawn `kebab ingest-stdin --title X` with stdin pipe.
|
|
|
|
use std::fs;
|
|
use std::io::Write;
|
|
use std::process::{Command, Stdio};
|
|
|
|
#[test]
|
|
fn cli_ingest_stdin_emits_ingest_report_v1() {
|
|
let dir = tempfile::tempdir().unwrap();
|
|
let workspace = dir.path().join("notes");
|
|
let data = dir.path().join("data");
|
|
fs::create_dir_all(&workspace).unwrap();
|
|
fs::create_dir_all(&data).unwrap();
|
|
|
|
let cfg_path = dir.path().join("config.toml");
|
|
fs::write(
|
|
&cfg_path,
|
|
format!(
|
|
r#"schema_version = 1
|
|
|
|
[workspace]
|
|
root = "{workspace}"
|
|
exclude = [".git/**"]
|
|
|
|
[storage]
|
|
data_dir = "{data}"
|
|
sqlite = "{{data_dir}}/kebab.sqlite"
|
|
vector_dir = "{{data_dir}}/lancedb"
|
|
asset_dir = "{{data_dir}}/assets"
|
|
artifact_dir = "{{data_dir}}/artifacts"
|
|
model_dir = "{{data_dir}}/models"
|
|
runs_dir = "{{data_dir}}/runs"
|
|
copy_threshold_mb = 100
|
|
|
|
[indexing]
|
|
max_parallel_extractors = 2
|
|
max_parallel_embeddings = 1
|
|
watch_filesystem = false
|
|
|
|
[chunking]
|
|
target_tokens = 500
|
|
overlap_tokens = 80
|
|
respect_markdown_headings = true
|
|
chunker_version = "md-heading-v1"
|
|
|
|
[models.embedding]
|
|
provider = "none"
|
|
model = "none"
|
|
version = "v0"
|
|
dimensions = 0
|
|
batch_size = 1
|
|
|
|
[models.llm]
|
|
provider = "ollama"
|
|
model = "none"
|
|
context_tokens = 4096
|
|
endpoint = "http://127.0.0.1:11434"
|
|
temperature = 0.0
|
|
seed = 0
|
|
|
|
[search]
|
|
default_k = 10
|
|
hybrid_fusion = "rrf"
|
|
rrf_k = 60
|
|
snippet_chars = 220
|
|
|
|
[rag]
|
|
prompt_template_version = "rag-v1"
|
|
score_gate = 0.30
|
|
explain_default = false
|
|
max_context_tokens = 8000
|
|
"#,
|
|
workspace = workspace.display(),
|
|
data = data.display(),
|
|
),
|
|
).unwrap();
|
|
|
|
let bin = env!("CARGO_BIN_EXE_kebab");
|
|
let mut child = Command::new(bin)
|
|
.args([
|
|
"--json", "--config", cfg_path.to_str().unwrap(),
|
|
"ingest-stdin", "--title", "X",
|
|
])
|
|
.stdin(Stdio::piped())
|
|
.stdout(Stdio::piped())
|
|
.stderr(Stdio::piped())
|
|
.spawn()
|
|
.unwrap();
|
|
{
|
|
let stdin = child.stdin.as_mut().unwrap();
|
|
stdin.write_all(b"## Body\n\nbody text.\n").unwrap();
|
|
}
|
|
let out = child.wait_with_output().unwrap();
|
|
assert!(out.status.success(), "stderr: {}", String::from_utf8_lossy(&out.stderr));
|
|
|
|
let stdout = String::from_utf8_lossy(&out.stdout);
|
|
let v: serde_json::Value = serde_json::from_str(stdout.trim()).unwrap();
|
|
assert_eq!(v.get("schema_version").and_then(|s| s.as_str()), Some("ingest_report.v1"));
|
|
assert_eq!(v.get("new").and_then(|n| n.as_u64()), Some(1));
|
|
}
|