From 4213e1bd66558cc28d29678ede996e502cfc3b98 Mon Sep 17 00:00:00 2001 From: nicholaslyang Date: Wed, 29 Jan 2025 11:56:38 -0500 Subject: [PATCH] Fixing bug with predicate --- crates/turborepo-lib/src/query/mod.rs | 3 +- crates/turborepo-lib/src/query/package.rs | 8 ++++- crates/turborepo/tests/query.rs | 2 ++ ...h_less_than_1_dependents_(npm@10.5.0).snap | 30 ++++++++++++++++ ...h_less_than_2_dependents_(npm@10.5.0).snap | 36 +++++++++++++++++++ ...h_more_than_0_dependents_(npm@10.5.0).snap | 18 ++++++++++ 6 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_less_than_1_dependents_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_less_than_2_dependents_(npm@10.5.0).snap create mode 100644 crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_more_than_0_dependents_(npm@10.5.0).snap diff --git a/crates/turborepo-lib/src/query/mod.rs b/crates/turborepo-lib/src/query/mod.rs index fc25100560b78..65fb7cfe4f960 100644 --- a/crates/turborepo-lib/src/query/mod.rs +++ b/crates/turborepo-lib/src/query/mod.rs @@ -385,7 +385,8 @@ impl PackagePredicate { let less_than = self .less_than .as_ref() - .map(|pair| Self::check_greater_than(pkg, &pair.field, &pair.value)); + .map(|pair| Self::check_less_than(pkg, &pair.field, &pair.value)); + let not = self.not.as_ref().map(|predicate| !predicate.check(pkg)); let has = self .has diff --git a/crates/turborepo-lib/src/query/package.rs b/crates/turborepo-lib/src/query/package.rs index dc3a3b8d35e89..b7ada0b07e876 100644 --- a/crates/turborepo-lib/src/query/package.rs +++ b/crates/turborepo-lib/src/query/package.rs @@ -1,4 +1,4 @@ -use std::{collections::HashMap, sync::Arc}; +use std::{collections::HashMap, fmt, sync::Arc}; use async_graphql::Object; use itertools::Itertools; @@ -16,6 +16,12 @@ pub struct Package { name: PackageName, } +impl fmt::Debug for Package { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.debug_struct("Package").field("name", &self.name).finish() + } +} + impl Package { pub fn new(run: Arc, name: PackageName) -> Result { run.pkg_dep_graph() diff --git a/crates/turborepo/tests/query.rs b/crates/turborepo/tests/query.rs index d46b6df73029e..9923fd4008d23 100644 --- a/crates/turborepo/tests/query.rs +++ b/crates/turborepo/tests/query.rs @@ -7,6 +7,8 @@ fn test_query() -> Result<(), anyhow::Error> { "npm@10.5.0", "query", "get package that doesn't exist" => "query { package(name: \"doesnotexist\") { path } }", + "get packages with less than 1 dependents" => "query { packages(filter: {lessThan: {field: DIRECT_DEPENDENT_COUNT, value: 1}}) { items { name directDependents { length } } } }", + "get packages with more than 0 dependents" => "query { packages(filter: {greaterThan: {field: DIRECT_DEPENDENT_COUNT, value: 0}}) { items { name directDependents { length } } } }", ); Ok(()) diff --git a/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_less_than_1_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_less_than_1_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..8d061631ed3c2 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_less_than_1_dependents_(npm@10.5.0).snap @@ -0,0 +1,30 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "packages": { + "items": [ + { + "name": "//", + "directDependents": { + "length": 0 + } + }, + { + "name": "another", + "directDependents": { + "length": 0 + } + }, + { + "name": "my-app", + "directDependents": { + "length": 0 + } + } + ] + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_less_than_2_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_less_than_2_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..6f1ca882186d4 --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_less_than_2_dependents_(npm@10.5.0).snap @@ -0,0 +1,36 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "packages": { + "items": [ + { + "name": "//", + "directDependents": { + "length": 0 + } + }, + { + "name": "another", + "directDependents": { + "length": 0 + } + }, + { + "name": "my-app", + "directDependents": { + "length": 0 + } + }, + { + "name": "util", + "directDependents": { + "length": 1 + } + } + ] + } + } +} diff --git a/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_more_than_0_dependents_(npm@10.5.0).snap b/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_more_than_0_dependents_(npm@10.5.0).snap new file mode 100644 index 0000000000000..b27137abb9d8f --- /dev/null +++ b/crates/turborepo/tests/snapshots/query__basic_monorepo_get_packages_with_more_than_0_dependents_(npm@10.5.0).snap @@ -0,0 +1,18 @@ +--- +source: crates/turborepo/tests/query.rs +expression: query_output +--- +{ + "data": { + "packages": { + "items": [ + { + "name": "util", + "directDependents": { + "length": 1 + } + } + ] + } + } +}