aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeddy Wing2016-04-24 09:41:02 -0400
committerTeddy Wing2016-04-24 09:41:02 -0400
commit5e18a1e5a34cac5876d43796c36e6c1369658c6e (patch)
tree67684ab4f153eb8c01fc25f2c77461d26bab3932
parent15759804bd3be99fc6374ee993038440267fdfb5 (diff)
parent79e78aaa7c0c77064264ffdad0c3172aa0f5c376 (diff)
downloadmutt-alias-auto-add-5e18a1e5a34cac5876d43796c36e6c1369658c6e.tar.bz2
Merge branch 'append-alias-even-if-it-doesn,t-already-exist'
-rw-r--r--src/alias.rs7
-rw-r--r--src/tests.rs58
2 files changed, 46 insertions, 19 deletions
diff --git a/src/alias.rs b/src/alias.rs
index 8a66db8..0fd05d2 100644
--- a/src/alias.rs
+++ b/src/alias.rs
@@ -75,8 +75,11 @@ impl Alias {
}
pub fn write_to_file<P: AsRef<Path>>(&mut self, file: P) -> Result<(), AliasSearchError> {
- let similar_aliases = try!(self.find_in_file(&file));
- self.update_alias_id(similar_aliases);
+ match self.find_in_file(&file) {
+ Ok(similar_aliases) => self.update_alias_id(similar_aliases),
+ Err(AliasSearchError::NotFound) => {},
+ Err(e) => return Err(e),
+ };
let mut f = try!(OpenOptions::new().append(true).open(file));
try!(f.write_all(format!("{}\n", self.to_string()).as_bytes()));
diff --git a/src/tests.rs b/src/tests.rs
index 708121e..15b5ae8 100644
--- a/src/tests.rs
+++ b/src/tests.rs
@@ -122,31 +122,55 @@ fn update_alias_id_increments_alias() {
}
-#[test]
-fn alias_write_to_file_must_write_given_alias_to_file() {
- let mut alias = update_alias_id_sample_alias();
-
+fn alias_write_to_file_helper<F>(alias: &mut Alias, filename: &str, f: F) -> String
+ where F: Fn(&Alias, &str) {
// Create a new test file
- let test_file = "./testdata/write_to_file";
- fs::copy("./testdata/aliases", test_file).expect("Alias file copy failed");
+ let test_file = format!("./testdata/{}", filename);
+ fs::copy("./testdata/aliases", &test_file).expect("Alias file copy failed");
- // Write a duplicate alias so that `write_to_file` is able to append a
- // new one
- let mut f = OpenOptions::new().append(true).open(test_file)
- .expect("Failed to open test file for appending");
- writeln!(f, "{}", Alias { email: "derpy@home.pv".to_owned(), .. alias.clone() }
- .to_string())
- .expect("Failed to append matching alias");
+ f(alias, &test_file);
// Write our new alias to the file
- alias.write_to_file(test_file).expect("`write_to_file` failed");
+ alias.write_to_file(&test_file).expect("`write_to_file` failed");
// Get the file's contents for testing
- let mut f = File::open(test_file).expect("Failed to open test file");
+ let mut f = File::open(&test_file).expect("Failed to open test file");
let mut file_contents = String::new();
f.read_to_string(&mut file_contents).expect("Failed to read test file contents");
let file_contents: Vec<&str> = file_contents.split('\n').collect();
- fs::remove_file(test_file).expect("Failed to delete test file");
+ fs::remove_file(&test_file).expect("Failed to delete test file");
+
+ file_contents[file_contents.len() - 2].to_string()
+}
+
+#[test]
+fn alias_write_to_file_must_write_unique_alias_to_file_if_one_already_exists() {
+ let mut alias = update_alias_id_sample_alias();
+ let alias_line = alias_write_to_file_helper(
+ &mut alias,
+ "alias_write_to_file_must_write_unique_alias_to_file_if_one_already_exists",
+ |alias: &Alias, filename: &str| {
+ // Write a duplicate alias so that `write_to_file` is able to append a
+ // new one
+ let mut f = OpenOptions::new().append(true).open(filename)
+ .expect("Failed to open test file for appending");
+ writeln!(f, "{}", Alias { email: "derpy@home.pv".to_owned(), .. alias.clone() }
+ .to_string())
+ .expect("Failed to append matching alias");
+ }
+ );
+
+ assert_eq!(alias.to_string(), alias_line);
+}
+
+#[test]
+#[allow(unused_variables)]
+fn alias_write_to_file_must_write_given_alias_to_file() {
+ let mut alias = update_alias_id_sample_alias();
+ let alias_line = alias_write_to_file_helper(
+ &mut alias,
+ "alias_write_to_file_must_write_given_alias_to_file",
+ |alias: &Alias, filename: &str| {});
- assert_eq!(alias.to_string(), file_contents[file_contents.len() - 2]);
+ assert_eq!(alias.to_string(), alias_line);
}