Moved on_query test to lib testing.
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 1s
This commit is contained in:
@@ -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() {
|
||||
|
||||
46
src/lib.rs
46
src/lib.rs
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 => {}
|
||||
|
||||
@@ -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()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user