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 /src | |
| 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'
Diffstat (limited to 'src')
| -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);  } | 
