From 87e737ff6f30340047edd2b85dd6bfa8ed686482 Mon Sep 17 00:00:00 2001 From: Jeff Baskin Date: Wed, 4 Mar 2026 12:38:45 -0500 Subject: [PATCH] Started moved delete tests into library tests. --- src/document/create.rs | 2 +- tests/delete_test.rs | 104 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 tests/delete_test.rs diff --git a/src/document/create.rs b/src/document/create.rs index 6dd0025..35d9b3f 100644 --- a/src/document/create.rs +++ b/src/document/create.rs @@ -2075,7 +2075,6 @@ mod document_files { _ => unreachable!("got {:?}: should have gotten reply", action), } } - */ #[test] fn can_delete() { @@ -2115,6 +2114,7 @@ mod document_files { _ => unreachable!("got {:?}, should have been empty", action), } } + */ #[test] fn does_delete_return_query_errors() { diff --git a/tests/delete_test.rs b/tests/delete_test.rs new file mode 100644 index 0000000..6ac324e --- /dev/null +++ b/tests/delete_test.rs @@ -0,0 +1,104 @@ +mod support; + +use morethantext::{ + CalcValue, Calculation, Delete, Field, FieldType, MoreThanText, Operand, Query, +}; +use std::collections::HashSet; +use support::{setup_range, TestDocument}; + +#[test] +fn can_delete() { + let data = "fred"; + let mut mtt = MoreThanText::new(); + let test_doc = TestDocument::new(vec![FieldType::StaticString]); + mtt.create_document(test_doc.get_docdef()).unwrap(); + test_doc.populate(&mut mtt, vec![data]); + let delete = Delete::new(test_doc.get_doc_name()); + let result = mtt.records(delete).unwrap(); + assert_eq!(result.len(), 1); + let rec = result.iter().last().unwrap(); + assert_eq!(rec.get(test_doc.get_field_name(0)).unwrap(), data.into()); + let qry = Query::new(test_doc.get_doc_name()); + let qresult = mtt.records(qry).unwrap(); + assert_eq!(qresult.len(), 0); +} + +#[test] +fn can_delete_specific() { + let selected = 1; + let (mut mtt, test_doc) = setup_range(3); + let mut calc = Calculation::new(Operand::Equal); + calc.add_value(selected.clone()).unwrap(); + calc.add_value(CalcValue::Existing(FieldType::Integer)) + .unwrap(); + let mut delete = Delete::new(test_doc.get_doc_name()); + delete.get_query_mut().add(test_doc.get_field_name(0), calc); + let result = mtt.records(delete).unwrap(); + assert_eq!(result.len(), 1); + let rec = result.iter().last().unwrap(); + assert_eq!( + rec.get(test_doc.get_field_name(0)).unwrap(), + selected.into() + ); + let qry = Query::new(test_doc.get_doc_name()); + let qresult = mtt.records(qry).unwrap(); + assert_eq!(qresult.len(), 2); + let mut expected: HashSet = HashSet::new(); + expected.insert(0.into()); + expected.insert(2.into()); + for qrec in qresult.iter() { + if !expected.remove(&qrec.get(&test_doc.get_field_name(0)).unwrap()) { + assert!(false, "{:?} should not have been stored", qrec); + } + } + assert_eq!( + expected.len(), + 0, + "{:?} should have been in the query", + expected + ); +} + +#[test] +fn can_delete_multiple() { + let count: i128 = 5; + let selected: i128 = 2; // must be less than count and not less than 0 + let bound = selected + 1; + let (mut mtt, test_doc) = setup_range(count.clone().try_into().unwrap()); + let mut calc = Calculation::new(Operand::GreaterThan); + calc.add_value(CalcValue::Existing(FieldType::Integer)) + .unwrap(); + calc.add_value(selected.clone()).unwrap(); + let mut delete = Delete::new(test_doc.get_doc_name()); + delete.get_query_mut().add(test_doc.get_field_name(0), calc); + let result = mtt.records(delete).unwrap(); + assert_eq!(result.len(), 2); + let mut expected: HashSet = HashSet::new(); + for i in bound..count { + expected.insert(i.into()); + } + for rec in result.iter() { + if !expected.remove(&rec.get(&test_doc.get_field_name(0)).unwrap()) { + assert!(false, "{:?} should not have been deleted", rec); + } + } + assert_eq!(expected.len(), 0, "{:?} should have been deleted", expected); + let qry = Query::new(test_doc.get_doc_name()); + let qresult = mtt.records(qry).unwrap(); + assert_eq!(qresult.len(), bound.clone().try_into().unwrap()); + let mut qexpected: HashSet = HashSet::new(); + for i in 0..bound { + qexpected.insert(i.into()); + } + for rec in qresult.iter() { + if !qexpected.remove(&rec.get(&test_doc.get_field_name(0)).unwrap()) { + assert!(false, "{:?} should not have been deleted", rec); + } + } + assert_eq!( + qexpected.len(), + 0, + "{:?} should have been deleted", + qexpected + ); +}