From 2f1a83cc7dcb41a3a5307c7a2fed8f74af3b35fd Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Mon, 16 Sep 2024 16:40:00 -0400 Subject: [PATCH 1/5] add sample data to unit test --- .../datastore/filters/MultiIneqFilter.java | 57 +++++++++++ .../filters/MultiIneqFilterSampleIT.java | 95 +++++++++++++++++++ 2 files changed, 152 insertions(+) create mode 100644 samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java create mode 100644 samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java diff --git a/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java b/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java new file mode 100644 index 000000000..e48dff010 --- /dev/null +++ b/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java @@ -0,0 +1,57 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.datastore.filters; + +// sample-metadata: +// title: Range and inequality filters on multiple properties +// description: The following query uses range filters on priority and days to return all tasks with priority greater than four and with less than three days to complete. + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Query; +import com.google.cloud.datastore.QueryResults; +import com.google.cloud.datastore.StructuredQuery.CompositeFilter; +import com.google.cloud.datastore.StructuredQuery.PropertyFilter; + +public class MultiIneqFilter { + public static void invoke() throws Exception { + Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); + + // [START datastore_query_filter_compound_multi_ineq] + Query query = + Query.newEntityQueryBuilder() + .setKind("Task") + .setFilter( + CompositeFilter.and( + PropertyFilter.gt("priority", 4), PropertyFilter.lt("days", 3))) + .build(); + // [END datastore_query_filter_compound_multi_ineq] + + // Get the results back from Datastore. + QueryResults results = datastore.run(query); + + if (!results.hasNext()) { + throw new Exception("query yielded no results"); + } + + while (results.hasNext()) { + Entity entity = results.next(); + System.out.printf("Entity: %s%n", entity); + } + } +} diff --git a/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java new file mode 100644 index 000000000..eaf78c712 --- /dev/null +++ b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java @@ -0,0 +1,95 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.datastore.filters; + +import com.google.cloud.datastore.Datastore; +import com.google.cloud.datastore.DatastoreOptions; +import com.google.cloud.datastore.Entity; +import com.google.cloud.datastore.Key; +import com.google.cloud.datastore.Query; +import com.google.cloud.datastore.StructuredQuery.CompositeFilter; +import com.google.cloud.datastore.StructuredQuery.PropertyFilter; +import com.rule.SystemsOutRule; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + + +@RunWith(JUnit4.class) +@SuppressWarnings("checkstyle:abbreviationaswordinname") +public class MultiIneqFilterSampleIT { + private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); + private Key taskKey1; + private Key taskKey2; + private Key taskKey3; + + @Rule + public final SystemsOutRule systemsOutRule = new SystemsOutRule(); + + @Before + public void setUp() { + taskKey1 = datastore.newKeyFactory().setKind("Task").newKey("key1"); + Entity task1 = Entity.newBuilder(taskKey1) + .set("category", "Personal") + .set("done", false) + .set("priority", 4) + .set("days", 3) + .set("description", "Learn Cloud Datastore") + .build(); + + taskKey2 = datastore.newKeyFactory().setKind("Task").newKey("key2"); + Entity task2 = Entity.newBuilder(taskKey2) + .set("category", "Personal") + .set("done", false) + .set("priority", 5) + .set("days", 5) + .set("description", "Integrate Cloud Datastore") + .build(); + + taskKey3 = datastore.newKeyFactory().setKind("Task").newKey("key3"); + Entity task3 = Entity.newBuilder(taskKey3) + .set("category", "Personal") + .set("done", false) + .set("priority", 5) + .set("days", 2) + .set("description", "Set Up Cloud Datastore") + .build(); + + datastore.put(task1); + datastore.put(task2); + datastore.put(task3); + } + + @After + public void tearDown() { + datastore.delete(taskKey1); + datastore.delete(taskKey2); + datastore.delete(taskKey3); + } + + @Test + public void testMultiIneqFilter() throws Exception { + // Act + MultiIneqFilter.invoke(); + + // Assert + systemsOutRule.assertContains("Entity"); + } +} From 13349f59ccf743ed2f50ec1362c0a3b849582767 Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Mon, 16 Sep 2024 17:02:48 -0400 Subject: [PATCH 2/5] fix lint --- .../filters/MultiIneqFilterSampleIT.java | 98 +++++++++---------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java index eaf78c712..15a8bc10e 100644 --- a/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java +++ b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java @@ -35,61 +35,61 @@ @RunWith(JUnit4.class) @SuppressWarnings("checkstyle:abbreviationaswordinname") public class MultiIneqFilterSampleIT { - private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); - private Key taskKey1; - private Key taskKey2; - private Key taskKey3; + private final Datastore datastore = DatastoreOptions.getDefaultInstance().getService(); + private Key taskKey1; + private Key taskKey2; + private Key taskKey3; - @Rule - public final SystemsOutRule systemsOutRule = new SystemsOutRule(); + @Rule + public final SystemsOutRule systemsOutRule = new SystemsOutRule(); - @Before - public void setUp() { - taskKey1 = datastore.newKeyFactory().setKind("Task").newKey("key1"); - Entity task1 = Entity.newBuilder(taskKey1) - .set("category", "Personal") - .set("done", false) - .set("priority", 4) - .set("days", 3) - .set("description", "Learn Cloud Datastore") - .build(); + @Before + public void setUp() { + taskKey1 = datastore.newKeyFactory().setKind("Task").newKey("key1"); + Entity task1 = Entity.newBuilder(taskKey1) + .set("category", "Personal") + .set("done", false) + .set("priority", 4) + .set("days", 3) + .set("description", "Learn Cloud Datastore") + .build(); - taskKey2 = datastore.newKeyFactory().setKind("Task").newKey("key2"); - Entity task2 = Entity.newBuilder(taskKey2) - .set("category", "Personal") - .set("done", false) - .set("priority", 5) - .set("days", 5) - .set("description", "Integrate Cloud Datastore") - .build(); + taskKey2 = datastore.newKeyFactory().setKind("Task").newKey("key2"); + Entity task2 = Entity.newBuilder(taskKey2) + .set("category", "Personal") + .set("done", false) + .set("priority", 5) + .set("days", 5) + .set("description", "Integrate Cloud Datastore") + .build(); - taskKey3 = datastore.newKeyFactory().setKind("Task").newKey("key3"); - Entity task3 = Entity.newBuilder(taskKey3) - .set("category", "Personal") - .set("done", false) - .set("priority", 5) - .set("days", 2) - .set("description", "Set Up Cloud Datastore") - .build(); + taskKey3 = datastore.newKeyFactory().setKind("Task").newKey("key3"); + Entity task3 = Entity.newBuilder(taskKey3) + .set("category", "Personal") + .set("done", false) + .set("priority", 5) + .set("days", 2) + .set("description", "Set Up Cloud Datastore") + .build(); - datastore.put(task1); - datastore.put(task2); - datastore.put(task3); - } + datastore.put(task1); + datastore.put(task2); + datastore.put(task3); + } - @After - public void tearDown() { - datastore.delete(taskKey1); - datastore.delete(taskKey2); - datastore.delete(taskKey3); - } + @After + public void tearDown() { + datastore.delete(taskKey1); + datastore.delete(taskKey2); + datastore.delete(taskKey3); + } - @Test - public void testMultiIneqFilter() throws Exception { - // Act - MultiIneqFilter.invoke(); + @Test + public void testMultiIneqFilter() throws Exception { + // Act + MultiIneqFilter.invoke(); - // Assert - systemsOutRule.assertContains("Entity"); - } + // Assert + systemsOutRule.assertContains("Entity"); + } } From a9e0fbf53c63ae144ecc0eeeb9db9a2c2e372801 Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Tue, 24 Sep 2024 10:41:01 -0400 Subject: [PATCH 3/5] fix code lint issue --- .../java/com/example/datastore/filters/MultiIneqFilter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java b/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java index e48dff010..0dce3fc89 100644 --- a/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java +++ b/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java @@ -18,7 +18,9 @@ // sample-metadata: // title: Range and inequality filters on multiple properties -// description: The following query uses range filters on priority and days to return all tasks with priority greater than four and with less than three days to complete. +// description: The following query uses range filters on +// priority and days to return all tasks with priority greater +// than four and with less than three days to complete. import com.google.cloud.datastore.Datastore; import com.google.cloud.datastore.DatastoreOptions; From 6ee5f003766e3e31215a6284fde45d156c53827f Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Thu, 26 Sep 2024 15:07:43 -0400 Subject: [PATCH 4/5] fix sample assertions --- .../com/example/datastore/filters/MultiIneqFilter.java | 8 ++++++-- .../datastore/filters/MultiIneqFilterSampleIT.java | 10 +++++----- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java b/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java index 0dce3fc89..439df5255 100644 --- a/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java +++ b/samples/snippets/src/main/java/com/example/datastore/filters/MultiIneqFilter.java @@ -29,6 +29,8 @@ import com.google.cloud.datastore.QueryResults; import com.google.cloud.datastore.StructuredQuery.CompositeFilter; import com.google.cloud.datastore.StructuredQuery.PropertyFilter; +import java.util.ArrayList; +import java.util.List; public class MultiIneqFilter { public static void invoke() throws Exception { @@ -51,9 +53,11 @@ public static void invoke() throws Exception { throw new Exception("query yielded no results"); } + List entities = new ArrayList<>(); while (results.hasNext()) { - Entity entity = results.next(); - System.out.printf("Entity: %s%n", entity); + entities.add(results.next()); } + + return entities; } } diff --git a/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java index 15a8bc10e..d3bfbe016 100644 --- a/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java +++ b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java @@ -30,7 +30,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; - +import java.util.ArrayList; +import java.util.List; @RunWith(JUnit4.class) @SuppressWarnings("checkstyle:abbreviationaswordinname") @@ -86,10 +87,9 @@ public void tearDown() { @Test public void testMultiIneqFilter() throws Exception { - // Act - MultiIneqFilter.invoke(); + List results = MultiIneqFilter.invoke(); - // Assert - systemsOutRule.assertContains("Entity"); + assertEquals(3, results.size()); + assertEquals("Learn Cloud Datastore", results.get(0).getString("description")); } } From bac81bf1bf55907c91ee9b02b8c242cd32e72e5a Mon Sep 17 00:00:00 2001 From: Kevin Kim Date: Thu, 26 Sep 2024 15:09:18 -0400 Subject: [PATCH 5/5] fix import ordering --- .../example/datastore/filters/MultiIneqFilterSampleIT.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java index d3bfbe016..88b031d8f 100644 --- a/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java +++ b/samples/snippets/src/test/java/com/example/datastore/filters/MultiIneqFilterSampleIT.java @@ -24,14 +24,14 @@ import com.google.cloud.datastore.StructuredQuery.CompositeFilter; import com.google.cloud.datastore.StructuredQuery.PropertyFilter; import com.rule.SystemsOutRule; +import java.util.ArrayList; +import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -import java.util.ArrayList; -import java.util.List; @RunWith(JUnit4.class) @SuppressWarnings("checkstyle:abbreviationaswordinname")