diff --git a/pueue/src/client/commands/state/query/filters.rs b/pueue/src/client/commands/state/query/filters.rs index 30cce56..ae59cc1 100644 --- a/pueue/src/client/commands/state/query/filters.rs +++ b/pueue/src/client/commands/state/query/filters.rs @@ -169,7 +169,7 @@ pub fn datetime(section: Pair<'_, Rule>, query_result: &mut QueryResult) -> Resu match operator { Rule::eq => field > start_of_day && field < end_of_day, - Rule::neq => field < start_of_day && field > end_of_day, + Rule::neq => field < start_of_day || field > end_of_day, Rule::lt => field < start_of_day, Rule::gt => field > end_of_day, _ => true, diff --git a/pueue/src/client/commands/state/query/mod.rs b/pueue/src/client/commands/state/query/mod.rs index ab6d8a7..632e6e8 100644 --- a/pueue/src/client/commands/state/query/mod.rs +++ b/pueue/src/client/commands/state/query/mod.rs @@ -384,6 +384,21 @@ mod test { Ok(()) } + /// Filter by end date using the not-equal operator. + /// A `column != date` filter must keep every task whose end lies outside of that day. + #[rstest] + #[case("2022-01-10", 1)] + #[case("2022-01-08", 0)] + #[tokio::test(flavor = "multi_thread", worker_threads = 2)] + async fn filter_end_neq_date(#[case] date: &str, #[case] expected_id: usize) -> Result<()> { + let tasks = test_tasks_with_query(&format!("end!={date}"), &None)?; + + assert_eq!(tasks.len(), 1); + assert_eq!(tasks[0].id, expected_id); + + Ok(()) + } + /// Filter tasks by status #[rstest] #[case("queued", 2)]