podal/src/history/add.rs

82 lines
1.9 KiB
Rust
Raw Normal View History

use crate::file::FileEnv;
2023-07-25 10:55:02 +01:00
use crate::prelude::*;
use super::Link;
2023-07-25 10:55:02 +01:00
pub fn add(link: &Link, file_name: &str, e: &FileEnv) -> Result<()> {
(e.append_line)(file_name, &link.href)?;
2023-07-25 10:55:02 +01:00
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 (dir, file_name) =
create_text_file("download.txt", include_bytes!("../../test/data/empty.txt"))?;
std::fs::remove_file(&file_name)?;
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::default())?;
//then
let content: Vec<String> = read_text_file(&file_name)?;
drop(dir);
let expected = vec!["foo".to_string()];
assert_eq!(content, expected);
Ok(())
}
#[test]
fn appends_to_exising_file() -> Result<()> {
// given
let (dir, file_name) = create_text_file(
"download.txt",
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::default())?;
//then
let content: Vec<String> = read_text_file(&file_name)?;
drop(dir);
let expected = vec![
"line-1".to_string(),
"line-2".to_string(),
"foo".to_string(),
];
assert_eq!(content, expected);
Ok(())
}
}