/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package de.unioninvestment.eai.portal.portlet.crud.domain.model;
import com.google.common.collect.ImmutableMap;
import de.unioninvestment.eai.portal.portlet.crud.config.DateDisplayType;
import de.unioninvestment.eai.portal.portlet.crud.config.SelectDisplayType;
import de.unioninvestment.eai.portal.portlet.crud.domain.exception.BusinessException;
import de.unioninvestment.eai.portal.portlet.crud.domain.model.TableColumn.Hidden;
import de.unioninvestment.eai.portal.portlet.crud.domain.model.TableColumn.Searchable;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonMap;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.*;
public class TableColumnsTest {
private TableColumn column1;
private TableColumn column2;
private TableColumn column3;
private TableColumn column4;
private List<TableColumn> columnsList;
private TableColumns tableColumns;
private DateTableColumn column5;
private CheckBoxTableColumn column6;
private OptionList optionList;
private SelectionTableColumn column7;
@Mock
private Table tableMock;
@Mock
private DataContainer containerMock;
private Map<String, String> options;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
options = ImmutableMap.of("key1", "value1", "key2", "value2");
optionList = new StaticOptionList(options);
column1 = new TableColumn.Builder() //
.name("name1") //
.title("title1") //
.longTitle("Long Title 1") //
.hiddenStatus(Hidden.FALSE) //
.editableDefault(false) //
.primaryKey(true) //
.multiline(false) //
.width(100) //
.inputPrompt("prompt1") //
.searchable(Searchable.DEFAULT) //
.build();
column2 = new SelectionTableColumn.Builder() //
.name("name2") //
.title("title2") //
.longTitle("Long Title 2") //
.hiddenStatus(Hidden.IN_TABLE) //
.editableDefault(true) //
.primaryKey(false) //
.multiline(false) //
.width(100) //
.inputPrompt("") //
.optionList(optionList) //
.searchable(Searchable.DEFAULT) //
.searchPrefix("prefix2") //
.build();
column3 = new TableColumn.Builder() //
.name("name3") //
.title("title3")//
.longTitle("Long Title 3") //
.hiddenStatus(Hidden.TRUE) //
.editableDefault(true) //
.primaryKey(false) //
.multiline(true) //
.width(100) //
.build();
column4 = new TableColumn.Builder() //
.name("name4") //
.title("title4") //
.longTitle("Long Title 4") //
.hiddenStatus(Hidden.IN_FORM) //
.editableDefault(true) //
.primaryKey(false) //
.multiline(true).width(100) //
.inputPrompt("prompt1") //
.build();
column5 = new DateTableColumn.Builder() //
.name("name5") //
.dateDisplayType(DateDisplayType.INPUT) //
.displayFormat("dd.MM.yyyy") //
.build();
column6 = new CheckBoxTableColumn.Builder() //
.name("name6") //
.searchable(Searchable.FALSE) //
.checkedValue("1") //
.uncheckedValue("0") //
.build();
column7 = new SelectionTableColumn.Builder() //
.name("name7") //
.title("title2") //
.longTitle("Long Title 2") //
.hiddenStatus(Hidden.IN_TABLE) //
.editableDefault(true) //
.primaryKey(false) //
.multiline(false) //
.width(100) //
.inputPrompt("") //
.optionList(optionList) //
.displayType(SelectDisplayType.TOKENS) //
.searchable(Searchable.FALSE) //
.build();
columnsList = asList(column1, column2, column3, column4, column5,
column6, column7);
tableColumns = new TableColumns(columnsList);
when(tableMock.getContainer()).thenReturn(containerMock);
}
@Test
public void shouldReturnOrderedColumnIterator() {
Iterator<TableColumn> it = tableColumns.iterator();
assertThat(it.next(), is(column1));
assertThat(it.next(), is(column2));
assertThat(it.next(), is(column3));
assertThat(it.next(), is(column4));
assertThat(it.next(), is((TableColumn) column5));
assertThat(it.next(), is((TableColumn) column6));
assertThat(it.next(), is((TableColumn) column7));
assertThat(it.hasNext(), is(false));
}
@Test
public void shouldReturnColumnsByName() {
assertThat(tableColumns.get("name2"), is(column2));
}
@Test(expected = BusinessException.class)
public void shouldFailReturningUnknownColumn() {
tableColumns.get("unknown");
}
@Test
public void shouldReturnOrderedListOfAllNames() {
assertThat(
tableColumns.getAllNames(),
is(asList("name1", "name2", "name3", "name4", "name5", "name6",
"name7")));
}
@Test
public void shouldReturnPrimaryKeyNames() {
assertThat(tableColumns.getPrimaryKeyNames(), is(asList("name1")));
}
@Test
public void shouldReturnVisibleNamesForTable() {
assertThat(tableColumns.getVisibleNamesForTable(),
is(asList("name1", "name4", "name5", "name6")));
}
@Test
public void shouldReturnVisibleNamesForForm() {
assertThat(tableColumns.getVisibleNamesForForm(),
is(asList("name1", "name2", "name5", "name6", "name7")));
}
@Test
public void shouldReturnVisibleNamesForFormWithoutGeneratedCols() {
TableColumn gencol = new TableColumn.Builder().name("genCol")
.hiddenStatus(Hidden.FALSE).editableDefault(false)
.primaryKey(true).multiline(false).width(100).build();
CustomColumnGenerator scriptColumnGeneratorMock = mock(CustomColumnGenerator.class);
gencol.setCustomColumnGenerator(scriptColumnGeneratorMock);
columnsList = asList(column1, column2, column3, column4, gencol);
tableColumns = new TableColumns(columnsList);
assertThat(tableColumns.getVisibleNamesForForm(),
is(asList("name1", "name2")));
}
@Test
public void shouldReturnHiddenNamesForFormWithoutGeneratedCols() {
TableColumn gencol = new TableColumn.Builder().name("genCol")
.hiddenStatus(Hidden.IN_TABLE).editableDefault(false)
.primaryKey(true).multiline(false).width(100).build();
CustomColumnGenerator scriptColumnGeneratorMock = mock(CustomColumnGenerator.class);
gencol.setCustomColumnGenerator(scriptColumnGeneratorMock);
columnsList = asList(column1, column2, column3, column4, gencol);
tableColumns = new TableColumns(columnsList);
assertThat(tableColumns.getVisibleNamesForForm(),
is(asList("name1", "name2")));
}
@Test
public void shouldReturnMultilineNames() {
assertThat(tableColumns.getMultilineNames(),
is(asList("name3", "name4")));
}
@Test
public void shouldReturnMultilineFlagByName() {
assertThat(tableColumns.isMultiline("name2"), is(false));
assertThat(tableColumns.isMultiline("name3"), is(true));
}
@Test
public void shouldReturnInputPromptIfNotEmpty() {
assertThat(tableColumns.getInputPrompt("name1"), is("prompt1"));
assertThat(tableColumns.getInputPrompt("name2"), is(nullValue()));
assertThat(tableColumns.getInputPrompt("name3"), is(nullValue()));
}
@Test
public void shouldReturnDropdownFlagByName() {
assertThat(tableColumns.isComboBox("name2"), is(true));
assertThat(tableColumns.isComboBox("name3"), is(false));
}
@Test
public void shouldReturnDropdownSelections() {
assertThat(tableColumns.getDropdownSelections("name1"), is(nullValue()));
}
@Test
public void shouldReturnTrueForDate() {
assertThat(tableColumns.isDate("name5"), is(true));
}
@Test
public void shouldReturnFalseForNonDate() {
assertThat(tableColumns.isDate("name4"), is(false));
}
@Test
public void shouldReturnCheckBoxTableColumn() {
assertThat(tableColumns.getCheckBox("name6"), is(column6));
}
@Test
public void shouldReturnIfIsCheckBox() {
assertThat(tableColumns.isCheckbox("name1"), is(false));
assertThat(tableColumns.isCheckbox("name6"), is(true));
}
@Test
public void shouldReturnIfIsSelection() {
assertThat(tableColumns.isSelection("name1"), is(false));
assertThat(tableColumns.isSelection("name2"), is(true));
assertThat(tableColumns.isSelection("name7"), is(true));
}
@Test
public void shouldReturnIfIsComboBox() {
assertThat(tableColumns.isComboBox("name1"), is(false));
assertThat(tableColumns.isComboBox("name2"), is(true));
assertThat(tableColumns.isComboBox("name7"), is(false));
}
@Test
public void shouldTellIfIsTokenField() {
assertThat(tableColumns.isTokenfield("name1"), is(false));
assertThat(tableColumns.isTokenfield("name2"), is(false));
assertThat(tableColumns.isTokenfield("name7"), is(true));
}
@Test
public void shouldReturnDateTableColumn() {
assertThat(tableColumns.getDateColumn("name5"), is(column5));
}
@Test
public void shouldReturnOptionListOfSelectionColumn() {
assertThat(tableColumns.getDropdownSelections("name2"), is(optionList));
}
@Test
public void shouldReturnDisplayFormats() {
Map<String, String> expectedFormats = ImmutableMap
.<String, String> builder().put("name5", "dd.MM.yyyy").build();
assertThat(tableColumns.getFormatPattern(), is(expectedFormats));
}
@Test
public void shouldReturnSearchableColumnPrefixes() {
assertThat(
tableColumns.getSearchableColumnPrefixes(),
is((Collection<String>) asList("name1", "prefix2", "name3",
"name4", "name5")));
}
@Test
public void shouldReturnDefaultSearchableColumns() {
assertThat(tableColumns.getDefaultSearchablePrefixes(),
is((Map<String,String>)ImmutableMap.of("name1", "name1", "name2", "prefix2")));
}
@Test
public void shouldTellIfColumnExists() {
assertThat(tableColumns.contains("name1"), is(true));
assertThat(tableColumns.contains("unknown"), is(false));
}
@Test
public void shouldSetTableOnColumns() {
tableColumns.setTable(tableMock);
assertThat(column1.getTable(), is(tableMock));
}
@Test
public void shouldReturnSize() {
assertThat(tableColumns.size(), is(7));
}
@Test
public void shouldReturnColumnTypeByName() {
tableColumns.setTable(tableMock);
doReturn(String.class).when(containerMock).getType("name1");
assertThat(tableColumns.getType("name1"), equalTo((Class) String.class));
}
@Test
public void shouldReturnFilteredDropdownSelectionsByPrefix() {
assertThat(tableColumns.getDropdownSelections("name2", "va", 100),
equalTo(options));
}
@Test
public void shouldReturnFilteredDropdownSelectionsBelowLimit() {
assertThat(tableColumns.getDropdownSelections("name2", null, 1),
equalTo(singletonMap("key1", "value1")));
}
@Test
public void shouldReturnFilteredDropdownSelection() {
assertThat(tableColumns.getDropdownSelections("name2", "value2", 0),
equalTo(singletonMap("key2", "value2")));
}
@Test
public void shouldReturnLowerCaseTableNamesMapping() {
prepareUppercaseColumns();
assertThat(tableColumns.getLowerCaseColumnNamesMapping().size(), is(2));
assertThat(tableColumns.getLowerCaseColumnNamesMapping().get("name1"), is("Name1"));
assertThat(tableColumns.getLowerCaseColumnNamesMapping().get("name2"), is("NAME2"));
}
@Test
public void shouldCacheLowerCaseTableNamesMapping() {
prepareUppercaseColumns();
assertThat(tableColumns.getLowerCaseColumnNamesMapping(), sameInstance(tableColumns.getLowerCaseColumnNamesMapping()));
}
@Test
public void shouldReturnUpdateColumns() {
assertThat(tableColumns.getUpdateColumns(), equalTo(asList(column2, column3, column4, column7)));
}
@Test
public void shouldReturnInsertColumns() {
assertThat(tableColumns.getUpdateColumns(), equalTo(asList(column2, column3, column4, column7)));
}
private void prepareUppercaseColumns() {
column1 = new TableColumn.Builder() //
.name("Name1") //
.build();
column2 = new TableColumn.Builder() //
.name("NAME2") //
.build();
columnsList = asList(column1, column2);
tableColumns = new TableColumns(columnsList);
}
}