2023-07-29 20:36:03 +01:00
|
|
|
use crate::file::FileEnv;
|
2023-07-25 10:55:02 +01:00
|
|
|
use crate::prelude::*;
|
|
|
|
|
2023-07-29 20:36:03 +01:00
|
|
|
use super::Link;
|
2023-07-25 10:55:02 +01:00
|
|
|
|
2023-07-29 20:36:03 +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(())
|
|
|
|
}
|
2023-07-28 18:35:41 +01:00
|
|
|
|
|
|
|
#[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
|
2023-07-29 20:36:03 +01:00
|
|
|
add(&link, &file_name, &FileEnv::default())?;
|
2023-07-28 18:35:41 +01:00
|
|
|
|
|
|
|
//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
|
2023-07-29 20:36:03 +01:00
|
|
|
add(&link, &file_name, &FileEnv::default())?;
|
2023-07-28 18:35:41 +01:00
|
|
|
|
|
|
|
//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(())
|
|
|
|
}
|
|
|
|
}
|