diff options
Diffstat (limited to 'tests/test_deliver.rs')
-rw-r--r-- | tests/test_deliver.rs | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/tests/test_deliver.rs b/tests/test_deliver.rs new file mode 100644 index 0000000..ac80664 --- /dev/null +++ b/tests/test_deliver.rs @@ -0,0 +1,86 @@ +// Copyright 2019 Alexandros Frantzis +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. +// +// SPDX-License-Identifier: MPL-2.0 + +use mda::Email; +use tempfile; +use std::fs; +use std::os::unix::fs as unix_fs; + +#[test] +fn creates_maildir_dir_structure() { + let tmpdir = tempfile::tempdir().unwrap(); + + let email = Email::from_vec(Vec::new()).unwrap(); + email.deliver_to_maildir(tmpdir.path()).unwrap(); + + let entries: Vec<_> = fs::read_dir(tmpdir.path()).unwrap().collect(); + + let dir_named = |x,e: &fs::DirEntry| e.path() == tmpdir.path().join(x) && + e.metadata().unwrap().is_dir(); + + assert_eq!(entries.len(), 3); + assert_eq!(entries.iter().filter(|e| dir_named("new", e.as_ref().unwrap())).count(), 1); + assert_eq!(entries.iter().filter(|e| dir_named("tmp", e.as_ref().unwrap())).count(), 1); + assert_eq!(entries.iter().filter(|e| dir_named("cur", e.as_ref().unwrap())).count(), 1); +} + +#[test] +fn delivers_to_maildir_new() { + let tmpdir = tempfile::tempdir().unwrap(); + let data = [1, 3, 5, 7, 11]; + + let email = Email::from_vec(data.to_vec()).unwrap(); + email.deliver_to_maildir(tmpdir.path()).unwrap(); + + let new_entries: Vec<_> = fs::read_dir(tmpdir.path().join("new")).unwrap().collect(); + let tmp_entries: Vec<_> = fs::read_dir(tmpdir.path().join("tmp")).unwrap().collect(); + let cur_entries: Vec<_> = fs::read_dir(tmpdir.path().join("cur")).unwrap().collect(); + + assert_eq!(new_entries.len(), 1); + + let file_contents = fs::read(new_entries[0].as_ref().unwrap().path()).unwrap(); + assert_eq!(file_contents, &data); + + assert_eq!(tmp_entries.len(), 0); + assert_eq!(cur_entries.len(), 0); +} + +#[test] +fn keeps_old_maildir_data() { + let tmpdir = tempfile::tempdir().unwrap(); + + let data1 = [1, 3, 5, 7, 11]; + let email1 = Email::from_vec(data1.to_vec()).unwrap(); + let path1 = email1.deliver_to_maildir(tmpdir.path()).unwrap(); + + let data2 = [2, 4, 6, 8, 12]; + let email2 = Email::from_vec(data2.to_vec()).unwrap(); + let path2 = email2.deliver_to_maildir(tmpdir.path()).unwrap(); + + let new_entries: Vec<_> = fs::read_dir(tmpdir.path().join("new")).unwrap().collect(); + + assert_eq!(new_entries.len(), 2); + assert_eq!(new_entries.iter().filter(|e| e.as_ref().unwrap().path() == path1).count(), 1); + assert_eq!(new_entries.iter().filter(|e| e.as_ref().unwrap().path() == path2).count(), 1); + + assert_eq!(fs::read(path1).unwrap(), &data1); + assert_eq!(fs::read(path2).unwrap(), &data2); +} + +#[test] +fn deals_with_soft_link_path() { + let tmpdir = tempfile::tempdir().unwrap(); + let subdir = tmpdir.path().join("subdir"); + let symlink = tmpdir.path().join("symlink"); + + fs::create_dir(&subdir).unwrap(); + unix_fs::symlink(&subdir, &symlink).unwrap(); + + let email = Email::from_vec(Vec::new()).unwrap(); + email.deliver_to_maildir(&symlink).unwrap(); +} |