mirror of
https://github.com/soywod/himalaya.git
synced 2024-09-05 10:31:13 +00:00
91 lines
3.3 KiB
Rust
91 lines
3.3 KiB
Rust
|
use himalaya::{
|
||
|
backends::{Backend, ImapBackend, ImapEnvelopes},
|
||
|
config::{AccountConfig, ImapBackendConfig},
|
||
|
};
|
||
|
|
||
|
#[test]
|
||
|
fn test_imap_backend() {
|
||
|
// configure accounts
|
||
|
let account_config = AccountConfig {
|
||
|
smtp_host: "localhost".into(),
|
||
|
smtp_port: 3465,
|
||
|
smtp_starttls: false,
|
||
|
smtp_insecure: true,
|
||
|
smtp_login: "inbox@localhost".into(),
|
||
|
smtp_passwd_cmd: "echo 'password'".into(),
|
||
|
..AccountConfig::default()
|
||
|
};
|
||
|
let imap_config = ImapBackendConfig {
|
||
|
imap_host: "localhost".into(),
|
||
|
imap_port: 3993,
|
||
|
imap_starttls: false,
|
||
|
imap_insecure: true,
|
||
|
imap_login: "inbox@localhost".into(),
|
||
|
imap_passwd_cmd: "echo 'password'".into(),
|
||
|
};
|
||
|
let mut imap = ImapBackend::new(&account_config, &imap_config);
|
||
|
imap.connect().unwrap();
|
||
|
|
||
|
// set up mailboxes
|
||
|
if let Err(_) = imap.add_mbox("Mailbox1") {};
|
||
|
if let Err(_) = imap.add_mbox("Mailbox2") {};
|
||
|
imap.del_msg("Mailbox1", "1:*").unwrap();
|
||
|
imap.del_msg("Mailbox2", "1:*").unwrap();
|
||
|
|
||
|
// check that a message can be added
|
||
|
let msg = include_bytes!("./emails/alice-to-patrick.eml");
|
||
|
let id = imap.add_msg("Mailbox1", msg, "seen").unwrap().to_string();
|
||
|
|
||
|
// check that the added message exists
|
||
|
let msg = imap.get_msg("Mailbox1", &id).unwrap();
|
||
|
assert_eq!("alice@localhost", msg.from.clone().unwrap().to_string());
|
||
|
assert_eq!("patrick@localhost", msg.to.clone().unwrap().to_string());
|
||
|
assert_eq!("Ceci est un message.", msg.fold_text_plain_parts());
|
||
|
|
||
|
// check that the envelope of the added message exists
|
||
|
let envelopes = imap
|
||
|
.get_envelopes("Mailbox1", "arrival:desc", "ALL", 10, 0)
|
||
|
.unwrap();
|
||
|
let envelopes: &ImapEnvelopes = envelopes.as_any().downcast_ref().unwrap();
|
||
|
assert_eq!(1, envelopes.len());
|
||
|
let envelope = envelopes.first().unwrap();
|
||
|
assert_eq!("alice@localhost", envelope.sender);
|
||
|
assert_eq!("Plain message", envelope.subject);
|
||
|
|
||
|
// check that the message can be copied
|
||
|
imap.copy_msg("Mailbox1", "Mailbox2", &envelope.id.to_string())
|
||
|
.unwrap();
|
||
|
let envelopes = imap
|
||
|
.get_envelopes("Mailbox1", "arrival:desc", "ALL", 10, 0)
|
||
|
.unwrap();
|
||
|
let envelopes: &ImapEnvelopes = envelopes.as_any().downcast_ref().unwrap();
|
||
|
assert_eq!(1, envelopes.len());
|
||
|
let envelopes = imap
|
||
|
.get_envelopes("Mailbox2", "arrival:desc", "ALL", 10, 0)
|
||
|
.unwrap();
|
||
|
let envelopes: &ImapEnvelopes = envelopes.as_any().downcast_ref().unwrap();
|
||
|
assert_eq!(1, envelopes.len());
|
||
|
|
||
|
// check that the message can be moved
|
||
|
imap.move_msg("Mailbox1", "Mailbox2", &envelope.id.to_string())
|
||
|
.unwrap();
|
||
|
let envelopes = imap
|
||
|
.get_envelopes("Mailbox1", "arrival:desc", "ALL", 10, 0)
|
||
|
.unwrap();
|
||
|
let envelopes: &ImapEnvelopes = envelopes.as_any().downcast_ref().unwrap();
|
||
|
assert_eq!(0, envelopes.len());
|
||
|
let envelopes = imap
|
||
|
.get_envelopes("Mailbox2", "arrival:desc", "ALL", 10, 0)
|
||
|
.unwrap();
|
||
|
let envelopes: &ImapEnvelopes = envelopes.as_any().downcast_ref().unwrap();
|
||
|
assert_eq!(2, envelopes.len());
|
||
|
let id = envelopes.first().unwrap().id.to_string();
|
||
|
|
||
|
// check that the message can be deleted
|
||
|
imap.del_msg("Mailbox2", &id).unwrap();
|
||
|
assert!(imap.get_msg("Mailbox2", &id).is_err());
|
||
|
|
||
|
// check that disconnection works
|
||
|
imap.disconnect().unwrap();
|
||
|
}
|