Skip to content

Commit 018ce02

Browse files
Add test to assert the correct sort priority
1 parent fb00e4d commit 018ce02

File tree

2 files changed

+73
-1
lines changed

2 files changed

+73
-1
lines changed

src/test/java/org/javawebstack/orm/test/querybuilding/OrderByClauseTest.java

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,19 @@
11
package org.javawebstack.orm.test.querybuilding;
22

33
import org.javawebstack.orm.query.Query;
4+
import org.javawebstack.orm.test.exception.SectionIndexOutOfBoundException;
45
import org.javawebstack.orm.test.shared.models.Datatype;
56
import org.javawebstack.orm.test.shared.verification.QueryVerification;
67
import org.junit.jupiter.api.Test;
78

9+
import javax.xml.crypto.Data;
10+
11+
import java.util.*;
12+
import java.util.stream.Collectors;
13+
814
import static org.javawebstack.orm.test.shared.setup.ModelSetup.setUpModel;
15+
import static org.junit.jupiter.api.Assertions.assertTrue;
16+
import static org.junit.jupiter.api.Assertions.fail;
917

1018
public class OrderByClauseTest {
1119

@@ -84,6 +92,43 @@ void testMultipleOrderByClausesOfMixedOrder() {
8492
.assertSectionContains("ORDER BY", "`primitive_integer` DESC");
8593
}
8694

95+
96+
@Test
97+
// This test is important because putting the order by statements in different order is relevant (they set priorities)
98+
void testMultipleOrderByClausesOfRandomOrderForCorrectOrder() throws SectionIndexOutOfBoundException {
99+
Query<Datatype> query = setUpModel(Datatype.class).query();
100+
ArrayList<String> columnNames = new ArrayList<>(Datatype.columnNames);
101+
102+
LinkedList<String> callOrder = new LinkedList<>();
103+
104+
Random r = new Random();
105+
columnNames.stream().unordered().forEach((singleColumn) -> {
106+
query.order(singleColumn, r.nextBoolean());
107+
callOrder.add(singleColumn);
108+
});
109+
110+
String queryString = new QueryVerification(query).getSection("ORDER BY");
111+
int lastIndex = 0;
112+
int foundIndex = -1;
113+
for (String nextInCallOrder : callOrder) {
114+
foundIndex = queryString.indexOf("`" + nextInCallOrder + "`");
115+
if(foundIndex < lastIndex) {
116+
if (foundIndex == -1)
117+
fail("Not all columns occurred in the query string.");
118+
else
119+
fail("The columns did not appear an the correct order.");
120+
121+
break;
122+
}
123+
124+
lastIndex = foundIndex;
125+
}
126+
127+
// If it came until here the test should count as passed.
128+
assertTrue(true);
129+
130+
}
131+
87132
@Test
88133
void testMultipleOrderByClausesOfMixedOrderReversed() {
89134
Query<Datatype> query = setUpModel(Datatype.class).query()
@@ -94,5 +139,4 @@ void testMultipleOrderByClausesOfMixedOrderReversed() {
94139
.assertSectionContains("ORDER BY", "`primitive_integer` DESC")
95140
.assertSectionContains("ORDER BY", "`wrapper_integer`");
96141
}
97-
98142
}

src/test/java/org/javawebstack/orm/test/shared/models/Datatype.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import java.sql.Date;
77
import java.sql.Timestamp;
8+
import java.util.Arrays;
9+
import java.util.List;
810
import java.util.UUID;
911

1012
/*
@@ -84,4 +86,30 @@ public enum OptionEnum {
8486
OPTION1,
8587
OPTION2,
8688
}
89+
90+
public static final List<String> columnNames = Arrays.asList(
91+
"id",
92+
"primitive_boolean",
93+
"wrapper_boolean",
94+
"primitive_byte",
95+
"wrapper_byte",
96+
"primitive_short",
97+
"wrapper_short",
98+
"primitive_integer",
99+
"wrapper_integer",
100+
"primitive_long",
101+
"wrapper_long",
102+
"primitive_float",
103+
"wrapper_float",
104+
"primitive_double",
105+
"wrapper_double",
106+
"primitive_char",
107+
"wrapper_string",
108+
"char_array",
109+
"byte_array",
110+
"timestamp",
111+
"date",
112+
"uuid",
113+
"option_enum"
114+
);
87115
}

0 commit comments

Comments
 (0)