use super::handlers::handle_add;
use crate::memory::MemoryStore;
use std::process::ExitCode;
fn add(
store: &mut MemoryStore,
project: &str,
text: &str,
importance: &str,
supersedes: Option<&str>,
) -> ExitCode {
handle_add(
store,
project,
text,
None,
supersedes.is_none(),
"fact",
"active",
importance,
supersedes,
false,
)
.expect("handle_add ok")
}
fn stored(store: &MemoryStore, project: &str, content: &str) -> crate::sqlite::Memory {
store
.list(project, 10, None, None)
.expect("list")
.into_iter()
.find(|m| m.content == content)
.unwrap_or_else(|| panic!("no active row with content {content:?} was stored"))
}
#[test]
fn handle_add_writes_the_importance_the_operator_named() {
let mut store = MemoryStore::test_store();
for (i, level) in ["critical", "high", "low", "medium"].iter().enumerate() {
let text = format!("importance probe {i}");
assert_eq!(
add(&mut store, "imp", &text, level, None),
ExitCode::SUCCESS
);
assert_eq!(
stored(&store, "imp", &text).importance,
*level,
"the level named on --importance must reach the column, not its DEFAULT"
);
}
}
#[test]
fn handle_add_superseding_writes_the_importance_on_the_new_row() {
let mut store = MemoryStore::test_store();
assert_eq!(
add(&mut store, "sup", "original fact", "medium", None),
ExitCode::SUCCESS
);
let old = stored(&store, "sup", "original fact");
assert_eq!(
add(
&mut store,
"sup",
"replacement fact",
"critical",
Some(&old.id),
),
ExitCode::SUCCESS
);
let fresh = stored(&store, "sup", "replacement fact");
assert_eq!(
fresh.importance, "critical",
"the superseding row must carry the level the operator asked for"
);
let replaced = store
.get(&old.id, "sup")
.expect("get")
.expect("superseded row still readable");
assert_eq!(replaced.status, "superseded");
assert_eq!(replaced.importance, "medium");
assert_eq!(replaced.superseded_by.as_deref(), Some(fresh.id.as_str()));
}