use super::super::defs::*;
use crate::account::model::Flag;
use crate::support::error::Error;
#[test]
fn flag_crud() {
let setup = set_up();
let mut client = setup.connect("3501flfc");
quick_log_in(&mut client);
quick_create(&mut client, "3501flfc");
quick_append_enron(&mut client, "3501flfc", 3);
quick_select(&mut client, "3501flfc");
ok_command!(client, c("XVANQUISH 2"));
command!(mut responses = client, c("STORE 2 +FLAGS (\\Seen \\Deleted)"));
assert_eq!(2, responses.len());
assert_tagged_ok(responses.pop().unwrap());
assert_eq!(
&r("2 FETCH (UID 3 FLAGS (\\Recent \\Deleted \\Seen))"),
&responses[0].response
);
command!(mut responses = client, c("UID STORE 3 -FLAGS (\\Deleted)"));
assert_eq!(2, responses.len());
assert_tagged_ok(responses.pop().unwrap());
assert_eq!(
&r("2 FETCH (UID 3 FLAGS (\\Recent \\Seen))"),
&responses[0].response
);
command!(mut responses = client, c("STORE 2 FLAGS ($Important)"));
assert_eq!(3, responses.len());
assert_tagged_ok(responses.pop().unwrap());
has_untagged_response_matching! {
s::Response::Flags(ref flags) in responses => {
assert!(flags.contains(&Flag::Keyword("$Important".to_owned())));
}
}
assert_eq!(
&r("2 FETCH (UID 3 FLAGS (\\Recent $Important))"),
&responses[1].response
);
command!(mut responses = client, c("STORE 2 -FLAGS (\\Deleted)"));
assert_eq!(2, responses.len());
assert_tagged_ok(responses.pop().unwrap());
assert_eq!(
&r("2 FETCH (UID 3 FLAGS (\\Recent $Important))"),
&responses[0].response
);
command!([response] = client, c("STORE 2 -FLAGS.SILENT (\\Deleted)"));
assert_tagged_ok(response);
let mut client2 = setup.connect("3501flfc2");
quick_log_in(&mut client2);
quick_select(&mut client2, "3501flfc");
ok_command!(client2, c("XVANQUISH 1"));
command!(mut responses = client, c("STORE 1 +FLAGS.SILENT (\\Answered)"));
assert_eq!(2, responses.len());
unpack_cond_response! {
(Some(_), s::RespCondType::Ok,
Some(s::RespTextCode::ExpungeIssued(())), _) =
responses.pop().unwrap() => ()
};
has_untagged_response_matching! {
s::Response::Fetch(..) in responses
};
command!(mut responses = client, c("STORE 1 +FLAGS (\\Answered)"));
assert_eq!(2, responses.len());
unpack_cond_response! {
(Some(_), s::RespCondType::Ok,
Some(s::RespTextCode::ExpungeIssued(())), _) =
responses.pop().unwrap() => ()
};
has_untagged_response_matching! {
s::Response::Fetch(..) in responses
};
}
#[test]
fn error_conditions() {
let setup = set_up();
let mut client = setup.connect("3501flec");
quick_log_in(&mut client);
quick_create(&mut client, "3501flec");
quick_append_enron(&mut client, "3501flec", 1);
quick_select(&mut client, "3501flec");
command!([response] = client, c("STORE 2 +FLAGS (\\Answered)"));
unpack_cond_response! {
(Some(_), s::RespCondType::Bad, _, _) = response => { }
}
client
.write_raw(b"N STORE 1 +FLAGS (\\Nonstandard)\r\n")
.unwrap();
let mut buffer = Vec::new();
let response = client.read_one_response(&mut buffer).unwrap();
unpack_cond_response! {
(Some(_), s::RespCondType::Bad, _, _) = response => { }
}
command!([response] = client, c("UID STORE 2 +FLAGS (\\Answered)"));
assert_tagged_ok(response);
let mut client2 = setup.connect("3501flec2");
quick_log_in(&mut client2);
quick_append_enron(&mut client2, "3501flec", 1);
quick_select(&mut client2, "3501flec");
ok_command!(client2, c("STORE 2 +FLAGS (\\Answered)"));
ok_command!(client, c("STORE 1 +FLAGS (\\Answered)"));
command!(mut responses = client, c("UID STORE 2 +FLAGS (\\Seen)"));
assert_eq!(4, responses.len());
assert_tagged_ok(responses.pop().unwrap());
assert_eq!(
&r("2 FETCH (UID 2 FLAGS (\\Answered))"),
&responses[2].response
);
command!([response] = client, c("UID STORE 2 -FLAGS.SILENT (\\Seen)"));
assert_tagged_ok(response);
ok_command!(client, c("EXAMINE 3501flec"));
command!([response] = client, c("STORE 1 +FLAGS (\\Deleted)"));
assert_error_response(
response,
Some(s::RespTextCode::Cannot(())),
Error::MailboxReadOnly,
);
}