|
19 | 19 | import java.util.Collections;
|
20 | 20 | import java.util.List;
|
21 | 21 | import java.util.Map;
|
| 22 | +import java.util.Optional; |
22 | 23 | import java.util.function.UnaryOperator;
|
23 | 24 | import java.util.regex.Pattern;
|
24 | 25 |
|
|
29 | 30 | import org.mockito.Mock;
|
30 | 31 | import org.mockito.Mockito;
|
31 | 32 | import org.mockito.junit.jupiter.MockitoExtension;
|
| 33 | +import org.neo4j.cypherdsl.core.renderer.Configuration; |
32 | 34 | import org.neo4j.driver.Values;
|
33 | 35 | import org.neo4j.driver.types.Point;
|
34 | 36 | import reactor.core.publisher.Flux;
|
|
39 | 41 | import org.springframework.data.domain.PageRequest;
|
40 | 42 | import org.springframework.data.domain.Pageable;
|
41 | 43 | import org.springframework.data.domain.Sort;
|
| 44 | +import org.springframework.data.domain.Vector; |
42 | 45 | import org.springframework.data.mapping.MappingException;
|
43 | 46 | import org.springframework.data.neo4j.core.PreparedQuery;
|
44 | 47 | import org.springframework.data.neo4j.core.ReactiveNeo4jOperations;
|
|
48 | 51 | import org.springframework.data.neo4j.test.LogbackCapturingExtension;
|
49 | 52 | import org.springframework.data.projection.ProjectionFactory;
|
50 | 53 | import org.springframework.data.projection.SpelAwareProxyProjectionFactory;
|
| 54 | +import org.springframework.data.repository.core.NamedQueries; |
51 | 55 | import org.springframework.data.repository.core.RepositoryMetadata;
|
52 | 56 | import org.springframework.data.repository.core.support.DefaultRepositoryMetadata;
|
53 | 57 | import org.springframework.data.repository.query.Param;
|
@@ -87,6 +91,9 @@ final class ReactiveRepositoryQueryTests {
|
87 | 91 | @Mock
|
88 | 92 | private ProjectionFactory projectionFactory;
|
89 | 93 |
|
| 94 | + @Mock |
| 95 | + NamedQueries namedQueries; |
| 96 | + |
90 | 97 | private ReactiveRepositoryQueryTests() {
|
91 | 98 | }
|
92 | 99 |
|
@@ -133,6 +140,37 @@ Flux<TestEntity> makeStaticThingsDynamic(@Param("aDynamicLabelPt1") String aDyna
|
133 | 140 | Mono<TestEntity> findByDontDoThisInRealLiveNamed(@Param("location") org.neo4j.driver.types.Point location,
|
134 | 141 | @Param("name") String name, @Param("firstName") String aFirstName);
|
135 | 142 |
|
| 143 | + @VectorSearch(indexName = "testIndex", numberOfNodes = 2) |
| 144 | + Flux<TestEntity> annotatedVectorSearch(Vector vector); |
| 145 | + |
| 146 | + @VectorSearch(indexName = "testIndex", numberOfNodes = 0) |
| 147 | + Flux<TestEntity> illegalAnnotatedVectorSearch(Vector vector); |
| 148 | + |
| 149 | + } |
| 150 | + |
| 151 | + @Nested |
| 152 | + class ReactiveNeo4jPartTreeTest { |
| 153 | + |
| 154 | + @Test |
| 155 | + void findVectorSearchAnnotation() { |
| 156 | + |
| 157 | + Neo4jQueryMethod neo4jQueryMethod = reactiveNeo4jQueryMethod("annotatedVectorSearch", Vector.class); |
| 158 | + |
| 159 | + Optional<VectorSearch> optionalVectorSearchAnnotation = neo4jQueryMethod.getVectorSearchAnnotation(); |
| 160 | + assertThat(optionalVectorSearchAnnotation).isPresent(); |
| 161 | + } |
| 162 | + |
| 163 | + @Test |
| 164 | + void failOnZeroNodesVectorSearchAnnotation() { |
| 165 | + var lookupStrategy = new ReactiveNeo4jQueryLookupStrategy(ReactiveRepositoryQueryTests.this.neo4jOperations, |
| 166 | + ReactiveRepositoryQueryTests.this.neo4jMappingContext, ValueExpressionDelegate.create(), |
| 167 | + Configuration.defaultConfig()); |
| 168 | + |
| 169 | + assertThatExceptionOfType(IllegalArgumentException.class).isThrownBy(() -> lookupStrategy.resolveQuery( |
| 170 | + reactiveNeo4jQueryMethod("illegalAnnotatedVectorSearch", Vector.class).getMethod(), |
| 171 | + TEST_REPOSITORY_METADATA, PROJECTION_FACTORY, ReactiveRepositoryQueryTests.this.namedQueries)); |
| 172 | + } |
| 173 | + |
136 | 174 | }
|
137 | 175 |
|
138 | 176 | @Nested
|
|
0 commit comments