#![cfg(feature = "slow-tests")]
use assert_cmd::Command;
use serial_test::serial;
use tempfile::TempDir;
#[path = "common/mod.rs"]
mod common;
fn cmd_base(tmp: &TempDir) -> Command {
let mock_dir = common::mock_llm_path();
let mut c = Command::cargo_bin("sqlite-graphrag").expect("sqlite-graphrag binary not found");
c.env("PATH", common::prepend_path(&mock_dir));
c.env("SQLITE_GRAPHRAG_DB_PATH", tmp.path().join("test.sqlite"));
c.env("SQLITE_GRAPHRAG_CACHE_DIR", tmp.path().join("cache"));
c.env("SQLITE_GRAPHRAG_LOG_LEVEL", "error");
c.arg("--skip-memory-guard");
c
}
fn init_db(tmp: &TempDir) {
cmd_base(tmp).arg("init").arg("--force").assert().success();
}
#[test]
#[serial]
fn embedding_status_returns_queue_counts() {
let tmp = TempDir::new().expect("tempdir");
init_db(&tmp);
let out = cmd_base(&tmp)
.arg("embedding")
.arg("status")
.output()
.expect("invoke");
let stdout = String::from_utf8_lossy(&out.stdout);
let parsed: serde_json::Value =
serde_json::from_str(&stdout).expect("stdout must be valid JSON");
assert_eq!(parsed["action"], "embedding_status");
assert!(parsed["counts"]["pending"].is_number());
assert!(parsed["counts"]["in_progress"].is_number());
assert!(parsed["counts"]["done"].is_number());
assert!(parsed["counts"]["abandoned"].is_number());
}
#[test]
#[serial]
fn pending_embeddings_list_returns_empty_on_fresh_db() {
let tmp = TempDir::new().expect("tempdir");
init_db(&tmp);
let out = cmd_base(&tmp)
.arg("pending-embeddings")
.arg("list")
.arg("--status")
.arg("pending")
.output()
.expect("invoke");
let stdout = String::from_utf8_lossy(&out.stdout);
let parsed: serde_json::Value =
serde_json::from_str(&stdout).expect("stdout must be valid JSON");
assert_eq!(parsed["action"], "pending_embeddings_list");
assert_eq!(parsed["filter_status"], "pending");
assert!(parsed["entries"].is_array());
assert_eq!(parsed["entries"].as_array().unwrap().len(), 0);
assert!(parsed["count"].is_number());
}
#[test]
#[serial]
fn pending_embeddings_list_rejects_unknown_status() {
let tmp = TempDir::new().expect("tempdir");
init_db(&tmp);
cmd_base(&tmp)
.arg("pending-embeddings")
.arg("list")
.arg("--status")
.arg("not-a-status")
.assert()
.failure()
.code(1);
}
#[test]
#[serial]
fn pending_memories_list_returns_empty_on_fresh_db() {
let tmp = TempDir::new().expect("tempdir");
init_db(&tmp);
let out = cmd_base(&tmp)
.arg("pending")
.arg("list")
.output()
.expect("invoke");
let stdout = String::from_utf8_lossy(&out.stdout);
let parsed: serde_json::Value =
serde_json::from_str(&stdout).expect("stdout must be valid JSON");
assert_eq!(parsed["action"], "pending_list");
assert!(parsed["entries"].is_array());
assert_eq!(parsed["entries"].as_array().unwrap().len(), 0);
assert!(parsed["count"].is_number());
}