#![allow(clippy::unwrap_used, clippy::expect_used)]
use sqlite_core::{Database, Value};
use sqlite_forensic::{carve_all_deleted_records, RecoverySource};
const UPDATED: &[u8] = include_bytes!("../../tests/data/updated_messages.db");
#[test]
fn recovers_pre_update_prior_version() {
let db = Database::open(UPDATED.to_vec()).expect("open updated_messages.db");
let carved = carve_all_deleted_records(&db);
let prior = carved
.iter()
.find(|c| matches!(c.values.get(2), Some(Value::Text(t)) if t.starts_with("PRIORVERSION")));
assert!(
prior.is_some(),
"must recover the pre-update prior version of row 7 (the edited-message evidence); \
got {} carved records",
carved.len()
);
let prior = prior.unwrap();
assert_eq!(prior.rowid, 7, "prior version keeps the original rowid");
assert!(
!prior.allocated,
"a prior version lives in unallocated space"
);
assert_eq!(
prior.source,
RecoverySource::PriorVersion,
"a value-differing same-rowid recovery is a prior version"
);
}