Can now show a document description.
This commit is contained in:
parent
de009308c7
commit
e2b9045e3c
103
src/message.rs
103
src/message.rs
@ -27,6 +27,7 @@ enum Action {
|
|||||||
Error,
|
Error,
|
||||||
Query,
|
Query,
|
||||||
Reply,
|
Reply,
|
||||||
|
Show,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<MsgAction> for Action {
|
impl From<MsgAction> for Action {
|
||||||
@ -36,6 +37,7 @@ impl From<MsgAction> for Action {
|
|||||||
MsgAction::Error(_) => Action::Error,
|
MsgAction::Error(_) => Action::Error,
|
||||||
MsgAction::Query(_) => Action::Query,
|
MsgAction::Query(_) => Action::Query,
|
||||||
MsgAction::Reply(_) => Action::Reply,
|
MsgAction::Reply(_) => Action::Reply,
|
||||||
|
MsgAction::Show => Action::Show,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -85,6 +87,7 @@ enum MsgAction {
|
|||||||
Error(MTTError),
|
Error(MTTError),
|
||||||
Query(Access),
|
Query(Access),
|
||||||
Reply(Response),
|
Reply(Response),
|
||||||
|
Show,
|
||||||
// Add
|
// Add
|
||||||
// Delete
|
// Delete
|
||||||
}
|
}
|
||||||
@ -171,7 +174,7 @@ mod msgactions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone, Debug)]
|
||||||
struct Message {
|
struct Message {
|
||||||
msg_id: Uuid,
|
msg_id: Uuid,
|
||||||
document_id: NameID,
|
document_id: NameID,
|
||||||
@ -948,11 +951,18 @@ impl Document {
|
|||||||
NameID::Name(name) => name.clone(),
|
NameID::Name(name) => name.clone(),
|
||||||
NameID::ID(id) => id.to_string(),
|
NameID::ID(id) => id.to_string(),
|
||||||
};
|
};
|
||||||
let routes = [RouteRequest::new(
|
let routes = [
|
||||||
Include::All,
|
RouteRequest::new(
|
||||||
Include::Some(name.clone()),
|
Include::All,
|
||||||
Include::Some(Action::Query),
|
Include::Some(name.clone()),
|
||||||
)]
|
Include::Some(Action::Query),
|
||||||
|
),
|
||||||
|
RouteRequest::new(
|
||||||
|
Include::All,
|
||||||
|
Include::Some(name.clone()),
|
||||||
|
Include::Some(Action::Show),
|
||||||
|
),
|
||||||
|
]
|
||||||
.to_vec();
|
.to_vec();
|
||||||
match queue.register(tx, name, routes) {
|
match queue.register(tx, name, routes) {
|
||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
@ -984,44 +994,59 @@ mod documents {
|
|||||||
use super::{support_test::TIMEOUT, *};
|
use super::{support_test::TIMEOUT, *};
|
||||||
use std::sync::mpsc::RecvTimeoutError;
|
use std::sync::mpsc::RecvTimeoutError;
|
||||||
|
|
||||||
struct TestDoc {
|
fn test_doc(
|
||||||
queue: Queue,
|
name: &str,
|
||||||
rx: Receiver<Message>,
|
docdef: DocDef,
|
||||||
}
|
routes: Vec<RouteRequest>,
|
||||||
|
) -> (Queue, Receiver<Message>) {
|
||||||
impl TestDoc {
|
let (tx, rx) = channel();
|
||||||
fn new(name: &str, docdef: DocDef) -> Self {
|
let mut queue = Queue::new();
|
||||||
let mut queue = Queue::new();
|
let msg = Message::new(name, docdef);
|
||||||
let msg = Message::new(name, docdef);
|
Document::start(queue.clone(), msg);
|
||||||
Document::start(queue.clone(), msg);
|
queue
|
||||||
let (tx, rx) = channel();
|
.register(tx, Uuid::new_v4().to_string(), routes)
|
||||||
let routes = [RouteRequest::new(Include::All, Include::All, Include::All)].to_vec();
|
.unwrap();
|
||||||
queue.register(tx, name.to_string(), routes);
|
(queue, rx)
|
||||||
Self {
|
|
||||||
queue: queue,
|
|
||||||
rx: rx,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn send(&self, msg: Message) -> Result<(), MTTError> {
|
|
||||||
match self.queue.send(msg) {
|
|
||||||
// Removes the just sent message from the queue.
|
|
||||||
Ok(_) => self.rx.recv_timeout(TIMEOUT).unwrap(),
|
|
||||||
Err(err) => return Err(err),
|
|
||||||
};
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
fn recv(&self) -> Result<Message, RecvTimeoutError> {
|
|
||||||
self.rx.recv_timeout(TIMEOUT)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn has_data_fields() {
|
fn can_show_document_details() {
|
||||||
let docdef = DocDef::new();
|
let docdef = DocDef::new();
|
||||||
let name = "first";
|
let name = "first";
|
||||||
let doc = TestDoc::new(name, docdef);
|
let routes = [RouteRequest::new(
|
||||||
|
Include::All,
|
||||||
|
Include::All,
|
||||||
|
Include::Some(Action::Reply),
|
||||||
|
)]
|
||||||
|
.to_vec();
|
||||||
|
let (queue, rx) = test_doc(name, docdef, routes);
|
||||||
|
let msg = Message::new(name, MsgAction::Show);
|
||||||
|
queue.send(msg.clone()).unwrap();
|
||||||
|
let show = rx.recv_timeout(TIMEOUT).unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn only_responses_to_its_show_request() {
|
||||||
|
let docdef = DocDef::new();
|
||||||
|
let name = "quiet";
|
||||||
|
let routes = [RouteRequest::new(
|
||||||
|
Include::All,
|
||||||
|
Include::All,
|
||||||
|
Include::Some(Action::Reply),
|
||||||
|
)]
|
||||||
|
.to_vec();
|
||||||
|
let (mut queue, rx) = test_doc(name, docdef, routes);
|
||||||
|
let other = "alternate";
|
||||||
|
let (tx, _) = channel();
|
||||||
|
queue.register(tx, other.to_string(), Vec::new()).unwrap();
|
||||||
|
let msg = Message::new(other, MsgAction::Show);
|
||||||
|
queue.send(msg).unwrap();
|
||||||
|
match rx.recv_timeout(TIMEOUT) {
|
||||||
|
Ok(msg) => unreachable!("should not receive: {:?}", msg),
|
||||||
|
Err(err) => match err {
|
||||||
|
RecvTimeoutError::Timeout => {}
|
||||||
|
_ => unreachable!("should have timed out"),
|
||||||
|
},
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user