diff options
| author | Teddy Wing | 2016-04-24 09:41:02 -0400 |
|---|---|---|
| committer | Teddy Wing | 2016-04-24 09:41:02 -0400 |
| commit | 5e18a1e5a34cac5876d43796c36e6c1369658c6e (patch) | |
| tree | 67684ab4f153eb8c01fc25f2c77461d26bab3932 | |
| parent | 15759804bd3be99fc6374ee993038440267fdfb5 (diff) | |
| parent | 79e78aaa7c0c77064264ffdad0c3172aa0f5c376 (diff) | |
| download | mutt-alias-auto-add-5e18a1e5a34cac5876d43796c36e6c1369658c6e.tar.bz2 | |
Merge branch 'append-alias-even-if-it-doesn,t-already-exist'
| -rw-r--r-- | src/alias.rs | 7 | ||||
| -rw-r--r-- | src/tests.rs | 58 |
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); } |
