package jnpf.onlinedev.util;
|
|
import org.junit.jupiter.api.Test;
|
import org.mybatis.dynamic.sql.SqlBuilder;
|
import org.mybatis.dynamic.sql.SqlTable;
|
import org.mybatis.dynamic.sql.render.RenderingStrategies;
|
|
import java.util.function.Predicate;
|
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
public class WorkflowListSortUtilsTest {
|
|
@Test
|
public void mapsAscendingStateAliasToPhysicalColumn() {
|
assertOrder("flowState", true, "f_flow_state", field -> true, "records.f_flow_state");
|
}
|
|
@Test
|
public void descendingStateHasNoLeadingAscendingState() {
|
assertOrder("-flowState", true, "f_flow_state", field -> true, "records.f_flow_state DESC");
|
}
|
|
@Test
|
public void acceptsPhysicalStateFieldFromDefaultSortConfiguration() {
|
assertOrder("-f_flow_state", true, "f_flow_state", field -> true, "records.f_flow_state DESC");
|
}
|
|
@Test
|
public void preservesRequestedMultiColumnPriority() {
|
assertOrder("title,-flowState", true, "f_flow_state", field -> true,
|
"records.title, records.f_flow_state DESC");
|
}
|
|
@Test
|
public void retainsDefaultStatePriorityWhenOnlyBusinessFieldsAreSorted() {
|
assertOrder("-title", true, "f_flow_state", field -> true,
|
"records.f_flow_state, records.title DESC");
|
}
|
|
@Test
|
public void restoresStateAndPrimaryKeyOrderWhenSortingIsCleared() {
|
assertOrder("", true, "f_flow_state", field -> true,
|
"records.f_flow_state, records.f_id DESC");
|
}
|
|
@Test
|
public void usesDatabaseSpecificUppercaseColumnForOracleAndDm() {
|
assertOrder("-flowState", true, "F_FLOW_STATE", field -> true, "records.F_FLOW_STATE DESC");
|
}
|
|
@Test
|
public void allowsSystemStateEvenWhenDisplayOnlyFieldsAreFiltered() {
|
assertOrder("virtual,-flowState,child-name", true, "f_flow_state", field -> false,
|
"records.f_flow_state DESC");
|
}
|
|
@Test
|
public void leavesNonWorkflowListsUnchanged() {
|
assertOrder("-title", false, "f_flow_state", field -> true, "records.title DESC");
|
assertOrder(null, false, "f_flow_state", field -> true, "records.f_id DESC");
|
assertOrder("flowState", false, "f_flow_state", field -> true, "records.flowState");
|
}
|
|
private void assertOrder(String sidx, boolean enableFlow, String stateField, Predicate<String> allowed, String expected) {
|
SqlTable table = SqlTable.of("records");
|
String sql = SqlBuilder.select(table.column("f_id"), table.column(stateField).as("flowState"))
|
.from(table)
|
.orderBy(WorkflowListSortUtils.orderBy("records", stateField, "f_id", enableFlow, sidx, allowed))
|
.build().render(RenderingStrategies.MYBATIS3).getSelectStatement();
|
assertTrue(sql.contains(" order by "), sql);
|
assertEquals(expected, sql.substring(sql.indexOf(" order by ") + " order by ".length()));
|
}
|
}
|