use crate::file::FileEnv; use crate::prelude::*; use super::Link; pub fn add(link: &Link, file_name: &str, e: &FileEnv) -> Result<()> { (e.append_line)(file_name, &link.href)?; Ok(()) } #[cfg(test)] mod tests { use crate::{ history::Link, test_utils::{create_text_file, read_text_file}, }; use super::*; #[test] fn creates_file_if_missing() -> Result<()> { //given let file_name = "download.txt"; let dir = create_text_file(file_name, include_bytes!("../../test/data/empty.txt"))?; let path = format!("{}/{}", dir.path().to_string_lossy(), file_name); std::fs::remove_file(path)?; let link = Link { href: "foo".to_string(), rel: "bar".to_string(), hreflang: None, mime_type: None, title: None, length: None, }; //when add( &link, file_name, &FileEnv::create(dir.path().to_string_lossy().to_string()), )?; //then let content: Vec = read_text_file(dir.path(), file_name)?; drop(dir); let expected = vec!["foo".to_string()]; assert_eq!(content, expected); Ok(()) } #[test] fn appends_to_exising_file() -> Result<()> { // given let file_name = "download.txt"; let dir = create_text_file(file_name, include_bytes!("../../test/data/downloads.txt"))?; let link = Link { href: "foo".to_string(), rel: "bar".to_string(), hreflang: None, mime_type: None, title: None, length: None, }; //when add( &link, file_name, &FileEnv::create(dir.path().to_string_lossy().to_string()), )?; //then let content: Vec = read_text_file(dir.path(), file_name)?; drop(dir); let expected = vec![ "line-1".to_string(), "line-2".to_string(), "foo".to_string(), ]; assert_eq!(content, expected); Ok(()) } }