|
15 | 15 | */ |
16 | 16 | package org.springframework.data.neo4j.core.mapping; |
17 | 17 |
|
| 18 | +import static org.assertj.core.api.Assertions.assertThat; |
| 19 | +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; |
| 20 | +import static org.mockito.Mockito.doReturn; |
| 21 | +import static org.mockito.Mockito.when; |
| 22 | + |
| 23 | +import java.util.Collection; |
| 24 | +import java.util.Map; |
| 25 | +import java.util.Optional; |
| 26 | +import java.util.regex.Pattern; |
| 27 | +import java.util.stream.Stream; |
| 28 | + |
18 | 29 | import org.junit.Assert; |
19 | 30 | import org.junit.jupiter.api.Test; |
20 | 31 | import org.junit.jupiter.params.ParameterizedTest; |
21 | 32 | import org.junit.jupiter.params.provider.Arguments; |
| 33 | +import org.junit.jupiter.params.provider.CsvSource; |
22 | 34 | import org.junit.jupiter.params.provider.MethodSource; |
23 | 35 | import org.mockito.Mockito; |
24 | 36 | import org.neo4j.cypherdsl.core.Cypher; |
|
28 | 40 | import org.springframework.data.neo4j.core.schema.Id; |
29 | 41 | import org.springframework.data.neo4j.core.schema.Node; |
30 | 42 |
|
31 | | -import java.util.Collection; |
32 | | -import java.util.Map; |
33 | | -import java.util.Optional; |
34 | | -import java.util.regex.Pattern; |
35 | | -import java.util.stream.Stream; |
36 | | - |
37 | | -import static org.assertj.core.api.Assertions.assertThat; |
38 | | -import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; |
39 | | -import static org.mockito.Mockito.doReturn; |
40 | | -import static org.mockito.Mockito.when; |
41 | | - |
42 | 43 | /** |
43 | 44 | * @author Davide Fantuzzi |
44 | 45 | * @author Andrea Santurbano |
@@ -175,10 +176,29 @@ void shouldFailOnInvalidPathWithMultipleHops() { |
175 | 176 | .withMessageMatching("Cannot handle order property `.*`, it must be a simple property or one-hop path\\."); |
176 | 177 | } |
177 | 178 |
|
| 179 | + @CsvSource(delimiterString = "|", value = { |
| 180 | + "apoc.text.clean(department.name) |false| ORDER BY apoc.text.clean(department.name) ASC", |
| 181 | + "apoc.text.clean(department.name) |true | ORDER BY apoc.text.clean(department.name) DESC", |
| 182 | + "apoc.text.clean() |true | ORDER BY apoc.text.clean() DESC", |
| 183 | + "date() |false| ORDER BY date() ASC", |
| 184 | + "date({year:1984, month:10, day:11})|false| ORDER BY date({year:1984, month:10, day:11}) ASC", |
| 185 | + "round(3.141592, 3) |false| ORDER BY round(3.141592, 3) ASC" |
| 186 | + }) |
| 187 | + @ParameterizedTest // GH-2273 |
| 188 | + void functionCallsShouldWork(String input, boolean descending, String expected) { |
| 189 | + |
| 190 | + Sort sort = Sort.by(input); |
| 191 | + if (descending) { |
| 192 | + sort = sort.descending(); |
| 193 | + } |
| 194 | + String orderByFragment = CypherGenerator.INSTANCE.createOrderByFragment(sort); |
| 195 | + assertThat(orderByFragment).isEqualTo(expected); |
| 196 | + } |
| 197 | + |
178 | 198 | @Test |
179 | 199 | void shouldFailOnInvalidSymbolicNames() { |
180 | 200 |
|
181 | | - assertThatIllegalArgumentException().isThrownBy(() -> CypherGenerator.INSTANCE.createOrderByFragment(Sort.by("n()"))) |
| 201 | + assertThatIllegalArgumentException().isThrownBy(() -> CypherGenerator.INSTANCE.createOrderByFragment(Sort.by("()"))) |
182 | 202 | .withMessage("Name must be a valid identifier."); |
183 | 203 | } |
184 | 204 |
|
|
0 commit comments