Moved on_query test to lib testing.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s

This commit is contained in:
2026-03-05 11:13:18 -05:00
parent bb47a7af31
commit 50962e2b68
8 changed files with 111 additions and 42 deletions

View File

@@ -913,6 +913,7 @@ mod document_files {
} }
} }
/*
#[test] #[test]
fn query_sends_on_query_message() { fn query_sends_on_query_message() {
let count = 5; let count = 5;
@@ -957,6 +958,7 @@ mod document_files {
_ => unreachable!("should never get here"), _ => unreachable!("should never get here"),
} }
} }
*/
#[test] #[test]
fn send_on_addition_message() { fn send_on_addition_message() {

View File

@@ -13,7 +13,7 @@ use queue::{
router::Queue, router::Queue,
}; };
use std::{ use std::{
sync::mpsc::{channel, Receiver, Sender}, sync::mpsc::{channel, Receiver, RecvTimeoutError, Sender},
time::Duration, time::Duration,
}; };
use uuid::Uuid; use uuid::Uuid;
@@ -198,6 +198,7 @@ impl MoreThanText {
pub struct TestMoreThanText { pub struct TestMoreThanText {
mtt: MoreThanText, mtt: MoreThanText,
queue: Queue, queue: Queue,
channel: Option<Receiver<Message>>,
} }
impl TestMoreThanText { impl TestMoreThanText {
@@ -207,22 +208,12 @@ impl TestMoreThanText {
Self { Self {
mtt: mtt, mtt: mtt,
queue: queue, queue: queue,
channel: None,
} }
} }
pub fn validate_session(&mut self, session: Option<String>) -> Uuid { pub fn get_morethantext(&self) -> MoreThanText {
self.mtt.validate_session(session) self.mtt.clone()
}
pub fn records<UA>(&mut self, request: UA) -> Result<Records, MTTError>
where
UA: Into<UserAction>,
{
self.mtt.records(request)
}
pub fn create_document(&mut self, docdef: DocDef) -> Result<(), MTTError> {
self.mtt.create_document(docdef)
} }
pub fn send_time_pulse(&self) { pub fn send_time_pulse(&self) {
@@ -230,7 +221,7 @@ impl TestMoreThanText {
self.queue.send(msg); self.queue.send(msg);
} }
pub fn register_channel(&self, paths: Vec<Path>) -> Receiver<Message> { pub fn register_channel(&mut self, paths: Vec<Path>) {
let mut queue = self.mtt.queue.clone(); let mut queue = self.mtt.queue.clone();
let (tx, rx) = channel(); let (tx, rx) = channel();
let sender_id = queue.add_sender(tx); let sender_id = queue.add_sender(tx);
@@ -239,6 +230,29 @@ impl TestMoreThanText {
queue.send(Message::new(reg_msg)); queue.send(Message::new(reg_msg));
rx.recv().unwrap(); // Wait for completion. rx.recv().unwrap(); // Wait for completion.
} }
rx self.channel = Some(rx);
}
pub fn recv(&self) -> Result<Message, RecvTimeoutError> {
match &self.channel {
Some(rx) => rx.recv_timeout(Duration::from_millis(500)),
None => panic!("test environment does not have a channel setup"),
}
}
pub fn get_trigger_records(&self, action: Action) -> Records {
let msg = self.recv().unwrap();
let msg_action = msg.get_action();
if action == msg_action.clone().into() {
match msg_action {
MsgAction::OnAddition(data) => data.clone(),
MsgAction::OnDelete(data) => data.clone(),
MsgAction::OnQuery(data) => data.clone(),
MsgAction::OnUpdate(data) => data.clone(),
_ => panic!("{:?} is not a trigger", action),
}
} else {
panic!("received {:?} instead of {:?} trigger", msg, action);
}
} }
} }

View File

@@ -27,7 +27,8 @@ fn can_delete() {
#[test] #[test]
fn can_delete_specific() { fn can_delete_specific() {
let selected = 1; let selected = 1;
let (mut mtt, test_doc) = setup_range(3); let (test_env, test_doc) = setup_range(3);
let mut mtt = test_env.get_morethantext();
let mut calc = Calculation::new(Operand::Equal); let mut calc = Calculation::new(Operand::Equal);
calc.add_value(selected.clone()).unwrap(); calc.add_value(selected.clone()).unwrap();
calc.add_value(CalcValue::Existing(FieldType::Integer)) calc.add_value(CalcValue::Existing(FieldType::Integer))
@@ -65,7 +66,8 @@ fn can_delete_multiple() {
let count: i128 = 5; let count: i128 = 5;
let selected: i128 = 2; // must be less than count and not less than 0 let selected: i128 = 2; // must be less than count and not less than 0
let bound = selected + 1; let bound = selected + 1;
let (mut mtt, test_doc) = setup_range(count.clone().try_into().unwrap()); let (test_env, test_doc) = setup_range(count.clone().try_into().unwrap());
let mut mtt = test_env.get_morethantext();
let mut calc = Calculation::new(Operand::GreaterThan); let mut calc = Calculation::new(Operand::GreaterThan);
calc.add_value(CalcValue::Existing(FieldType::Integer)) calc.add_value(CalcValue::Existing(FieldType::Integer))
.unwrap(); .unwrap();
@@ -106,7 +108,8 @@ fn can_delete_multiple() {
#[test] #[test]
fn does_delete_error_on_a_bad_query() { fn does_delete_error_on_a_bad_query() {
let (mut mtt, test_doc) = setup_range(1); let (test_env, test_doc) = setup_range(1);
let mut mtt = test_env.get_morethantext();
let bad_name = Name::japanese("正しくない"); let bad_name = Name::japanese("正しくない");
let mut delete = Delete::new(test_doc.get_doc_name()); let mut delete = Delete::new(test_doc.get_doc_name());
let mut qry_calc = Calculation::new(Operand::Equal); let mut qry_calc = Calculation::new(Operand::Equal);

View File

@@ -43,7 +43,8 @@ fn does_document_respond_to() {
#[test] #[test]
fn does_document_ignore_other_document_requests() { fn does_document_ignore_other_document_requests() {
let mut mtt = TestMoreThanText::new(); let mut test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
let quiet = Name::english("quiet"); let quiet = Name::english("quiet");
let alt = Name::english("alt"); let alt = Name::english("alt");
mtt.create_document(DocDef::new(quiet.clone())).unwrap(); mtt.create_document(DocDef::new(quiet.clone())).unwrap();
@@ -53,7 +54,7 @@ fn does_document_ignore_other_document_requests() {
Include::Just(quiet.clone().into()), Include::Just(quiet.clone().into()),
Include::All, Include::All,
)]; )];
let rx = mtt.register_channel(paths); test_env.register_channel(paths);
let mut requests: Vec<UserAction> = Vec::new(); let mut requests: Vec<UserAction> = Vec::new();
requests.push(Addition::new(alt.clone()).into()); requests.push(Addition::new(alt.clone()).into());
requests.push(Delete::new(alt.clone()).into()); requests.push(Delete::new(alt.clone()).into());
@@ -62,7 +63,7 @@ fn does_document_ignore_other_document_requests() {
for req in requests.iter() { for req in requests.iter() {
mtt.records(req.clone()).unwrap(); mtt.records(req.clone()).unwrap();
} }
match rx.recv_timeout(TIMEOUT) { match test_env.recv() {
Ok(msg) => unreachable!("got {:?} should have timed out", msg), Ok(msg) => unreachable!("got {:?} should have timed out", msg),
Err(err) => match err { Err(err) => match err {
RecvTimeoutError::Timeout => {} RecvTimeoutError::Timeout => {}

View File

@@ -1,8 +1,8 @@
mod support; mod support;
use morethantext::{ use morethantext::{
CalcValue, Calculation, DocDef, ErrorID, Field, FieldType, IndexType, MTTError, MoreThanText, Action, CalcValue, Calculation, DocDef, ErrorID, Field, FieldType, Include, IndexType,
Name, Operand, Query, MTTError, MoreThanText, Name, Operand, Path, Query, TestMoreThanText,
}; };
use std::collections::HashSet; use std::collections::HashSet;
use support::{setup_range, TestDocument}; use support::{setup_range, TestDocument};
@@ -11,7 +11,8 @@ const COUNT: usize = 5;
#[test] #[test]
fn does_empty_query_get_all_documents() { fn does_empty_query_get_all_documents() {
let (mut mtt, test_doc) = setup_range(COUNT); let (test_env, test_doc) = setup_range(COUNT);
let mut mtt = test_env.get_morethantext();
let mut query = Query::new(test_doc.get_doc_name()); let mut query = Query::new(test_doc.get_doc_name());
let result = mtt.records(query).unwrap(); let result = mtt.records(query).unwrap();
assert_eq!(result.len(), 5, "got {:?}", result); assert_eq!(result.len(), 5, "got {:?}", result);
@@ -29,7 +30,8 @@ fn does_empty_query_get_all_documents() {
#[test] #[test]
fn does_query_pull_specific_information() { fn does_query_pull_specific_information() {
let (mut mtt, test_doc) = setup_range(COUNT); let (test_env, test_doc) = setup_range(COUNT);
let mut mtt = test_env.get_morethantext();
let expected = 3; let expected = 3;
let mut calc = Calculation::new(Operand::Equal); let mut calc = Calculation::new(Operand::Equal);
calc.add_value(expected.clone()).unwrap(); calc.add_value(expected.clone()).unwrap();
@@ -48,7 +50,8 @@ fn does_query_pull_specific_information() {
#[test] #[test]
fn does_query_work_with_less_than() { fn does_query_work_with_less_than() {
let (mut mtt, test_doc) = setup_range(COUNT); let (test_env, test_doc) = setup_range(COUNT);
let mut mtt = test_env.get_morethantext();
let expected = 2; let expected = 2;
let mut calc = Calculation::new(Operand::LessThan); let mut calc = Calculation::new(Operand::LessThan);
calc.add_value(expected.clone()).unwrap(); calc.add_value(expected.clone()).unwrap();
@@ -72,7 +75,8 @@ fn does_query_work_with_less_than() {
#[test] #[test]
fn does_query_work_with_less_than_equal() { fn does_query_work_with_less_than_equal() {
let (mut mtt, test_doc) = setup_range(COUNT); let (test_env, test_doc) = setup_range(COUNT);
let mut mtt = test_env.get_morethantext();
let expected = 2; let expected = 2;
let mut calc = Calculation::new(Operand::LessThanEqual); let mut calc = Calculation::new(Operand::LessThanEqual);
calc.add_value(expected.clone()).unwrap(); calc.add_value(expected.clone()).unwrap();
@@ -96,7 +100,8 @@ fn does_query_work_with_less_than_equal() {
#[test] #[test]
fn does_query_work_with_greater_than() { fn does_query_work_with_greater_than() {
let (mut mtt, test_doc) = setup_range(COUNT); let (test_env, test_doc) = setup_range(COUNT);
let mut mtt = test_env.get_morethantext();
let expected = 2; let expected = 2;
let mut calc = Calculation::new(Operand::GreaterThan); let mut calc = Calculation::new(Operand::GreaterThan);
calc.add_value(expected.clone()).unwrap(); calc.add_value(expected.clone()).unwrap();
@@ -119,7 +124,8 @@ fn does_query_work_with_greater_than() {
#[test] #[test]
fn does_query_work_with_greater_than_equal() { fn does_query_work_with_greater_than_equal() {
let (mut mtt, test_doc) = setup_range(COUNT); let (test_env, test_doc) = setup_range(COUNT);
let mut mtt = test_env.get_morethantext();
let expected = 2; let expected = 2;
let mut calc = Calculation::new(Operand::GreaterThanEqual); let mut calc = Calculation::new(Operand::GreaterThanEqual);
calc.add_value(expected.clone()).unwrap(); calc.add_value(expected.clone()).unwrap();
@@ -284,3 +290,38 @@ fn does_it_error_on_bad_field_type() {
let result = mtt.records(qry).unwrap_err(); let result = mtt.records(qry).unwrap_err();
assert_eq!(result.to_string(), expected.to_string()); assert_eq!(result.to_string(), expected.to_string());
} }
#[test]
fn does_query_send_on_query_message() {
let selected = 2;
let (mut test_env, test_doc) = setup_range(3);
let mut mtt = test_env.get_morethantext();
test_env.register_channel(vec![Path::new(
Include::All,
Include::Just(test_doc.get_doc_name().into()),
Include::Just(Action::OnQuery),
)]);
let mut calc = Calculation::new(Operand::Equal);
calc.add_value(selected.clone()).unwrap();
calc.add_value(CalcValue::Existing(FieldType::Integer))
.unwrap();
let mut qry = Query::new(test_doc.get_doc_name());
qry.add(test_doc.get_field_name(0), calc);
let query_result = mtt.records(qry).unwrap();
let trigger_result = test_env.get_trigger_records(Action::OnQuery);
assert_eq!(trigger_result.len(), query_result.len());
assert_eq!(
trigger_result
.iter()
.last()
.unwrap()
.get(test_doc.get_field_name(0))
.unwrap(),
query_result
.iter()
.last()
.unwrap()
.get(test_doc.get_field_name(0))
.unwrap()
);
}

View File

@@ -112,7 +112,8 @@ fn does_expire_update_on_query() {
#[test] #[test]
#[ignore = "failing to update"] #[ignore = "failing to update"]
fn are_expired_sessions_removed() { fn are_expired_sessions_removed() {
let mut mtt = TestMoreThanText::new(); let test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
let id = mtt.validate_session(None); let id = mtt.validate_session(None);
let mut update = Update::new(doc_name()); let mut update = Update::new(doc_name());
let mut calc = Calculation::new(Operand::Equal); let mut calc = Calculation::new(Operand::Equal);
@@ -127,7 +128,7 @@ fn are_expired_sessions_removed() {
.get_values_mut() .get_values_mut()
.add_field(Name::english("expire"), expire); .add_field(Name::english("expire"), expire);
mtt.records(update).unwrap(); mtt.records(update).unwrap();
mtt.send_time_pulse(); test_env.send_time_pulse();
let mut qry = Query::new(doc_name()); let mut qry = Query::new(doc_name());
qry.add(Name::english("id"), calc.clone()); qry.add(Name::english("id"), calc.clone());
let result = mtt.records(qry).unwrap(); let result = mtt.records(qry).unwrap();

View File

@@ -1,12 +1,13 @@
use morethantext::{Addition, DocDef, Field, FieldType, MoreThanText, Name}; use morethantext::{Addition, DocDef, Field, FieldType, MoreThanText, Name, TestMoreThanText};
use uuid::Uuid; use uuid::Uuid;
pub fn random_name() -> Name { pub fn random_name() -> Name {
Name::english(Uuid::new_v4().to_string().as_str()) Name::english(Uuid::new_v4().to_string().as_str())
} }
pub fn setup_range(count: usize) -> (MoreThanText, TestDocument) { pub fn setup_range(count: usize) -> (TestMoreThanText, TestDocument) {
let mut mtt = MoreThanText::new(); let test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
let test_doc = TestDocument::new(vec![FieldType::Integer]); let test_doc = TestDocument::new(vec![FieldType::Integer]);
mtt.create_document(test_doc.get_docdef()).unwrap(); mtt.create_document(test_doc.get_docdef()).unwrap();
let mut data: Vec<Vec<i128>> = Vec::new(); let mut data: Vec<Vec<i128>> = Vec::new();
@@ -15,7 +16,7 @@ pub fn setup_range(count: usize) -> (MoreThanText, TestDocument) {
data.push(vec![holder]); data.push(vec![holder]);
} }
test_doc.populate_multiple(&mut mtt, data); test_doc.populate_multiple(&mut mtt, data);
(mtt, test_doc) (test_env, test_doc)
} }
pub struct TestDocument { pub struct TestDocument {

View File

@@ -12,7 +12,8 @@ use uuid::Uuid;
fn is_it_possible_to_update_nothing() { fn is_it_possible_to_update_nothing() {
let count = 3; let count = 3;
let outside: i128 = (count + 2).try_into().unwrap(); let outside: i128 = (count + 2).try_into().unwrap();
let (mut mtt, test_doc) = setup_range(count); let (test_env, test_doc) = setup_range(count);
let mut mtt = test_env.get_morethantext();
let mut update = Update::new(test_doc.get_doc_name()); let mut update = Update::new(test_doc.get_doc_name());
update.add_field(test_doc.get_field_name(0), 20); update.add_field(test_doc.get_field_name(0), 20);
let mut calc = Calculation::new(Operand::Equal); let mut calc = Calculation::new(Operand::Equal);
@@ -60,7 +61,8 @@ fn are_the_updates_limited_to_the_queried() {
let count = 3; let count = 3;
let choice = 1; let choice = 1;
let changed = 20; let changed = 20;
let (mut mtt, test_doc) = setup_range(count); let (test_env, test_doc) = setup_range(count);
let mut mtt = test_env.get_morethantext();
let mut update = Update::new(test_doc.get_doc_name()); let mut update = Update::new(test_doc.get_doc_name());
update.add_field(test_doc.get_field_name(0), changed.clone()); update.add_field(test_doc.get_field_name(0), changed.clone());
let mut calc = Calculation::new(Operand::Equal); let mut calc = Calculation::new(Operand::Equal);
@@ -94,7 +96,8 @@ fn are_the_updates_limited_to_the_queried() {
fn can_multiple_documents_be_update() { fn can_multiple_documents_be_update() {
let count = 3; let count = 3;
let choice = 1; let choice = 1;
let (mut mtt, test_doc) = setup_range(count); let (test_env, test_doc) = setup_range(count);
let mut mtt = test_env.get_morethantext();
let mut add_up = Calculation::new(Operand::Add); let mut add_up = Calculation::new(Operand::Add);
add_up add_up
.add_value(CalcValue::Existing(FieldType::Integer)) .add_value(CalcValue::Existing(FieldType::Integer))
@@ -132,7 +135,8 @@ fn can_multiple_documents_be_update() {
#[test] #[test]
fn does_update_error_on_a_bad_query() { fn does_update_error_on_a_bad_query() {
let (mut mtt, test_doc) = setup_range(1); let (test_env, test_doc) = setup_range(1);
let mut mtt = test_env.get_morethantext();
let bad_name = Name::japanese("正しくない"); let bad_name = Name::japanese("正しくない");
let mut update = Update::new(test_doc.get_doc_name()); let mut update = Update::new(test_doc.get_doc_name());
let mut qry_calc = Calculation::new(Operand::Equal); let mut qry_calc = Calculation::new(Operand::Equal);
@@ -151,7 +155,8 @@ fn does_update_error_on_a_bad_query() {
#[test] #[test]
fn does_update_error_on_a_bad_field_name() { fn does_update_error_on_a_bad_field_name() {
let (mut mtt, test_doc) = setup_range(1); let (test_env, test_doc) = setup_range(1);
let mut mtt = test_env.get_morethantext();
let bad_name = Name::japanese("正しくない"); let bad_name = Name::japanese("正しくない");
let mut update = Update::new(test_doc.get_doc_name()); let mut update = Update::new(test_doc.get_doc_name());
let mut qry_calc = Calculation::new(Operand::Equal); let mut qry_calc = Calculation::new(Operand::Equal);
@@ -172,7 +177,8 @@ fn does_update_error_on_a_bad_field_name() {
#[test] #[test]
fn does_update_error_on_a_bad_field_type() { fn does_update_error_on_a_bad_field_type() {
let (mut mtt, test_doc) = setup_range(1); let (test_env, test_doc) = setup_range(1);
let mut mtt = test_env.get_morethantext();
let mut update = Update::new(test_doc.get_doc_name()); let mut update = Update::new(test_doc.get_doc_name());
let mut qry_calc = Calculation::new(Operand::Equal); let mut qry_calc = Calculation::new(Operand::Equal);
qry_calc.add_value(0).unwrap(); qry_calc.add_value(0).unwrap();