|
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