diff --git a/src/morethantext/cache.rs b/src/morethantext/cache.rs
index 7b24767..184811f 100644
--- a/src/morethantext/cache.rs
+++ b/src/morethantext/cache.rs
@@ -184,15 +184,21 @@ impl Entry {
struct Cache;
impl Cache {
- async fn new
(dir: P) -> Self
+ async fn new
(dir: P) -> Result
where
P: Into,
{
let pathbuf = dir.into();
let entry = pathbuf.as_path().join(ENTRY);
let store = DataType::new("store").unwrap();
- Entry::new(entry, store).await.unwrap();
- Self {}
+ match Entry::new(entry, store).await {
+ Ok(_) => Ok(Self {}),
+ Err(err) => {
+ let mut error = DBError::new("initialization failure");
+ error.add_source(err);
+ Err(error)
+ }
+ }
}
}
@@ -580,12 +586,13 @@ mod entry {
#[cfg(test)]
mod cache {
use super::*;
+ use std::error::Error;
use tempfile::tempdir;
#[async_std::test]
async fn create() {
let dir = tempdir().unwrap();
- Cache::new(dir.path().to_str().unwrap()).await;
+ Cache::new(dir.path().to_str().unwrap()).await.unwrap();
let epoint = dir.path().join(ENTRY);
assert!(
epoint.is_file(),
@@ -598,4 +605,25 @@ mod cache {
Vec::::new()
);
}
+
+ #[async_std::test]
+ async fn entry_failure() {
+ let dir = tempdir().unwrap();
+ let path = dir.path().join("bad").join("path");
+ match Cache::new(path).await {
+ Ok(_) => assert!(false, "Should have produced an error."),
+ Err(err) => {
+ assert_eq!(err.to_string(), "initialization failure");
+ assert!(err.source().is_some(), "Error should have a source.");
+ assert!(
+ err.source()
+ .unwrap()
+ .to_string()
+ .contains("failed to write"),
+ "Source Error Message: {}",
+ err.source().unwrap().to_string()
+ );
+ }
+ }
+ }
}