use std::path::PathBuf;
use tempfile::TempDir;
use crate::tasks::{Task, TaskId, TaskStore, TaskUpdate};
pub struct TestTaskStore {
directory: TempDir,
store: TaskStore,
}
impl TestTaskStore {
pub fn new() -> Self {
let directory = TempDir::new().expect("temporary tasks directory");
let mut store = TaskStore::new(store_root(&directory));
store.init().expect("failed to initialize task store");
Self { directory, store }
}
pub fn root(&self) -> PathBuf {
store_root(&self.directory)
}
pub fn store(&self) -> &TaskStore {
&self.store
}
pub fn store_mut(&mut self) -> &mut TaskStore {
&mut self.store
}
pub fn reopen(&mut self) {
let mut store = TaskStore::new(self.root());
store.init().expect("failed to re-initialize task store");
self.store = store;
}
pub fn root_task(&mut self, title: &str) -> Task {
self.store.create(None, title, TaskUpdate::default()).expect("failed to create root task")
}
pub fn subtask(&mut self, parent: &TaskId, title: &str) -> Task {
self.store.create(Some(parent), title, TaskUpdate::default()).expect("failed to add subtask")
}
}
impl Default for TestTaskStore {
fn default() -> Self {
Self::new()
}
}
fn store_root(directory: &TempDir) -> PathBuf {
directory.path().join(".aether-tasks")
}