From 75f0447c7b72599502f35cc973c69d9c3d376ad6 Mon Sep 17 00:00:00 2001 From: dbr Date: Tue, 15 Jun 2021 22:09:54 +1000 Subject: [PATCH] Fix empty-dir problem with server also, and add tests --- sync-server/src/storage/sqlite.rs | 12 ++++++++++++ taskchampion/src/storage/sqlite.rs | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/sync-server/src/storage/sqlite.rs b/sync-server/src/storage/sqlite.rs index 528c2fac6..cb080e2f8 100644 --- a/sync-server/src/storage/sqlite.rs +++ b/sync-server/src/storage/sqlite.rs @@ -61,6 +61,7 @@ impl SqliteStorage { } pub fn new>(directory: P) -> anyhow::Result { + std::fs::create_dir_all(&directory)?; let db_file = directory.as_ref().join("taskchampion-sync-server.sqlite3"); let o = SqliteStorage { db_file }; @@ -208,6 +209,17 @@ mod test { use super::*; use tempfile::TempDir; + #[test] + fn test_emtpy_dir() -> anyhow::Result<()> { + let tmp_dir = TempDir::new()?; + let non_existant = tmp_dir.path().join("subdir"); + let storage = SqliteStorage::new(&non_existant)?; + let mut txn = storage.txn()?; + let maybe_client = txn.get_client(Uuid::new_v4())?; + assert!(maybe_client.is_none()); + Ok(()) + } + #[test] fn test_get_client_empty() -> anyhow::Result<()> { let tmp_dir = TempDir::new()?; diff --git a/taskchampion/src/storage/sqlite.rs b/taskchampion/src/storage/sqlite.rs index e517b4b00..b6ff83027 100644 --- a/taskchampion/src/storage/sqlite.rs +++ b/taskchampion/src/storage/sqlite.rs @@ -351,6 +351,25 @@ mod test { use crate::storage::taskmap_with; use tempfile::TempDir; + #[test] + fn test_empty_dir() -> anyhow::Result<()> { + let tmp_dir = TempDir::new()?; + let non_existant = tmp_dir.path().join("subdir"); + let mut storage = SqliteStorage::new(&non_existant)?; + let uuid = Uuid::new_v4(); + { + let mut txn = storage.txn()?; + assert!(txn.create_task(uuid)?); + txn.commit()?; + } + { + let mut txn = storage.txn()?; + let task = txn.get_task(uuid)?; + assert_eq!(task, Some(taskmap_with(vec![]))); + } + Ok(()) + } + #[test] fn drop_transaction() -> anyhow::Result<()> { let tmp_dir = TempDir::new()?;