001 /**
002 * Copyright 2005-2013 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.krad.uif.widget;
017
018 import org.junit.Before;
019 import org.junit.Test;
020 import org.kuali.rice.krad.datadictionary.validation.Account;
021 import org.kuali.rice.krad.datadictionary.validation.Employee;
022 import org.kuali.rice.krad.uif.UifConstants;
023 import org.kuali.rice.krad.uif.component.Component;
024 import org.kuali.rice.krad.uif.container.CollectionGroup;
025 import org.kuali.rice.krad.uif.field.DataField;
026 import org.kuali.rice.krad.uif.layout.TableLayoutManager;
027 import org.kuali.rice.krad.uif.view.View;
028 import org.kuali.rice.krad.web.form.UifFormBase;
029
030 import java.util.ArrayList;
031 import java.util.HashSet;
032 import java.util.List;
033 import java.util.Set;
034
035 import static org.junit.Assert.assertEquals;
036 import static org.junit.Assert.assertNotNull;
037
038 /**
039 * test the RichTable widget
040 */
041
042 public class RichTableTest {
043
044 private RichTable richTable;
045 private CollectionGroup group;
046
047 //private
048 @Before
049 public void setup(){
050
051 richTable = new RichTable();
052
053 group = new CollectionGroup();
054 group.setCollectionObjectClass(Employee.class);
055 TableLayoutManager layoutManager = new TableLayoutManager();
056 layoutManager.setRenderSequenceField(true);
057 group.setLayoutManager(layoutManager);
058 group.setRenderSelectField(false);
059 group.setRenderLineActions(false);
060
061 List<Component> items = new ArrayList<Component>(1);
062 DataField name = new DataField();
063 name.setPropertyName("employeeId");
064 items.add(name);
065 DataField number = new DataField();
066 number.setPropertyName("positionTitle");
067 items.add(number);
068 DataField contactEmail = new DataField();
069 contactEmail.setPropertyName("contactEmail");
070 items.add(contactEmail);
071
072 group.setItems(items);
073 }
074
075 @Test
076 /**
077 * test that without aoColumns being set explicitly, the default behaviour continues
078 */
079 public void testComponentOptionsDefault() throws Exception {
080 String expected = "[ null ,{\"sSortDataType\" : \"dom-text\" , \"sType\" : \"string\"} , "
081 + "{\"sSortDataType\" : \"dom-text\" , \"sType\" : \"string\"} , "
082 + "{\"sSortDataType\" : \"dom-text\" , \"sType\" : \"string\"} ]";
083 assertRichTableComponentOptions(null, expected, UifConstants.TableToolsKeys.AO_COLUMNS);
084 }
085
086
087 @Test
088 /**
089 * test that when aoColumns is explicitly set, it is integrated into the rich table rendering logic
090 */
091 public void testComponentOptionsAoColumnsJSOptions() throws Exception {
092 String innerColValues = "{bVisible: false}, null, null";
093 String options = "[" + innerColValues + "]";
094 String expected = "[ null ," + innerColValues + " ]";
095 assertRichTableComponentOptions(options, expected, UifConstants.TableToolsKeys.AO_COLUMNS);
096 }
097
098 @Test
099 /**
100 * test whether a hidden column, when marked as sortable is still hidden
101 */
102 public void testComponentOptionsHideColumnOnRichTable() {
103 Set<String> hiddenColumns = new HashSet<String>();
104 hiddenColumns.add("employeeId");
105 Set<String> sortableColumns = new HashSet<String>();
106 sortableColumns.add("positionTitle");
107 richTable.setSortableColumns(sortableColumns);
108 richTable.setHiddenColumns(hiddenColumns);
109 String expected = "[ null ,{bVisible: false}, {\"sSortDataType\" : \"dom-text\" , \"sType\" : \"string\"}, {'bSortable': false}]";
110 assertRichTableComponentOptions(null, expected, UifConstants.TableToolsKeys.AO_COLUMNS);
111 }
112
113 @Test
114 /**
115 * test that sortableColumns and hiddenColumns, when set on layoutManager, override those properties on the richTable
116 */
117 public void testComponentOptionsHideColumnOnLayoutManager() {
118 // set rich table properties
119 Set<String> richTableHiddenColumns = new HashSet<String>();
120 richTableHiddenColumns.add("employeeId");
121 Set<String> sortableColumns = new HashSet<String>();
122 sortableColumns.add("positionTitle");
123 richTable.setSortableColumns(sortableColumns);
124 richTable.setHiddenColumns(richTableHiddenColumns);
125 // set layout manager properties
126 Set<String> lmHiddenColumns = new HashSet<String>();
127 lmHiddenColumns.add("contactEmail");
128 Set<String> lmSortableColumns = new HashSet<String>();
129 lmSortableColumns.add("employeeId");
130 ((TableLayoutManager)group.getLayoutManager()).setSortableColumns(lmSortableColumns);
131 ((TableLayoutManager)group.getLayoutManager()).setHiddenColumns(lmHiddenColumns);
132
133 String expected = "[ null ,{\"sSortDataType\" : \"dom-text\" , \"sType\" : \"string\"}, {'bSortable': false}, {bVisible: false}]";
134 assertRichTableComponentOptions(null, expected, UifConstants.TableToolsKeys.AO_COLUMNS);
135 }
136
137 /**
138 * a common method to test rich table options
139 *
140 * @param optionsOnGroup - a string in JSON format of the options set on the collection group
141 * @param optionsOnRichTable - a string in JSON format of the options set on the rich table
142 * @param optionKey - a string with the rich table option key being tested
143 */
144 private void assertRichTableComponentOptions(String optionsOnGroup, String optionsOnRichTable, String optionKey) {
145 richTable.getComponentOptions().put(optionKey, optionsOnGroup);
146 richTable.performFinalize(new View(), new UifFormBase(), group);
147 assertEquals(optionsOnRichTable,richTable.getComponentOptions().get(optionKey));
148 }
149 }