Skip to content

Commit b4f9a48

Browse files
committed
bugfix: do not return same entity instance from ArangoOperations.repsert()
1 parent 20eb216 commit b4f9a48

File tree

5 files changed

+43
-52
lines changed

5 files changed

+43
-52
lines changed

src/main/java/com/arangodb/springframework/core/template/ArangoTemplate.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,7 @@ public <T> T repsert(final T value) throws DataAccessException {
563563

564564
updateDBFieldsFromObject(value, result);
565565
potentiallyEmitEvent(new AfterSaveEvent<>(result));
566-
return value;
566+
return result;
567567
}
568568

569569
@SuppressWarnings({"rawtypes", "unchecked"})
@@ -593,7 +593,7 @@ public <T> Iterable<T> repsertAll(final Iterable<T> values, final Class<? super
593593

594594
updateDBFieldsFromObjects(values, result);
595595
result.forEach(it -> potentiallyEmitEvent(new AfterSaveEvent<>(it)));
596-
return values;
596+
return result;
597597
}
598598

599599
private void updateDBFieldsFromObjects(final Iterable<?> values, final Iterable<?> res) {

src/main/java/com/arangodb/springframework/repository/SimpleArangoRepository.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ public SimpleArangoRepository(final ArangoOperations arangoOperations, final Cla
7474
*/
7575
@Override
7676
public <S extends T> S save(final S entity) {
77-
return arangoOperations.repsert(entity);
77+
arangoOperations.repsert(entity);
78+
return entity;
7879
}
7980

8081
/**
@@ -86,7 +87,8 @@ public <S extends T> S save(final S entity) {
8687
*/
8788
@Override
8889
public <S extends T> Iterable<S> saveAll(final Iterable<S> entities) {
89-
return arangoOperations.repsertAll(entities, domainClass);
90+
arangoOperations.repsertAll(entities, domainClass);
91+
return entities;
9092
}
9193

9294
/**

src/test/java/com/arangodb/springframework/core/template/ArangoTemplateTest.java

+21-38
Original file line numberDiff line numberDiff line change
@@ -131,49 +131,32 @@ public void repsertDocument() {
131131
Customer repsert1 = template.repsert(customer);
132132
Customer repsert2 = template.repsert(customer);
133133

134-
// in place updates
135-
assertThat(repsert1, sameInstance(customer));
136-
assertThat(repsert2, sameInstance(customer));
134+
assertThat(repsert1.getId(), is(customer.getId()));
135+
assertThat(repsert1.getName(), is(customer.getName()));
136+
assertThat(repsert1.getSurname(), is(customer.getSurname()));
137+
assertThat(repsert1.getAge(), is(customer.getAge()));
137138

138-
Customer read = template.find(repsert1.getId(), Customer.class).orElseThrow();
139-
assertThat(read.getId(), is(customer.getId()));
140-
assertThat(read.getName(), is(customer.getName()));
141-
assertThat(read.getSurname(), is(customer.getSurname()));
142-
assertThat(read.getAge(), is(customer.getAge()));
139+
assertThat(repsert2.getId(), is(customer.getId()));
140+
assertThat(repsert2.getName(), is(customer.getName()));
141+
assertThat(repsert2.getSurname(), is(customer.getSurname()));
142+
assertThat(repsert2.getAge(), is(customer.getAge()));
143143
}
144144

145145
@Test
146146
public void repsertDocuments() {
147-
Customer c1 = new Customer("John", "Doe", 11);
148-
Customer c2 = new Customer("John2", "Doe2", 22);
149-
Iterable<Customer> repsert1 = template.repsertAll(List.of(c1, c2), Customer.class);
150-
Iterable<Customer> repsert2 = template.repsertAll(List.of(c1, c2), Customer.class);
151-
152-
Iterator<Customer> rit1 = repsert1.iterator();
153-
Iterator<Customer> rit2 = repsert2.iterator();
154-
155-
// in place updates
156-
assertThat(rit1.next(), sameInstance(c1));
157-
assertThat(rit2.next(), sameInstance(c1));
158-
assertThat(rit1.next(), sameInstance(c2));
159-
assertThat(rit2.next(), sameInstance(c2));
160-
161-
List<String> ids = StreamSupport.stream(repsert1.spliterator(), false).map(Customer::getId).toList();
162-
163-
Iterable<Customer> read = template.findAll(ids, Customer.class);
164-
Iterator<Customer> rit = read.iterator();
165-
166-
Customer read1 = rit.next();
167-
assertThat(read1.getId(), is(c1.getId()));
168-
assertThat(read1.getName(), is(c1.getName()));
169-
assertThat(read1.getSurname(), is(c1.getSurname()));
170-
assertThat(read1.getAge(), is(c1.getAge()));
171-
172-
Customer read2 = rit.next();
173-
assertThat(read2.getId(), is(c2.getId()));
174-
assertThat(read2.getName(), is(c2.getName()));
175-
assertThat(read2.getSurname(), is(c2.getSurname()));
176-
assertThat(read2.getAge(), is(c2.getAge()));
147+
List<Customer> customers = List.of(
148+
new Customer("John", "Doe", 11),
149+
new Customer("John2", "Doe2", 22)
150+
);
151+
Iterable<Customer> res = template.repsertAll(customers, Customer.class);
152+
Iterator<Customer> cIt = customers.iterator();
153+
for (Customer re : res) {
154+
Customer c = cIt.next();
155+
assertThat(re.getId(), is(c.getId()));
156+
assertThat(re.getName(), is(c.getName()));
157+
assertThat(re.getSurname(), is(c.getSurname()));
158+
assertThat(re.getAge(), is(c.getAge()));
159+
}
177160
}
178161

179162
@Test

src/test/java/com/arangodb/springframework/example/polymorphic/template/PolymorphicTemplate.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ public void repsertVariance() {
213213
dog.setTeeths(11);
214214

215215
Dog res = template.repsert(dog);
216-
assertThat(res, sameInstance(dog));
216+
assertThat(res, is(dog));
217217
assertThat(col().documentExists(dog.getId()), is(true));
218218
}
219219

src/test/java/com/arangodb/springframework/repository/ArangoRepositoryTest.java

+15-9
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
package com.arangodb.springframework.repository;
22

33
import static org.hamcrest.MatcherAssert.assertThat;
4-
import static org.hamcrest.Matchers.equalTo;
5-
import static org.hamcrest.Matchers.is;
4+
import static org.hamcrest.Matchers.*;
65

7-
import java.util.ArrayList;
8-
import java.util.Arrays;
9-
import java.util.LinkedList;
10-
import java.util.List;
11-
import java.util.Optional;
6+
import java.util.*;
127

138
import org.junit.jupiter.api.Test;
149
import org.springframework.data.domain.*;
@@ -23,6 +18,13 @@
2318
*/
2419
public class ArangoRepositoryTest extends AbstractArangoRepositoryTest {
2520

21+
@Test
22+
public void saveTest() {
23+
Customer res = repository.save(john);
24+
assertThat(res, sameInstance(john));
25+
assertThat(res.getId(), is(notNullValue()));
26+
}
27+
2628
@Test
2729
public void findOneTest() {
2830
repository.save(john);
@@ -37,8 +39,12 @@ public void findOneTest() {
3739

3840
@Test
3941
public void saveAllTest() {
40-
repository.saveAll(customers);
41-
Iterable<Customer> docs = repository.findAll();
42+
Iterable<Customer> res = repository.saveAll(customers);
43+
Iterator<Customer> cIt = customers.iterator();
44+
for (Customer re : res) {
45+
assertThat(re, sameInstance(cIt.next()));
46+
}
47+
Iterable<Customer> docs = repository.findAll();
4248
docs.forEach(d -> d.setName("saveAllTest"));
4349
repository.saveAll(docs);
4450
repository.findAll().forEach(it -> assertThat("name does not match", it.getName(), equalTo("saveAllTest")));

0 commit comments

Comments
 (0)