From 9ea9614b17218e35a870005abfbe99c5bfbb6455 Mon Sep 17 00:00:00 2001 From: Otavio Santana Date: Sat, 30 Mar 2024 18:23:35 +0000 Subject: [PATCH] test: create cursorexecutor tests scenarios Signed-off-by: Otavio Santana --- .../semistructured/CursorExecutor.java | 11 +++++ .../semistructured/DatabaseManagerTest.java | 44 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CursorExecutor.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CursorExecutor.java index 963445fad..fecac332b 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CursorExecutor.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CursorExecutor.java @@ -76,6 +76,7 @@ private static CriteriaCondition condition(SelectQuery query, PageRequest.Cursor CriteriaCondition condition = null; CriteriaCondition previousCondition = null; List> sorts = query.sorts(); + checkCursorKeySizes(cursor, sorts); for (int index = 0; index < sorts.size(); index++) { Sort sort = sorts.get(index); Object key = cursor.get(index); @@ -90,6 +91,8 @@ private static CriteriaCondition condition(SelectQuery query, PageRequest.Cursor } return condition; } + + }, CURSOR_PREVIOUS { @SuppressWarnings("unchecked") @Override @@ -117,6 +120,7 @@ private static CriteriaCondition condition(SelectQuery query, PageRequest.Cursor CriteriaCondition condition = null; CriteriaCondition previousCondition = null; List> sorts = query.sorts(); + checkCursorKeySizes(cursor, sorts); for (int index = 0; index < sorts.size(); index++) { Sort sort = sorts.get(index); Object key = cursor.get(index); @@ -161,4 +165,11 @@ private static DefaultSelectQuery updateQuery(int pageRequest, SelectQuery query query.condition().map(c -> CriteriaCondition.and(c, condition)) .orElse(condition)); } + + private static void checkCursorKeySizes(PageRequest.Cursor cursor, List> sorts) { + if(sorts.size() != cursor.size()) { + throw new IllegalArgumentException("The cursor size is different from the sort size. Cursor: " + + cursor.size() + " Sort: " + sorts.size()); + } + } } diff --git a/jnosql-communication/jnosql-communication-semistructured/src/test/java/org/eclipse/jnosql/communication/semistructured/DatabaseManagerTest.java b/jnosql-communication/jnosql-communication-semistructured/src/test/java/org/eclipse/jnosql/communication/semistructured/DatabaseManagerTest.java index c421ca021..3d45163be 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/test/java/org/eclipse/jnosql/communication/semistructured/DatabaseManagerTest.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/test/java/org/eclipse/jnosql/communication/semistructured/DatabaseManagerTest.java @@ -71,6 +71,28 @@ void shouldReturnPaginationOffSet() { }); } + @Test + void shouldReturnPaginationOffSetWhenReturnEmpty() { + SelectQuery query = SelectQuery.select().from("person") + .orderBy("name").asc().build(); + + Mockito.when(databaseManager.select(Mockito.any(SelectQuery.class))) + .thenReturn(Stream.empty()); + + CursoredPage entities = databaseManager.selectCursor(query, + PageRequest.ofSize(10)); + + assertSoftly(soft -> { + PageRequest pageRequest = entities.pageRequest(); + soft.assertThat(entities.hasNext()).isFalse(); + soft.assertThat(entities.hasPrevious()).isFalse(); + + soft.assertThat(entities).hasSize(0); + soft.assertThat(pageRequest.mode()) + .isEqualTo(PageRequest.Mode.OFFSET); + }); + } + @Test void shouldReturnPaginationOffSet2() { SelectQuery query = SelectQuery.select().from("person") @@ -386,6 +408,28 @@ void shouldReturnPaginationBeforeKeyAndReturnEmpty() { }); } + @Test + void shouldReturnErrorSortSizeDifferentFromOrderSizeBeforeKey() { + SelectQuery query = SelectQuery.select().from("person") + .orderBy("name").asc() + .orderBy("age").asc() + .orderBy("id").asc().build(); + + assertThrows(IllegalArgumentException.class, () -> databaseManager.selectCursor(query, + PageRequest.ofSize(10).beforeKey("Ada", 20))); + } + + @Test + void shouldReturnErrorSortSizeDifferentFromOrderSizeAfterKey() { + SelectQuery query = SelectQuery.select().from("person") + .orderBy("name").asc() + .orderBy("age").asc() + .orderBy("id").asc().build(); + + assertThrows(IllegalArgumentException.class, () -> databaseManager.selectCursor(query, + PageRequest.ofSize(10).afterKey("Ada", 20))); + } + private Stream stream() { var entity = CommunicationEntity.of("name");