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)
|
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| {
|
self.get_folder(user, folder).and_then(|f| {
|
||||||
f.messages
|
f.messages
|
||||||
.values()
|
.get(id)
|
||||||
.find(|m| m.title.as_deref() == Some(title))
|
|
||||||
.cloned()
|
.cloned()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -163,6 +162,7 @@ impl MailStore for Filesystem {
|
||||||
path.push(user);
|
path.push(user);
|
||||||
path.push(folder);
|
path.push(folder);
|
||||||
path.push(&message.id);
|
path.push(&message.id);
|
||||||
|
path.set_extension("gmi");
|
||||||
let mut fd = File::create(path)?;
|
let mut fd = File::create(path)?;
|
||||||
write!(fd, "{message}")
|
write!(fd, "{message}")
|
||||||
}
|
}
|
||||||
|
@ -176,6 +176,7 @@ impl MailStore for Filesystem {
|
||||||
path.push(user);
|
path.push(user);
|
||||||
path.push(folder);
|
path.push(folder);
|
||||||
path.push(id);
|
path.push(id);
|
||||||
|
path.set_extension("gmi");
|
||||||
if path.exists() {
|
if path.exists() {
|
||||||
fs::remove_file(&path)?;
|
fs::remove_file(&path)?;
|
||||||
}
|
}
|
||||||
|
@ -198,8 +199,10 @@ impl MailStore for Filesystem {
|
||||||
let mut outfile = infile.clone();
|
let mut outfile = infile.clone();
|
||||||
infile.push(folder1);
|
infile.push(folder1);
|
||||||
infile.push(id);
|
infile.push(id);
|
||||||
|
infile.set_extension("gmi");
|
||||||
outfile.push(folder2);
|
outfile.push(folder2);
|
||||||
outfile.push(id);
|
outfile.push(id);
|
||||||
|
outfile.set_extension("gmi");
|
||||||
fs::copy(&infile, &outfile)?;
|
fs::copy(&infile, &outfile)?;
|
||||||
fs::remove_file(infile)?;
|
fs::remove_file(infile)?;
|
||||||
Ok(())
|
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() == "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 == "jane" ));
|
||||||
assert!(users.iter().any(|u| u.host.to_string() == "misfin.example.org" && u.username == "dick" ));
|
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]
|
#[test]
|
||||||
|
@ -330,4 +333,39 @@ mod tests {
|
||||||
let msg = folder.messages.get("488571");
|
let msg = folder.messages.get("488571");
|
||||||
assert!(msg.is_some());
|
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>;
|
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
|
/// Checks whether this server has a message with the given title for this user and if so
|
||||||
/// returns the message
|
/// 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
|
/// Move a message to a new folder
|
||||||
fn move_message(
|
fn move_message(
|
||||||
&mut self,
|
&mut self,
|
||||||
|
|
Loading…
Add table
Reference in a new issue