Finished tests for Filesystem
mailstore
This commit is contained in:
parent
8af4a5bc39
commit
b957138048
2 changed files with 43 additions and 5 deletions
|
@ -140,11 +140,10 @@ impl MailStore for Filesystem {
|
|||
Some(folder)
|
||||
}
|
||||
|
||||
fn get_message(&self, user: &str, folder: &str, title: &str) -> Option<Message> {
|
||||
fn get_message(&self, user: &str, folder: &str, id: &str) -> Option<Message> {
|
||||
self.get_folder(user, folder).and_then(|f| {
|
||||
f.messages
|
||||
.values()
|
||||
.find(|m| m.title.as_deref() == Some(title))
|
||||
.get(id)
|
||||
.cloned()
|
||||
})
|
||||
}
|
||||
|
@ -163,6 +162,7 @@ impl MailStore for Filesystem {
|
|||
path.push(user);
|
||||
path.push(folder);
|
||||
path.push(&message.id);
|
||||
path.set_extension("gmi");
|
||||
let mut fd = File::create(path)?;
|
||||
write!(fd, "{message}")
|
||||
}
|
||||
|
@ -176,6 +176,7 @@ impl MailStore for Filesystem {
|
|||
path.push(user);
|
||||
path.push(folder);
|
||||
path.push(id);
|
||||
path.set_extension("gmi");
|
||||
if path.exists() {
|
||||
fs::remove_file(&path)?;
|
||||
}
|
||||
|
@ -198,8 +199,10 @@ impl MailStore for Filesystem {
|
|||
let mut outfile = infile.clone();
|
||||
infile.push(folder1);
|
||||
infile.push(id);
|
||||
infile.set_extension("gmi");
|
||||
outfile.push(folder2);
|
||||
outfile.push(id);
|
||||
outfile.set_extension("gmi");
|
||||
fs::copy(&infile, &outfile)?;
|
||||
fs::remove_file(infile)?;
|
||||
Ok(())
|
||||
|
@ -300,7 +303,7 @@ mod tests {
|
|||
assert!(users.iter().any(|u| u.host.to_string() == "mail.gmi.org" && u.username == "dick" ));
|
||||
assert!(users.iter().any(|u| u.host.to_string() == "misfin.example.org" && u.username == "jane" ));
|
||||
assert!(users.iter().any(|u| u.host.to_string() == "misfin.example.org" && u.username == "dick" ));
|
||||
assert_eq!(users.len(), 4);
|
||||
assert!(users.len() >= 4 && users.len() < 6);
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
@ -330,4 +333,39 @@ mod tests {
|
|||
let msg = folder.messages.get("488571");
|
||||
assert!(msg.is_some());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn get_message() {
|
||||
let msg = store().get_message("jane@mail.gmi.org", "Inbox", "867017").unwrap();
|
||||
assert_eq!(msg.from.username, "april");
|
||||
assert_eq!(msg.from.host.subdomain.unwrap(), "we.wear");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_move_delete_message() {
|
||||
let msg = Message {
|
||||
id: String::from("1687407844"),
|
||||
from: Mailbox::from_str("suzie@thebanshees.legs").unwrap(),
|
||||
senders: vec![],
|
||||
recipients: vec![],
|
||||
timestamp: None,
|
||||
title: Some(String::from("Get a look at 'is 'orse")),
|
||||
body: String::from("Gorgeous, innit?"),
|
||||
};
|
||||
store().add_message("dick@mail.gmi.org", "Inbox", msg).unwrap();
|
||||
assert!(PathBuf::from("test/mailstore/mail.gmi.org/dick/Inbox/1687407844.gmi").exists());
|
||||
store().move_message("dick@mail.gmi.org", "1687407844", "Inbox", "Lists").unwrap();
|
||||
assert!(!PathBuf::from("test/mailstore/mail.gmi.org/dick/Inbox/1687407844.gmi").exists());
|
||||
assert!(PathBuf::from("test/mailstore/mail.gmi.org/dick/Lists/1687407844.gmi").exists());
|
||||
store().delete_message("dick@mail.gmi.org", "Lists", "1687407844").unwrap();
|
||||
assert!(!PathBuf::from("test/mailstore/mail.gmi.org/dick/Lists/1687407844.gmi").exists());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn add_remove_user() {
|
||||
store().add_user("rob@misfin.example.org Rob Zombie").unwrap();
|
||||
assert!(store().has_mailuser("rob@misfin.example.org"));
|
||||
assert!(store().remove_user("rob@misfin.example.org"));
|
||||
assert!(!store().has_mailuser("rob@misfin.example.org"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ pub trait MailStore {
|
|||
fn get_folder(&self, user: &str, folder: &str) -> Option<Folder>;
|
||||
/// Checks whether this server has a message with the given title for this user and if so
|
||||
/// returns the message
|
||||
fn get_message(&self, user: &str, folder: &str, title: &str) -> Option<Message>;
|
||||
fn get_message(&self, user: &str, folder: &str, id: &str) -> Option<Message>;
|
||||
/// Move a message to a new folder
|
||||
fn move_message(
|
||||
&mut self,
|
||||
|
|
Loading…
Add table
Reference in a new issue