147
147
import org .springframework .data .neo4j .integration .issues .gh2819 .GH2819Repository ;
148
148
import org .springframework .data .neo4j .integration .issues .gh2858 .GH2858 ;
149
149
import org .springframework .data .neo4j .integration .issues .gh2858 .GH2858Repository ;
150
+ import org .springframework .data .neo4j .integration .issues .gh2872 .UserChangesRepository ;
150
151
import org .springframework .data .neo4j .integration .issues .qbe .A ;
151
152
import org .springframework .data .neo4j .integration .issues .qbe .ARepository ;
152
153
import org .springframework .data .neo4j .integration .issues .qbe .B ;
@@ -205,6 +206,7 @@ protected static void setupData(@Autowired BookmarkCapture bookmarkCapture) {
205
206
setupGH2459 (transaction );
206
207
setupGH2572 (transaction );
207
208
setupGH2583 (transaction );
209
+ setupGH2872 (transaction );
208
210
209
211
transaction .run ("CREATE (:A {name: 'A name', id: randomUUID()}) -[:HAS] ->(:B {anotherName: 'Whatever', id: randomUUID()})" );
210
212
@@ -214,6 +216,21 @@ protected static void setupData(@Autowired BookmarkCapture bookmarkCapture) {
214
216
}
215
217
}
216
218
219
+ private static void setupGH2872 (QueryRunner queryRunner ) {
220
+ queryRunner .run ("""
221
+ CREATE (p:`UserChanges`:`Gh2872Entity` {nodeId: randomUUID(), someField: -10}),
222
+ (c:`UserChanges`:`Gh2872Entity` {nodeId: randomUUID(), someField: 0}),
223
+ (n10:`UserChanges`:`Gh2872Entity` {nodeId: randomUUID(), someField: 10}),
224
+ (n20:`UserChanges`:`Gh2872Entity` {nodeId: randomUUID(), someField: 20}),
225
+ (p)-[:HAS_USER_CHANGES]->(c),
226
+ (c)-[:PREVIOUS_USER_CHANGE]->(p),
227
+ (c)-[:HAS_USER_CHANGES]->(n10),
228
+ (c)-[:HAS_USER_CHANGES]->(n20),
229
+ (n10)-[:PREVIOUS_USER_CHANGE]->(c),
230
+ (n20)-[:PREVIOUS_USER_CHANGE]->(c)
231
+ """ ).consume ();
232
+ }
233
+
217
234
private static void setupGH2168 (QueryRunner queryRunner ) {
218
235
queryRunner .run ("CREATE (:DomainObject{id: 'A'})" ).consume ();
219
236
}
@@ -300,6 +317,29 @@ void qbeWithRelationship(@Autowired ARepository repository) {
300
317
assertThat (allResults ).hasSize (1 );
301
318
}
302
319
320
+
321
+ @ Test
322
+ @ Tag ("GH-2872" )
323
+ void findAllWithPossibleCircles (@ Autowired UserChangesRepository userChangesRepository ) {
324
+ var results = userChangesRepository .findAll ();
325
+ assertThat (results ).hasSize (4 );
326
+ for (var result : results ) {
327
+ var someField = result .getSomeField ();
328
+ assertThat (someField ).isNotNull ();
329
+ if (someField .equals (0 )) {
330
+ assertThat (result .getPrevious ()).isNotNull ();
331
+ assertThat (result .getPrevious ().getSomeField ()).isEqualTo (-10 );
332
+ } else if (someField .equals (-10 )) {
333
+ assertThat (result .getPrevious ()).isNull ();
334
+ assertThat (result .getUsers ()).hasSize (1 ).first ().matches (e -> e .getSomeField ().equals (0 ));
335
+ } else {
336
+ assertThat (result .getPrevious ()).isNotNull ();
337
+ assertThat (result .getPrevious ().getSomeField ()).isEqualTo (0 );
338
+ assertThat (result .getUsers ()).isEmpty ();
339
+ }
340
+ }
341
+ }
342
+
303
343
@ Test
304
344
@ Tag ("GH-2168" )
305
345
void findByIdShouldWork (@ Autowired DomainObjectRepository domainObjectRepository ) {
0 commit comments