aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/db.rs44
1 files changed, 40 insertions, 4 deletions
diff --git a/src/db.rs b/src/db.rs
index 6cdf24f..373b7ca 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -89,14 +89,14 @@ impl Db {
task.categories = self
.0
- .prepare("select name from tasks_categories join categories where task_id = ?1")?
+ .prepare("select name from tasks_categories join categories on categories.id = tasks_categories.category_id where task_id = ?1")?
.query_map([task_id], |row| Ok(Category::new(row.get(0)?)))?
.collect::<std::result::Result<HashSet<_>, _>>()?;
Ok(task)
}
- // TODO: filter
+ // TODO: filter and ordering
pub fn read_tasks(&self, filter: Vec<TaskFilter>) -> Result<Vec<Task>> {
let mut tasks = self
.0
@@ -118,7 +118,7 @@ impl Db {
for (task_id, task) in &mut tasks {
let categories = self
.0
- .prepare("select name from tasks_categories join categories where task_id = ?1")?
+ .prepare("select name from tasks_categories join categories on categories.id = tasks_categories.category_id where task_id = ?1")?
.query_map([*task_id], |row| Ok(Category::new(row.get(0)?)))?
.collect::<std::result::Result<HashSet<_>, _>>()?;
task.categories = categories;
@@ -304,7 +304,43 @@ mod tests {
fn filter_tasks() {}
#[test]
- fn update_task() {}
+ fn update_task() {
+ let db = Db::create_connect_memory().unwrap();
+
+ let piano = Task::new(
+ "piano".to_string(),
+ None,
+ Some("practice piano".to_string()),
+ Some(HashSet::from([Category::new("music".to_string())])),
+ );
+
+ db.create_task(&piano).unwrap();
+
+ let german = Task::new(
+ "german".to_string(),
+ None,
+ Some("study german".to_string()),
+ None,
+ );
+
+ db.create_task(&german).unwrap();
+
+ assert_eq!(
+ vec![piano.clone(), german],
+ db.read_tasks(Vec::new()).unwrap()
+ );
+
+ let german = Task::new(
+ "german".to_string(),
+ None,
+ Some("study german".to_string()),
+ Some(HashSet::from([Category::new("education".to_string())])),
+ );
+
+ db.update_task("german", &german).unwrap();
+
+ assert_eq!(vec![piano, german], db.read_tasks(Vec::new()).unwrap());
+ }
#[test]
fn delete_task() {}