add test for history::add

This commit is contained in:
Paul Campbell 2023-07-27 21:39:55 +01:00
parent defa57de25
commit 20a4ef59d9
4 changed files with 86 additions and 1 deletions

View file

@ -15,3 +15,75 @@ pub fn add(link: &Link, file_name: &str) -> Result<()> {
writeln!(file, "{}", 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 (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)?;
//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)?;
//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(())
}
}

View file

@ -1,4 +1,8 @@
use std::{fs::File, io::Write, str::from_utf8};
use std::{
fs::{read_to_string, File},
io::Write,
str::from_utf8,
};
use tempfile::{tempdir, TempDir};
@ -12,3 +16,10 @@ pub fn create_text_file(name: &str, data: &[u8]) -> Result<(TempDir, String)> {
write!(&file, "{data}")?;
Ok((dir, filename))
}
pub fn read_text_file(file_name: &str) -> Result<Vec<String>> {
Ok(read_to_string(file_name)?
.lines()
.map(String::from)
.collect())
}

2
test/data/downloads.txt Normal file
View file

@ -0,0 +1,2 @@
line-1
line-2

0
test/data/empty.txt Normal file
View file