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

View File

@@ -13,7 +13,7 @@ use queue::{
router::Queue,
};
use std::{
sync::mpsc::{channel, Receiver, Sender},
sync::mpsc::{channel, Receiver, RecvTimeoutError, Sender},
time::Duration,
};
use uuid::Uuid;
@@ -198,6 +198,7 @@ impl MoreThanText {
pub struct TestMoreThanText {
mtt: MoreThanText,
queue: Queue,
channel: Option<Receiver<Message>>,
}
impl TestMoreThanText {
@@ -207,22 +208,12 @@ impl TestMoreThanText {
Self {
mtt: mtt,
queue: queue,
channel: None,
}
}
pub fn validate_session(&mut self, session: Option<String>) -> Uuid {
self.mtt.validate_session(session)
}
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 get_morethantext(&self) -> MoreThanText {
self.mtt.clone()
}
pub fn send_time_pulse(&self) {
@@ -230,7 +221,7 @@ impl TestMoreThanText {
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 (tx, rx) = channel();
let sender_id = queue.add_sender(tx);
@@ -239,6 +230,29 @@ impl TestMoreThanText {
queue.send(Message::new(reg_msg));
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]
fn can_delete_specific() {
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);
calc.add_value(selected.clone()).unwrap();
calc.add_value(CalcValue::Existing(FieldType::Integer))
@@ -65,7 +66,8 @@ 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 (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);
calc.add_value(CalcValue::Existing(FieldType::Integer))
.unwrap();
@@ -106,7 +108,8 @@ fn can_delete_multiple() {
#[test]
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 mut delete = Delete::new(test_doc.get_doc_name());
let mut qry_calc = Calculation::new(Operand::Equal);

View File

@@ -43,7 +43,8 @@ fn does_document_respond_to() {
#[test]
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 alt = Name::english("alt");
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::All,
)];
let rx = mtt.register_channel(paths);
test_env.register_channel(paths);
let mut requests: Vec<UserAction> = Vec::new();
requests.push(Addition::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() {
mtt.records(req.clone()).unwrap();
}
match rx.recv_timeout(TIMEOUT) {
match test_env.recv() {
Ok(msg) => unreachable!("got {:?} should have timed out", msg),
Err(err) => match err {
RecvTimeoutError::Timeout => {}

View File

@@ -1,8 +1,8 @@
mod support;
use morethantext::{
CalcValue, Calculation, DocDef, ErrorID, Field, FieldType, IndexType, MTTError, MoreThanText,
Name, Operand, Query,
Action, CalcValue, Calculation, DocDef, ErrorID, Field, FieldType, Include, IndexType,
MTTError, MoreThanText, Name, Operand, Path, Query, TestMoreThanText,
};
use std::collections::HashSet;
use support::{setup_range, TestDocument};
@@ -11,7 +11,8 @@ const COUNT: usize = 5;
#[test]
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 result = mtt.records(query).unwrap();
assert_eq!(result.len(), 5, "got {:?}", result);
@@ -29,7 +30,8 @@ fn does_empty_query_get_all_documents() {
#[test]
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 mut calc = Calculation::new(Operand::Equal);
calc.add_value(expected.clone()).unwrap();
@@ -48,7 +50,8 @@ fn does_query_pull_specific_information() {
#[test]
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 mut calc = Calculation::new(Operand::LessThan);
calc.add_value(expected.clone()).unwrap();
@@ -72,7 +75,8 @@ fn does_query_work_with_less_than() {
#[test]
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 mut calc = Calculation::new(Operand::LessThanEqual);
calc.add_value(expected.clone()).unwrap();
@@ -96,7 +100,8 @@ fn does_query_work_with_less_than_equal() {
#[test]
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 mut calc = Calculation::new(Operand::GreaterThan);
calc.add_value(expected.clone()).unwrap();
@@ -119,7 +124,8 @@ fn does_query_work_with_greater_than() {
#[test]
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 mut calc = Calculation::new(Operand::GreaterThanEqual);
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();
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]
#[ignore = "failing to update"]
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 mut update = Update::new(doc_name());
let mut calc = Calculation::new(Operand::Equal);
@@ -127,7 +128,7 @@ fn are_expired_sessions_removed() {
.get_values_mut()
.add_field(Name::english("expire"), expire);
mtt.records(update).unwrap();
mtt.send_time_pulse();
test_env.send_time_pulse();
let mut qry = Query::new(doc_name());
qry.add(Name::english("id"), calc.clone());
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;
pub fn random_name() -> Name {
Name::english(Uuid::new_v4().to_string().as_str())
}
pub fn setup_range(count: usize) -> (MoreThanText, TestDocument) {
let mut mtt = MoreThanText::new();
pub fn setup_range(count: usize) -> (TestMoreThanText, TestDocument) {
let test_env = TestMoreThanText::new();
let mut mtt = test_env.get_morethantext();
let test_doc = TestDocument::new(vec![FieldType::Integer]);
mtt.create_document(test_doc.get_docdef()).unwrap();
let mut data: Vec<Vec<i128>> = Vec::new();
@@ -15,7 +16,7 @@ pub fn setup_range(count: usize) -> (MoreThanText, TestDocument) {
data.push(vec![holder]);
}
test_doc.populate_multiple(&mut mtt, data);
(mtt, test_doc)
(test_env, test_doc)
}
pub struct TestDocument {

View File

@@ -12,7 +12,8 @@ use uuid::Uuid;
fn is_it_possible_to_update_nothing() {
let count = 3;
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());
update.add_field(test_doc.get_field_name(0), 20);
let mut calc = Calculation::new(Operand::Equal);
@@ -60,7 +61,8 @@ fn are_the_updates_limited_to_the_queried() {
let count = 3;
let choice = 1;
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());
update.add_field(test_doc.get_field_name(0), changed.clone());
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() {
let count = 3;
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);
add_up
.add_value(CalcValue::Existing(FieldType::Integer))
@@ -132,7 +135,8 @@ fn can_multiple_documents_be_update() {
#[test]
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 mut update = Update::new(test_doc.get_doc_name());
let mut qry_calc = Calculation::new(Operand::Equal);
@@ -151,7 +155,8 @@ fn does_update_error_on_a_bad_query() {
#[test]
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 mut update = Update::new(test_doc.get_doc_name());
let mut qry_calc = Calculation::new(Operand::Equal);
@@ -172,7 +177,8 @@ fn does_update_error_on_a_bad_field_name() {
#[test]
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 qry_calc = Calculation::new(Operand::Equal);
qry_calc.add_value(0).unwrap();