diff options
| author | 2025-06-05 15:58:47 +0100 | |
|---|---|---|
| committer | 2025-06-05 15:58:47 +0100 | |
| commit | 76aacb9bb017cb3edb81d965690229544cbf0a66 (patch) | |
| tree | 8b61fd2e99ff04bb0b79f2fa8c2d74641fa9d089 | |
| parent | e313c40d246ac7545a1907621841090664bf61ae (diff) | |
| download | fj-76aacb9bb017cb3edb81d965690229544cbf0a66.tar.gz fj-76aacb9bb017cb3edb81d965690229544cbf0a66.tar.bz2 fj-76aacb9bb017cb3edb81d965690229544cbf0a66.zip | |
fix: category joins
Diffstat (limited to '')
| -rw-r--r-- | src/db.rs | 44 | 
1 files changed, 40 insertions, 4 deletions
| @@ -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() {} | 
