use super::defs::*;
#[test]
fn capability_declared() {
test_require_capability("5182capa", "SEARCHRES");
}
#[test]
fn test_searchres() {
let setup = set_up();
let mut client = setup.connect("5182sres");
quick_log_in(&mut client);
quick_create(&mut client, "5182sres");
quick_append_enron(&mut client, "5182sres", 5);
quick_select(&mut client, "5182sres");
ok_command!(client, c("XVANQUISH 3"));
assert_searchres(
&mut client,
"SEARCH RETURN (SAVE) ALL",
false,
&[1, 2, 3, 4],
);
assert_searchres(
&mut client,
"UID SEARCH RETURN (SAVE) 1:2",
false,
&[1, 2],
);
assert_searchres(&mut client, "SEARCH RETURN (ALL) 4", true, &[1, 2]);
assert_searchres(&mut client, "SEARCH RETURN (MIN SAVE) ALL", true, &[1]);
assert_searchres(&mut client, "SEARCH RETURN (MAX SAVE) ALL", true, &[4]);
assert_searchres(
&mut client,
"SEARCH RETURN (MAX MIN SAVE) ALL",
true,
&[1, 4],
);
assert_searchres(
&mut client,
"SEARCH RETURN (MIN ALL SAVE) ALL",
true,
&[1, 2, 3, 4],
);
assert_searchres(
&mut client,
"SEARCH RETURN (MIN COUNT SAVE) ALL",
true,
&[1, 2, 3, 4],
);
assert_searchres(&mut client, "SEARCH RETURN (MIN MAX SAVE) 2", true, &[2]);
assert_searchres(
&mut client,
"SEARCH RETURN (SAVE) KEYWORD nonexistent",
false,
&[],
);
assert_searchres(
&mut client,
"SEARCH RETURN (SAVE) ALL",
false,
&[1, 2, 3, 4],
);
ok_command!(client, c("XVANQUISH 2"));
assert_searchres(
&mut client,
"SEARCH 1",
true,
&[1, 2, 3],
);
quick_select(&mut client, "5182sres");
assert_searchres(
&mut client,
"SEARCH RETURN (ALL) ALL",
true,
&[],
);
}
fn assert_searchres(
client: &mut PipeClient,
search_command: &str,
expect_search_result: bool,
expected_seqnums: &[u32],
) {
command!(mut responses = client, cb(search_command));
if expect_search_result {
assert_eq!(2, responses.len());
} else {
assert_eq!(1, responses.len());
}
assert_tagged_ok(responses.pop().unwrap());
command!(responses = client, c("FETCH $ UID"));
let actual_seqnums = responses
.into_iter()
.filter_map(|r| match r {
s::ResponseLine {
tag: None,
response: s::Response::Fetch(fr),
} => Some(fr.seqnum),
_ => None,
})
.collect::<Vec<_>>();
assert_eq!(expected_seqnums, &actual_seqnums[..]);
command!(responses = client, c("UID FETCH $ UID"));
let actual_seqnums = responses
.into_iter()
.filter_map(|r| match r {
s::ResponseLine {
tag: None,
response: s::Response::Fetch(fr),
} => Some(fr.seqnum),
_ => None,
})
.collect::<Vec<_>>();
assert_eq!(expected_seqnums, &actual_seqnums[..]);
}