aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/fixtures.rs198
-rw-r--r--tests/lib.rs15
-rw-r--r--tests/main.rs62
-rw-r--r--tests/test_database.rs339
-rw-r--r--tests/test_message.rs291
-rw-r--r--tests/test_query.rs97
-rw-r--r--tests/test_tags.rs142
-rw-r--r--tests/test_thread.rs102
8 files changed, 0 insertions, 1246 deletions
diff --git a/tests/fixtures.rs b/tests/fixtures.rs
deleted file mode 100644
index 7075905..0000000
--- a/tests/fixtures.rs
+++ /dev/null
@@ -1,198 +0,0 @@
-extern crate dirs;
-extern crate tempfile;
-extern crate notmuch;
-extern crate gethostname;
-extern crate maildir;
-extern crate lettre;
-extern crate lettre_email;
-
-use std::ffi::OsStr;
-use std::io::{Result, Write};
-use std::fs::{self, File};
-use std::path::PathBuf;
-use tempfile::{tempdir, TempDir};
-use std::process::Command;
-use maildir::Maildir;
-use lettre_email::{EmailBuilder, Header};
-use lettre::SendableEmail;
-
-
-// A basic test interface to a valid maildir directory.
-//
-// This creates a valid maildir and provides a simple mechanism to
-// deliver test emails to it. It also writes a notmuch-config file
-// in the top of the maildir.
-pub struct MailBox {
- root_dir: TempDir,
- maildir: Maildir
-}
-
-impl MailBox {
-
- // Creates a new maildir fixture. Since this is only used for tests,
- // may just panic of something is wrong
- pub fn new() -> Self {
-
- let root_dir = tempdir().unwrap();
- let root_path = root_dir.path().to_path_buf();
-
- let tmp_path = root_path.join("tmp");
- fs::create_dir(&tmp_path).unwrap();
-
- let cfg_fname = root_path.join("notmuch-config");
- let mut cfg_file = File::create(cfg_fname).unwrap();
- write!(cfg_file, r#"
- [database]
- path={tmppath}
- [user]
- name=Some Hacker
- primary_email=dst@example.com
- [new]
- tags=unread;inbox;
- ignore=
- [search]
- exclude_tags=deleted;spam;
- [maildir]
- synchronize_flags=true
- [crypto]
- gpg_path=gpg
- "#, tmppath=root_path.to_string_lossy()).unwrap();
-
- let maildir = Maildir::from(root_path.to_path_buf());
- maildir.create_dirs().unwrap();
-
- Self {
- root_dir,
- maildir
- }
- }
-
- /// Return a new unique message ID
- // fn next_msgid(&mut self) -> String{
- // let hostname = gethostname::gethostname();
- // let msgid = format!("{}@{}", self.idcount, hostname.to_string_lossy());
- // self.idcount += 1;
- // msgid
- // }
-
- pub fn path(&self) -> PathBuf {
- self.root_dir.path().into()
- }
-
- /// Deliver a new mail message in the mbox.
- /// This does only adds the message to maildir, does not insert it
- /// into the notmuch database.
- /// returns a tuple of (msgid, pathname).
- pub fn deliver(&self,
- subject: Option<String>,
- body: Option<String>,
- to: Option<String>,
- from: Option<String>,
- headers: Vec<(String, String)>,
- is_new: bool, // Move to new dir or cur dir?
- _keywords: Option<Vec<String>>, // List of keywords or labels
- seen: bool, // Seen flag (cur dir only)
- replied: bool, // Replied flag (cur dir only)
- flagged: bool) // Flagged flag (cur dir only)
- -> Result<(String, PathBuf)>
- {
-
- let mut builder = EmailBuilder::new()
- .subject(subject.unwrap_or_else(|| "Test mail".to_string()));
-
-
- if let Some(val) = body {
- builder = builder.text(val);
- }
-
- builder = builder.to(to.unwrap_or_else(|| "to@example.com".to_string()))
- .from(from.unwrap_or_else(|| "src@example.com".to_string()));
-
- for h in headers.into_iter(){
- let hdr: Header = h.into();
- builder = builder.header(hdr);
- }
-
- let msg:SendableEmail = builder.build().unwrap().into();
-
- // not sure why lettre doesn't add the host suffix itself
- let msg_id = msg.message_id().to_string() + ".lettre@localhost";
- let id = if is_new {
- self.maildir.store_new(&msg.message_to_string().unwrap().as_bytes()).unwrap()
- }else{
- let mut flags = String::from("");
- if flagged {
- flags += "F";
- }
- if replied {
- flags += "R";
- }
- if seen {
- flags += "S";
- }
- println!("flags: {:?}", flags);
- let mid = self.maildir.store_cur_with_flags(&msg.message_to_string().unwrap().as_bytes(), flags.as_str()).unwrap();
-
- // I have no idea what the reasoning for the :2 here is, but ok.
- format!("{}:2,{}", mid, flags)
- };
-
-
- let mut msgpath = self.path();
- msgpath = if is_new {
- msgpath.join("new")
- } else {
- msgpath.join("cur")
- };
-
- msgpath = msgpath.join(&id);
-
- Ok((msg_id, msgpath))
- }
-}
-
-impl Drop for MailBox {
- fn drop(&mut self) {
- }
-}
-
-
-#[derive(Clone, Debug)]
-pub struct NotmuchCommand {
- maildir_path: PathBuf
-}
-
-impl NotmuchCommand {
-
- /// Return a function which runs notmuch commands on our test maildir.
- ///
- /// This uses the notmuch-config file created by the ``maildir``
- /// fixture.
- pub fn new(maildir_path: &PathBuf) -> Self {
- Self {
- maildir_path: maildir_path.clone()
- }
- }
-
- /// Run a notmuch comand.
- ///
- /// This function runs with a timeout error as many notmuch
- /// commands may block if multiple processes are trying to open
- /// the database in write-mode. It is all too easy to
- /// accidentally do this in the unittests.
- pub fn run<I, S>(&self, args: I) -> Result<()>
- where
- I: IntoIterator<Item=S>,
- S: AsRef<OsStr>
- {
- let cfg_fname = self.maildir_path.join("notmuch-config");
-
- Command::new("notmuch").env("NOTMUCH_CONFIG", &cfg_fname)
- .args(args)
- .status()?;
- Ok(())
- }
-
-}
-
-
diff --git a/tests/lib.rs b/tests/lib.rs
deleted file mode 100644
index 44ec82f..0000000
--- a/tests/lib.rs
+++ /dev/null
@@ -1,15 +0,0 @@
-extern crate dirs;
-extern crate tempfile;
-extern crate notmuch;
-extern crate gethostname;
-extern crate maildir;
-extern crate lettre;
-extern crate lettre_email;
-
-mod fixtures;
-mod test_database;
-mod test_query;
-mod test_thread;
-mod test_message;
-mod test_tags;
-
diff --git a/tests/main.rs b/tests/main.rs
deleted file mode 100644
index 17db2bc..0000000
--- a/tests/main.rs
+++ /dev/null
@@ -1,62 +0,0 @@
-extern crate dirs;
-extern crate tempfile;
-extern crate notmuch;
-extern crate gethostname;
-extern crate maildir;
-extern crate lettre;
-extern crate lettre_email;
-
-use std::sync::Arc;
-
-use notmuch::{Query, QueryExt};
-
-mod fixtures;
-use fixtures::{MailBox, NotmuchCommand};
-
-
-
-
-// fn main() {
-// let mut mail_path = dirs::home_dir().unwrap();
-// mail_path.push(".mail");
-
-// let md = MailBox::new();
-// let nmcmd = NotMuchCommand::new(md.path());
-
-// match notmuch::Database::open(
-// &mail_path.to_str().unwrap().to_string(),
-// notmuch::DatabaseMode::ReadOnly,
-// ) {
-// Ok(db) => {
-// #[cfg(feature = "v0_21")]
-// {
-// let rev = db.revision();
-// println!("db revision: {:?}", rev);
-// }
-// let query = {
-// let dbr = Arc::new(db);
-
-// notmuch::Query::create(dbr.clone(), &"".to_string()).unwrap()
-// };
-
-// // let mut threads = query.search_threads().unwrap();
-
-// // let mut threads = db.create_query(&"".to_string()).unwrap().search_threads().unwrap();
-
-// let mut threads = Arc::new(<Query as QueryExt>::search_threads(query).unwrap());
-
-// for thread in Arc::get_mut(&mut threads).unwrap()
-// {
-// println!("thread {:?} {:?}", thread.subject(), thread.authors());
-// }
-// }
-// Err(err) => {
-// println!("Got error while trying to open db: {:?}", err);
-// }
-// }
-// }
-
-
-
-
-
diff --git a/tests/test_database.rs b/tests/test_database.rs
deleted file mode 100644
index 098e271..0000000
--- a/tests/test_database.rs
+++ /dev/null
@@ -1,339 +0,0 @@
-use fixtures::{NotmuchCommand, MailBox};
-
-// #[test]
-// // fn test_config_pathname_default(){
-
-// // monkeypatch.delenv('NOTMUCH_CONFIG', raising=False)
-// // user = pathlib.Path('~/.notmuch-config').expanduser()
-// // assert dbmod._config_pathname() == user
-
-// // }
-
-mod database {
-
- use super::*;
-
- #[test]
- fn test_create(){
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path());
- assert!(db.is_ok());
-
- assert!(mailbox.path().join(".notmuch/xapian").exists());
- }
-
- #[test]
- fn test_create_already_open(){
- let mailbox = MailBox::new();
- let db1 = notmuch::Database::create(&mailbox.path());
- assert!(db1.is_ok());
-
- let db2 = notmuch::Database::create(&mailbox.path());
- assert!(db2.is_err());
- }
-
-
- #[test]
- fn test_create_existing(){
- let mailbox = MailBox::new();
- notmuch::Database::create(&mailbox.path()).unwrap();
-
- let db2 = notmuch::Database::create(&mailbox.path());
- assert!(db2.is_err());
- }
-
-
- #[test]
- fn test_close(){
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- assert!(db.close().is_ok());
- }
-
- #[test]
- fn test_drop_noclose(){
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- drop(db);
- }
-
- #[test]
- fn test_close_drop(){
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
- db.close().unwrap();
- drop(db);
- }
-
- #[test]
- fn test_path(){
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
- assert_eq!(db.path(), mailbox.path());
- }
-
- #[test]
- fn test_version(){
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
- assert!(db.version() > 0);
- }
-
-}
-
-
-mod atomic {
- // use super::*;
-
- // TODO: how do I test this??
-
-}
-
-
-#[cfg(feature = "v0_21")]
-mod revision {
- use super::*;
-
- #[test]
- fn test_single_rev(){
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- let rev0 = db.revision();
- let rev1 = db.revision();
-
- assert!(rev0 == rev1);
- assert!(rev0 <= rev1);
- assert!(rev0 >= rev1);
-
- assert!(!(rev0 < rev1));
- assert!(!(rev0 > rev1));
- }
-
- #[test]
- fn test_diff_db(){
- let mailbox0 = MailBox::new();
- let db0 = notmuch::Database::create(&mailbox0.path()).unwrap();
- let rev0 = db0.revision();
-
-
- let mailbox1 = MailBox::new();
- let db1 = notmuch::Database::create(&mailbox1.path()).unwrap();
- let rev1 = db1.revision();
-
- assert_ne!(rev0, rev1);
- assert_ne!(rev0.uuid, rev1.uuid);
- }
-
- #[test]
- fn test_cmp(){
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- let rev0 = db.revision();
-
- let (_, filename) = mailbox.deliver(None, None, None, None, vec![], true, None, false, false, false).unwrap();
-
- db.index_file(&filename, None).unwrap();
-
- let rev1 = db.revision();
-
- assert!(rev0 < rev1);
- assert!(rev0 <= rev1);
- assert!(!(rev0 > rev1));
- assert!(!(rev0 >= rev1));
- assert!(!(rev0 == rev1));
- assert!(rev0 != rev1);
-
-
- }
-
- // TODO: add tests for revisions comparisons
-
-}
-
-
-mod messages {
- use super::*;
-
- #[test]
- fn test_add_message() {
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- let (msgid, filename) = mailbox.deliver(None, None, None, None, vec![], true, None, false, false, false).unwrap();
- let msg = db.index_file(&filename, None).unwrap();
-
- assert_eq!(msg.filename(), filename);
- assert_eq!(msg.id(), msgid);
-
- }
-
- #[test]
- fn test_remove_message() {
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- let (msgid, filename) = mailbox.deliver(None, None, None, None, vec![], true, None, false, false, false).unwrap();
- db.index_file(&filename, None).unwrap();
- assert!(db.find_message(&msgid).unwrap().is_some());
-
- db.remove_message(&filename).unwrap();
- assert!(db.find_message(&msgid).unwrap().is_none());
- }
-
- #[test]
- fn test_find_message() {
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- let (msgid, filename) = mailbox.deliver(None, None, None, None, vec![], true, None, false, false, false).unwrap();
- let msg0 = db.index_file(&filename, None).unwrap();
-
- let msg1 = db.find_message(&msgid).unwrap().unwrap();
- assert_eq!(msg0.id(), msgid);
- assert_eq!(msg0.id(), msg1.id());
-
- assert_eq!(msg0.filename(), filename);
- assert_eq!(msg0.filename(), msg1.filename());
- }
-
- #[test]
- fn test_find_message_notfound() {
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- assert!(db.find_message(&"foo").unwrap().is_none());
- }
-
-}
-
-mod tags {
- use super::*;
-
- #[test]
- fn test_none() {
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- let tags = db.all_tags().unwrap();
-
- assert_eq!(tags.count(), 0);
- }
-
- #[test]
- fn test_some() {
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
- let (_, filename) = mailbox.deliver(None, None, None, None, vec![], true, None, false, false, false).unwrap();
- let msg = db.index_file(&filename, None).unwrap();
-
- msg.add_tag(&"hello").unwrap();
- let tags: Vec<String> = db.all_tags().unwrap().collect();
-
- assert_eq!(tags.len(), 1);
- assert!(tags.iter().any(|x| x == "hello"));
- }
-
- #[test]
- fn test_iters() {
- let mailbox = MailBox::new();
- let db = notmuch::Database::create(&mailbox.path()).unwrap();
-
- let t1: Vec<String> = db.all_tags().unwrap().collect();
- let t2: Vec<String> = db.all_tags().unwrap().collect();
- assert_eq!(t1, t2);
- }
-
-}
-
-struct DatabaseFixture {
- // Return a read-write Database.
- // The database will have 3 messages, 2 threads.
-
- pub mailbox: MailBox,
- pub database: notmuch::Database,
-}
-
-impl DatabaseFixture {
- pub fn new() -> Self{
- let mailbox = MailBox::new();
-
- let (msgid, _) = mailbox.deliver(None, Some("foo".to_string()), None, None, vec![], true, None, false, false, false).unwrap();
- mailbox.deliver(None, Some("bar".to_string()), None, None, vec![], true, None, false, false, false).unwrap();
- mailbox.deliver(None, Some("baz".to_string()), None, None, vec![("In-Reply-To".to_string(), format!("<{}>", msgid))], true, None, false, false, false).unwrap();
-
- let cmd = NotmuchCommand::new(&mailbox.path());
- cmd.run(vec!["new"]).unwrap();
-
- let database = notmuch::Database::open(&mailbox.path(), notmuch::DatabaseMode::ReadWrite).unwrap();
-
- Self {
- mailbox,
- database
- }
- }
-}
-
-mod query {
- use super::*;
-
- #[test]
- fn test_count_messages() {
- let db = DatabaseFixture::new();
-
- let query = db.database.create_query("*").unwrap();
- assert_eq!(query.count_messages().unwrap(), 3);
- }
-
- #[test]
- fn test_message_no_results() {
- let db = DatabaseFixture::new();
-
- let query = db.database.create_query("not_a_matching_query").unwrap();
- let mut messages = query.search_messages().unwrap();
- let msg = messages.next();
- assert!(msg.is_none());
- }
-
- #[test]
- fn test_message_match() {
- let db = DatabaseFixture::new();
-
- let query = db.database.create_query("*").unwrap();
- let mut messages = query.search_messages().unwrap();
- let msg = messages.next();
- assert!(msg.is_some());
- }
-
- #[test]
- fn test_count_threads() {
- let db = DatabaseFixture::new();
-
- let query = db.database.create_query("*").unwrap();
- assert_eq!(query.count_threads().unwrap(), 2);
- }
-
- #[test]
- fn test_threads_no_results() {
- let db = DatabaseFixture::new();
-
- let query = db.database.create_query("not_a_matching_query").unwrap();
- let mut threads = query.search_threads().unwrap();
- let thrd = threads.next();
- assert!(thrd.is_none());
- }
-
- #[test]
- fn test_threads_match() {
- let db = DatabaseFixture::new();
-
- let query = db.database.create_query("*").unwrap();
- let mut threads = query.search_threads().unwrap();
- let thrd = threads.next();
- assert!(thrd.is_some());
- }
-}
-
diff --git a/tests/test_message.rs b/tests/test_message.rs
deleted file mode 100644
index 7af6f2c..0000000
--- a/tests/test_message.rs
+++ /dev/null
@@ -1,291 +0,0 @@
-use std::sync::Arc;
-use std::path::PathBuf;
-use fixtures::MailBox;
-
-struct MessageFixture {
- // Return a single thread with 2 messages
- pub mailbox: MailBox,
- pub database: Arc<notmuch::Database>,
- pub maildir_msg: (String, PathBuf),
- pub message: notmuch::Message<'static, notmuch::Database>,
-}
-
-impl MessageFixture {
- pub fn new() -> Self{
- let mailbox = MailBox::new();
-
- let (msgid, filename) = mailbox.deliver(None, None, None, None, vec![], true, None, false, false, false).unwrap();
-
- let database = Arc::new(notmuch::Database::create(&mailbox.path()).unwrap());
- let message = <notmuch::Database as notmuch::DatabaseExt>::index_file(database.clone(), &filename, None).unwrap();
-
- Self {
- mailbox,
- database,
- maildir_msg: (msgid, filename),
- message
- }
- }
-}
-
-mod message {
-
- use super::*;
-
- #[test]
- fn test_messageid() {
- let msg = MessageFixture::new();
- let copy = <notmuch::Database as notmuch::DatabaseExt>::find_message_by_filename(msg.database.clone(), &msg.message.filename()).unwrap().unwrap();
- assert_eq!(msg.message.id(), copy.id())
- }
-
- #[test]
- fn test_messageid_find() {
- let msg = MessageFixture::new();
- let copy = <notmuch::Database as notmuch::DatabaseExt>::find_message(msg.database.clone(), &msg.message.id()).unwrap().unwrap();
- assert_eq!(msg.message.id(), copy.id())
- }
-
- #[test]
- fn test_path() {
- let msg = MessageFixture::new();
- assert_eq!(msg.message.filename(), msg.maildir_msg.1)
- }
-
-
- #[test]
- fn test_filenames() {
- let msg = MessageFixture::new();
- let mut filenames = msg.message.filenames();
- let filename = filenames.next().unwrap();
-
- assert_eq!(filename, msg.message.filename());
-
- assert!(filenames.next().is_none());
- let names: Vec<PathBuf> = msg.message.filenames().collect();
-
- assert_eq!(names, vec![msg.maildir_msg.1]);
- }
-
- #[test]
- fn test_header() {
- let msg = MessageFixture::new();
- assert_eq!(msg.message.header(&"from").unwrap().unwrap().to_string(), "<src@example.com>");
- }
-
- #[test]
- fn test_header_not_present() {
- let msg = MessageFixture::new();
- assert_eq!(msg.message.header(&"foo").unwrap(), None);
- }
-
- #[test]
- fn test_freeze() {
- let msg = MessageFixture::new();
-
- msg.message.freeze().unwrap();
- msg.message.add_tag(&"foo").unwrap();
- msg.message.add_tag(&"bar").unwrap();
- msg.message.remove_tag(&"foo").unwrap();
- msg.message.thaw().unwrap();
-
- assert!(msg.message.tags().all(|x| x != "foo"));
- assert!(msg.message.tags().any(|x| x == "bar"));
- }
-
- #[test]
- fn test_freeze_context() {
- let msg = MessageFixture::new();
-
- {
- let _frozen = notmuch::FrozenMessage::new(&msg.message).unwrap();
- msg.message.add_tag(&"foo").unwrap();
- msg.message.add_tag(&"bar").unwrap();
- msg.message.remove_tag(&"foo").unwrap();
-
- }
- assert!(msg.message.tags().all(|x| x != "foo"));
- assert!(msg.message.tags().any(|x| x == "bar"));
- }
-
-
- #[test]
- fn test_freeze_err() {
- // not sure if this test is ok?
- let msg = MessageFixture::new();
-
- msg.message.add_tag(&"foo").unwrap();
-
- msg.message.freeze().unwrap();
- assert!(msg.message.remove_all_tags().is_ok());
-
- let copy = <notmuch::Database as notmuch::DatabaseExt>::find_message(msg.database.clone(), &msg.message.id()).unwrap().unwrap();
- assert!(copy.tags().any(|x| x == "foo"));
-
- msg.message.thaw().unwrap();
-
- assert!(!msg.message.tags().any(|x| x == "foo"));
-
- let copy2 = <notmuch::Database as notmuch::DatabaseExt>::find_message(msg.database.clone(), &msg.message.id()).unwrap().unwrap();
- assert!(!copy2.tags().any(|x| x == "foo"));
- }
-
- #[test]
- fn test_freeze_context_err() {
- // not sure if this test is ok?
- let msg = MessageFixture::new();
- msg.message.add_tag(&"foo").unwrap();
-
- {
- let _frozen = notmuch::FrozenMessage::new(&msg.message).unwrap();
- assert!(msg.message.remove_all_tags().is_ok());
- assert!(!msg.message.tags().any(|x| x == "foo"));
-
- let copy = <notmuch::Database as notmuch::DatabaseExt>::find_message(msg.database.clone(), &msg.message.id()).unwrap().unwrap();
- assert!(copy.tags().any(|x| x == "foo"));
- }
-
- let copy2 = <notmuch::Database as notmuch::DatabaseExt>::find_message(msg.database.clone(), &msg.message.id()).unwrap().unwrap();
- assert!(!copy2.tags().any(|x| x == "foo"));
- assert!(!msg.message.tags().any(|x| x == "foo"));
- }
-
- #[test]
- fn test_replies() {
- let msg = MessageFixture::new();
- assert_eq!(msg.message.replies().count(), 0);
- }
-
-}
-
-
-// def test_date(self, msg):
-// # XXX Someone seems to treat things as local time instead of
-// # UTC or the other way around.
-// now = int(time.time())
-// assert abs(now - msg.date) < 3600*24
-
-mod properties {
- use super::*;
-
- #[test]
- fn test_add_single() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"bar").unwrap();
- assert_eq!(msg.message.property(&"foo").unwrap(), "bar");
-
- msg.message.add_property(&"bar", &"baz").unwrap();
- assert_eq!(msg.message.property(&"bar").unwrap(), "baz");
- }
-
- #[test]
- fn test_add_dup() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"bar").unwrap();
- msg.message.add_property(&"foo", &"baz").unwrap();
-
- assert_eq!(msg.message.property(&"foo").unwrap(), "bar");
-
- let props = msg.message.properties(&"foo", true);
- let expect = vec![("foo", "bar"), ("foo", "baz")];
- for (&(ek, ev), (pk, pv)) in expect.iter().zip(props) {
- assert_eq!(ek, pk);
- assert_eq!(ev, pv);
- }
- }
-
- #[test]
- fn test_len() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"a").unwrap();
- msg.message.add_property(&"foo", &"b").unwrap();
- msg.message.add_property(&"bar", &"a").unwrap();
-
- let num_props = msg.message.properties(&"", false).count();
- assert_eq!(num_props, 3);
-
- let mut prop_keys: Vec<String> = msg.message.properties(&"", false).map(|x| x.0).collect();
- prop_keys.sort();
- prop_keys.dedup();
- assert_eq!(prop_keys.len(), 2);
-
- let mut prop_vals: Vec<String> = msg.message.properties(&"", false).map(|x| x.1).collect();
- prop_vals.sort();
- prop_vals.dedup();
- assert_eq!(prop_vals.len(), 2);
- }
-
- #[test]
- fn test_del() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"a").unwrap();
- msg.message.add_property(&"foo", &"b").unwrap();
-
- msg.message.remove_all_properties(Some(&"foo")).unwrap();
- assert!(msg.message.property(&"foo").is_err());
- }
-
- #[test]
- fn test_remove() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"a").unwrap();
- msg.message.add_property(&"foo", &"b").unwrap();
-
- msg.message.remove_property(&"foo", &"a").unwrap();
- assert_eq!(msg.message.property(&"foo").unwrap(), "b");
- }
-
- #[test]
- fn test_clear() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"a").unwrap();
-
- msg.message.remove_all_properties(None).unwrap();
- assert!(msg.message.property(&"foo").is_err());
- }
-
- #[test]
- fn test_getall() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"a").unwrap();
-
- let prop_keys: Vec<String> = msg.message.properties(&"foo", false).map(|x| x.0).collect();
- assert_eq!(prop_keys.len(), 1);
- assert_eq!(prop_keys, vec!["foo"]);
-
- let prop_vals: Vec<String> = msg.message.properties(&"foo", false).map(|x| x.1).collect();
- assert_eq!(prop_vals.len(), 1);
- assert_eq!(prop_vals, vec!["a"]);
- }
-
- #[test]
- fn test_getall_prefix() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"a").unwrap();
- msg.message.add_property(&"foobar", &"b").unwrap();
-
- let prop_keys: Vec<String> = msg.message.properties(&"foo", false).map(|x| x.0).collect();
- assert_eq!(prop_keys.len(), 2);
- assert_eq!(prop_keys, vec!["foo", "foobar"]);
-
- let prop_vals: Vec<String> = msg.message.properties(&"foo", false).map(|x| x.1).collect();
- assert_eq!(prop_vals.len(), 2);
- assert_eq!(prop_vals, vec!["a", "b"]);
- }
-
- #[test]
- fn test_getall_exact() {
- let msg = MessageFixture::new();
- msg.message.add_property(&"foo", &"a").unwrap();
- msg.message.add_property(&"foobar", &"b").unwrap();
-
- let prop_keys: Vec<String> = msg.message.properties(&"foo", true).map(|x| x.0).collect();
- assert_eq!(prop_keys.len(), 1);
- assert_eq!(prop_keys, vec!["foo"]);
-
- let prop_vals: Vec<String> = msg.message.properties(&"foo", true).map(|x| x.1).collect();
- assert_eq!(prop_vals.len(), 1);
- assert_eq!(prop_vals, vec!["a"]);
- }
-}
-
diff --git a/tests/test_query.rs b/tests/test_query.rs
deleted file mode 100644
index ad8f299..0000000
--- a/tests/test_query.rs
+++ /dev/null
@@ -1,97 +0,0 @@
-use std::sync::Arc;
-use fixtures::{NotmuchCommand, MailBox};
-
-
-struct QueryFixture {
- // Return a single thread with 2 messages
- pub mailbox: MailBox,
- pub query: notmuch::Query<'static>,
-}
-
-impl QueryFixture {
- pub fn new() -> Self{
- let mailbox = MailBox::new();
-
- let (msgid, _) = mailbox.deliver(None, Some("foo".to_string()), None, None, vec![], true, None, false, false, false).unwrap();
- mailbox.deliver(None, Some("bar".to_string()), None, None, vec![], true, None, false, false, false).unwrap();
- mailbox.deliver(None, Some("baz".to_string()), None, None, vec![("In-Reply-To".to_string(), format!("<{}>", msgid))], true, None, false, false, false).unwrap();
- mailbox.deliver(None, Some("foo qux".to_string()), None, None, vec![], true, None, false, false, false).unwrap();
- mailbox.deliver(None, Some("foo quux".to_string()), None, None, vec![], true, None, false, false, false).unwrap();
-
- let cmd = NotmuchCommand::new(&mailbox.path());
- cmd.run(vec!["new"]).unwrap();
-
- let query = {
- let database = Arc::new(notmuch::Database::open(&mailbox.path(), notmuch::DatabaseMode::ReadWrite).unwrap());
-
- notmuch::Query::create(database, &"foo".to_string()).unwrap()
- };
-
- Self {
- mailbox,
- query
- }
- }
-}
-
-#[test]
-fn test_iter_threads() {
- let q = QueryFixture::new();
-
- let threads = q.query.search_threads().unwrap();
-
- let mut num = 0;
- for _thread in threads {
- num += 1;
- }
-
- assert_eq!(num, 3);
-
-}
-
-#[test]
-fn test_iter_threads_ext() {
- let q = QueryFixture::new();
-
- let threads = <notmuch::Query as notmuch::QueryExt>::search_threads(q.query).unwrap();
-
- let mut num = 0;
- for _thread in threads {
- num += 1;
- }
-
- assert_eq!(num, 3);
-
-}
-
-
-#[test]
-fn test_iter_messages() {
- let q = QueryFixture::new();
-
- let messages = q.query.search_messages().unwrap();
-
- let mut num = 0;
- for _message in messages {
- num += 1;
- }
-
- assert_eq!(num, 3);
-
-}
-
-#[test]
-fn test_iter_messages_ext() {
- let q = QueryFixture::new();
-
- let messages = <notmuch::Query as notmuch::QueryExt>::search_messages(q.query).unwrap();
-
- let mut num = 0;
- for _message in messages {
- num += 1;
- }
-
- assert_eq!(num, 3);
-
-}
-
diff --git a/tests/test_tags.rs b/tests/test_tags.rs
deleted file mode 100644
index 3d39486..0000000
--- a/tests/test_tags.rs
+++ /dev/null
@@ -1,142 +0,0 @@
-use std::sync::Arc;
-use fixtures::{MailBox, NotmuchCommand};
-
-struct TagSetFixture {
- // An non-empty immutable tagset.
- // This will have the default new mail tags: inbox, unread.
- pub mailbox: MailBox,
- pub cmd: NotmuchCommand,
- pub database: Arc<notmuch::Database>,
- pub message: notmuch::Message<'static, notmuch::Database>
-}
-
-impl TagSetFixture {
- pub fn new(mutable: bool, flagged: bool) -> Self{
- let mailbox = MailBox::new();
- let (_msg, filename) = mailbox.deliver(None, None, None, None, vec![], !flagged, None, false, false, flagged).unwrap();
-
- let cmd = NotmuchCommand::new(&mailbox.path());
- cmd.run(vec!["new"]).unwrap();
-
- let database = Arc::new(notmuch::Database::open(&mailbox.path(), if !mutable {notmuch::DatabaseMode::ReadOnly} else { notmuch::DatabaseMode::ReadWrite }).unwrap());
- let message = <notmuch::Database as notmuch::DatabaseExt>::find_message_by_filename(database.clone(), &filename).unwrap().unwrap();
-
- Self {
- mailbox,
- database,
- cmd,
- message
- }
- }
-}
-
-mod immutable {
-
- use super::*;
-
- #[test]
- fn test_neg(){
- let tagset = TagSetFixture::new(false, false);
-
- let tags: Vec<String> = tagset.database.all_tags().unwrap().collect();
- tagset.cmd.run(vec!["tag", "+foo", "*"]).unwrap();
-
- let database = notmuch::Database::open(&tagset.mailbox.path(), notmuch::DatabaseMode::ReadOnly).unwrap();
- let ntags: Vec<String> = database.all_tags().unwrap().collect();
-
- assert_ne!(tags, ntags);
- }
-
- #[test]
- fn test_contains(){
- let tagset = TagSetFixture::new(false, false);
- let tags: Vec<String> = tagset.database.all_tags().unwrap().collect();
-
- assert!(tags.iter().any(|x| x == "unread"));
- assert!(!tags.iter().any(|x| x == "foo"));
- }
-
-
- #[test]
- fn test_len(){
- let tagset = TagSetFixture::new(false, false);
- assert_eq!(tagset.database.all_tags().unwrap().count(), 2);
- }
-
-}
-
-mod mutable {
-
- use super::*;
-
- #[test]
- fn test_add(){
- let tagset = TagSetFixture::new(true, false);
- assert!(!tagset.message.tags().any(|x| x == "foo"));
-
- tagset.message.add_tag("foo").unwrap();
- assert!(tagset.message.tags().any(|x| x == "foo"));
- }
-
- #[test]
- fn test_discard(){
- let tagset = TagSetFixture::new(true, false);
- assert!(tagset.message.tags().any(|x| x == "inbox"));
-
- tagset.message.remove_tag("inbox").unwrap();
- assert!(!tagset.message.tags().any(|x| x == "unbox"));
- }
-
- #[test]
- fn test_discard_not_present(){
- let tagset = TagSetFixture::new(true, false);
- assert!(!tagset.message.tags().any(|x| x == "foo"));
-
- tagset.message.remove_tag("foo").unwrap();
- }
-
- #[test]
- fn test_clear(){
- let tagset = TagSetFixture::new(true, false);
- assert!(tagset.message.tags().count() > 0);
- tagset.message.remove_all_tags().unwrap();
-
- assert!(tagset.message.tags().count() == 0);
- }
-
- #[test]
- fn test_from_maildir_flags(){
- let tagset = TagSetFixture::new(true, true);
-
- tagset.message.remove_tag(&"flagged").unwrap();
- tagset.message.maildir_flags_to_tags().unwrap();
-
- assert!(tagset.message.tags().any(|x| x == "flagged"));
- }
-
-
- #[test]
- fn test_to_maildir_flags(){
-
- let tagset = TagSetFixture::new(true, true);
-
- let filename = tagset.message.filename();
- let filestr = filename.to_string_lossy();
-
- let file_parts: Vec<&str> = filestr.split(',').collect();
- let flags = file_parts.last().unwrap();
- println!("Flags {:?}", flags);
-
- assert!(flags.contains('F'));
- tagset.message.remove_tag(&"flagged").unwrap();
- tagset.message.tags_to_maildir_flags().unwrap();
-
- let filename = tagset.message.filename();
- let filestr = filename.to_string_lossy();
-
- let file_parts: Vec<&str> = filestr.split(',').collect();
- let flags = file_parts.last().unwrap();
- assert!(!flags.contains('F'));
- }
-
-} \ No newline at end of file
diff --git a/tests/test_thread.rs b/tests/test_thread.rs
deleted file mode 100644
index 89f1ea0..0000000
--- a/tests/test_thread.rs
+++ /dev/null
@@ -1,102 +0,0 @@
-use std::sync::Arc;
-use fixtures::{NotmuchCommand, MailBox};
-
-
-struct ThreadFixture {
- // Return a single thread with 2 messages
- pub mailbox: MailBox,
- pub thread: notmuch::Thread<'static, 'static>,
-}
-
-impl ThreadFixture {
- pub fn new() -> Self{
- let mailbox = MailBox::new();
-
- let (msgid, _) = mailbox.deliver(None, Some("foo".to_string()), None, None, vec![], true, None, false, false, false).unwrap();
- mailbox.deliver(None, Some("bar".to_string()), None, None, vec![("In-Reply-To".to_string(), format!("<{}>", msgid))], true, None, false, false, false).unwrap();
-
- let cmd = NotmuchCommand::new(&mailbox.path());
- cmd.run(vec!["new"]).unwrap();
-
- let mut threads = {
- let database = Arc::new(notmuch::Database::open(&mailbox.path(), notmuch::DatabaseMode::ReadWrite).unwrap());
-
- let query = notmuch::Query::create(database.clone(), &"foo".to_string()).unwrap();
-
- <notmuch::Query as notmuch::QueryExt>::search_threads(query).unwrap()
- };
- let thread = threads.next().unwrap();
-
- Self {
- mailbox,
- thread
- }
- }
-}
-
-#[test]
-fn test_threadid() {
- let thread = ThreadFixture::new();
- assert!(!thread.thread.id().is_empty());
-}
-
-
-#[test]
-fn test_toplevel() {
- let thread = ThreadFixture::new();
- let msgs = thread.thread.toplevel_messages();
-
- assert_eq!(msgs.count(), 1);
-}
-
-
-#[test]
-fn test_toplevel_reply() {
- let thread = ThreadFixture::new();
- let msg = thread.thread.toplevel_messages().next().unwrap();
-
- assert_eq!(msg.replies().count(), 1);
-}
-
-#[test]
-fn test_iter() {
- let thread = ThreadFixture::new();
- let msg_count0 = thread.thread.messages().count() as i32;
- let msg_count1 = thread.thread.total_messages();
-
- assert_eq!(msg_count0, msg_count1);
-}
-
-#[test]
-fn test_matched() {
- let thread = ThreadFixture::new();
- assert_eq!(thread.thread.matched_messages(), 1);
-}
-
-
-#[test]
-fn test_authors() {
- let thread = ThreadFixture::new();
-
- assert_eq!(thread.thread.authors(), vec!["src@example.com".to_string()]);
-}
-
-
-#[test]
-fn test_subject() {
- let thread = ThreadFixture::new();
-
- println!("{:?}", thread.thread.subject());
- assert_eq!(thread.thread.subject(), "Test mail");
-}
-
-
-
-#[test]
-fn test_tags() {
- let thread = ThreadFixture::new();
-
- let tags: Vec<String> = thread.thread.tags().collect();
- assert!(tags.iter().any(|x| x == "inbox"));
-}
- \ No newline at end of file