use notmuch::ConfigKey;
use crate::fixtures::{MailBox, NotmuchCommand};
struct ConfigFixture {
pub mailbox: MailBox,
pub database: notmuch::Database,
}
impl ConfigFixture {
pub fn new() -> Self {
let mailbox = MailBox::new();
let cmd = NotmuchCommand::new(&mailbox.path());
cmd.run(vec!["new"]).unwrap();
let database = notmuch::Database::open_with_config(
Some(&mailbox.path()),
notmuch::DatabaseMode::ReadWrite,
Some(mailbox.path().join("notmuch-config")),
None,
)
.unwrap();
Self { mailbox, database }
}
}
mod config {
use super::*;
#[test]
fn test_config() {
let db = ConfigFixture::new();
assert_eq!(
db.database.config(ConfigKey::UserName).unwrap(),
"Some Hacker"
);
assert_eq!(
db.database.config(ConfigKey::MailRoot).unwrap(),
db.mailbox.path().to_str().unwrap()
);
}
#[test]
fn test_config_set() {
let db = ConfigFixture::new();
const USER_NAME: &str = "Hideo Kojima";
db.database
.config_set(ConfigKey::UserName, USER_NAME)
.unwrap();
assert_eq!(db.database.config(ConfigKey::UserName).unwrap(), USER_NAME);
}
#[test]
fn test_config_values() {
let db = ConfigFixture::new();
let tags: Vec<_> = db
.database
.config_values(ConfigKey::NewTags)
.unwrap()
.collect();
assert_eq!(tags.len(), 2);
assert!(tags.iter().any(|x| x == "unread"));
assert!(tags.iter().any(|x| x == "inbox"));
}
#[test]
fn test_config_values_string() {
let db = ConfigFixture::new();
let tags: Vec<_> = db
.database
.config_values_string("search.exclude_tags")
.unwrap()
.collect();
assert_eq!(tags.len(), 2);
assert!(tags.iter().any(|x| x == "deleted"));
assert!(tags.iter().any(|x| x == "spam"));
}
#[test]
fn test_config_pairs() {
let db = ConfigFixture::new();
let pairs: Vec<(_, _)> = db.database.config_pairs("user").unwrap().collect();
println!("{pairs:?}");
assert_eq!(pairs.len(), 3);
assert!(pairs
.iter()
.any(|(k, v)| k == "user.name" && v.as_deref() == Some("Some Hacker")));
assert!(pairs
.iter()
.any(|(k, v)| k == "user.primary_email" && v.as_deref() == Some("dst@example.com")));
assert!(pairs
.iter()
.any(|(k, v)| k == "user.other_email" && *v == None));
}
#[test]
fn test_config_bool() {
let db = ConfigFixture::new();
assert_eq!(
db.database.config_bool(ConfigKey::MaildirFlags).unwrap(),
true
);
}
#[test]
fn test_config_path() {
let db = ConfigFixture::new();
assert_eq!(
db.database.config_path().unwrap(),
db.mailbox.path().join("notmuch-config"),
);
}
}