Skip to content

Commit 8d8adbe

Browse files
authored
fix delete for void return type (spring-attic#2177)
1 parent cbcaa2f commit 8d8adbe

File tree

4 files changed

+77
-2
lines changed

4 files changed

+77
-2
lines changed

spring-cloud-gcp-data-datastore/src/main/java/org/springframework/cloud/gcp/data/datastore/repository/query/PartTreeDatastoreQuery.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ else if (!returnedTypeIsNumber) {
206206
StructuredQuery.Builder<?> structredQueryBuilder = queryBuilderSupplier.get();
207207
structredQueryBuilder.setKind(this.datastorePersistentEntity.kindName());
208208

209-
boolean singularResult = !isCountingQuery && collectionType == null;
209+
boolean singularResult = (!isCountingQuery && collectionType == null) && !this.tree.isDelete();
210210
DatastoreResultsIterable rawResults = getDatastoreTemplate()
211211
.queryKeysOrEntities(
212212
applyQueryBody(parameters, structredQueryBuilder, total, singularResult, null),

spring-cloud-gcp-data-datastore/src/test/java/org/springframework/cloud/gcp/data/datastore/it/DatastoreIntegrationTests.java

+6
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,12 @@ public void testSaveAndDeleteRepository() throws InterruptedException {
358358
.map(TestEntity::getId).collect(Collectors.toList())).contains(4L);
359359

360360
assertThat(this.testEntityRepository.deleteBySize(1L)).isEqualTo(3);
361+
assertThat(this.testEntityRepository.countBySize(1L)).isEqualTo(0);
362+
363+
this.testEntityRepository.saveAll(this.allTestEntities);
364+
365+
this.testEntityRepository.deleteBySizeEquals(1L);
366+
assertThat(this.testEntityRepository.countBySize(1L)).isEqualTo(0);
361367

362368
//test saveAll for iterable
363369
Iterable<TestEntity> testEntities = () -> this.allTestEntities.iterator();

spring-cloud-gcp-data-datastore/src/test/java/org/springframework/cloud/gcp/data/datastore/it/TestEntityRepository.java

+2
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ public interface TestEntityRepository extends DatastoreRepository<TestEntity, Lo
6666

6767
int deleteBySize(long size);
6868

69+
void deleteBySizeEquals(long size);
70+
6971
List<TestEntity> removeByColor(String color);
7072

7173
List<TestEntity> findByShape(Shape shape);

spring-cloud-gcp-data-datastore/src/test/java/org/springframework/cloud/gcp/data/datastore/repository/query/PartTreeDatastoreQueryTests.java

+68-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ public void initMocks() {
118118
this.datastoreMappingContext = new DatastoreMappingContext();
119119
this.datastoreEntityConverter = mock(DatastoreEntityConverter.class);
120120
this.readWriteConversions = new TwoStepsConversions(new DatastoreCustomConversions(), null,
121-
datastoreMappingContext);
121+
this.datastoreMappingContext);
122122
when(this.datastoreTemplate.getDatastoreEntityConverter())
123123
.thenReturn(this.datastoreEntityConverter);
124124
when(this.datastoreEntityConverter.getConversions())
@@ -564,6 +564,73 @@ private void prepareSliceResults(int offset, Integer queryLimit, Boolean hasNext
564564
);
565565
}
566566

567+
@Test
568+
public void deleteTest() throws NoSuchMethodException {
569+
queryWithMockResult("deleteByAction", null,
570+
getClass().getMethod("countByAction", String.class));
571+
572+
this.partTreeDatastoreQuery = createQuery(false, false);
573+
574+
Object[] params = new Object[] { "BUY" };
575+
576+
prepareDeleteResults(false);
577+
578+
when(this.queryMethod.getReturnedObjectType()).thenReturn((Class) int.class);
579+
580+
this.partTreeDatastoreQuery.execute(params);
581+
582+
verify(this.datastoreTemplate, times(0))
583+
.query(any(), (Function) any());
584+
585+
verify(this.datastoreTemplate, times(1))
586+
.queryKeysOrEntities(any(), any());
587+
588+
verify(this.datastoreTemplate, times(1))
589+
.deleteAllById(eq(Arrays.asList(3, 4, 5)), any());
590+
}
591+
592+
@Test
593+
public void deleteReturnCollectionTest() throws NoSuchMethodException {
594+
queryWithMockResult("deleteByAction", null,
595+
getClass().getMethod("countByAction", String.class));
596+
597+
this.partTreeDatastoreQuery = createQuery(false, false);
598+
599+
Object[] params = new Object[] { "BUY" };
600+
601+
prepareDeleteResults(true);
602+
603+
when(this.queryMethod.getCollectionReturnType()).thenReturn(List.class);
604+
605+
List result = (List) this.partTreeDatastoreQuery.execute(params);
606+
assertThat(result).containsExactly(3, 4, 5);
607+
608+
verify(this.datastoreTemplate, times(0))
609+
.query(any(), (Function) any());
610+
611+
verify(this.datastoreTemplate, times(1))
612+
.queryKeysOrEntities(any(), any());
613+
614+
verify(this.datastoreTemplate, times(1))
615+
.deleteAll(eq(Arrays.asList(3, 4, 5)));
616+
}
617+
private void prepareDeleteResults(boolean isCollection) {
618+
Cursor cursor = Cursor.copyFrom("abc".getBytes());
619+
List<Integer> datastoreMatchingRecords = Arrays.asList(3, 4, 5);
620+
when(this.datastoreTemplate.queryKeysOrEntities(any(), any())).thenAnswer((invocation) -> {
621+
StructuredQuery<?> statement = invocation.getArgument(0);
622+
StructuredQuery.Builder builder = isCollection ? StructuredQuery.newEntityQueryBuilder()
623+
: StructuredQuery.newKeyQueryBuilder();
624+
StructuredQuery<?> expected = builder
625+
.setFilter(PropertyFilter.eq("action", "BUY"))
626+
.setKind("trades")
627+
.build();
628+
629+
assertThat(statement).isEqualTo(expected);
630+
return new DatastoreResultsIterable(datastoreMatchingRecords.iterator(), cursor);
631+
});
632+
}
633+
567634
@Test
568635
public void unspecifiedParametersTest() throws NoSuchMethodException {
569636
this.expectedException.expectMessage(

0 commit comments

Comments
 (0)