/* * Copyright 2012 Red Hat, Inc. and/or its affiliates. * * Licensed 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 org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.impl; import java.util.HashMap; import java.util.List; import org.drools.workbench.models.datamodel.oracle.DataType; import org.drools.workbench.models.datamodel.oracle.FieldAccessorsAndMutators; import org.drools.workbench.models.datamodel.oracle.ModelField; import org.drools.workbench.models.datamodel.rule.BaseSingleFieldConstraint; import org.drools.workbench.models.guided.dtable.shared.model.ActionWorkItemSetFieldCol52; import org.drools.workbench.models.guided.dtable.shared.model.BaseColumnFieldDiff; import org.drools.workbench.models.guided.dtable.shared.model.ConditionCol52; import org.drools.workbench.models.guided.dtable.shared.model.Pattern52; import org.drools.workbench.screens.guided.dtable.client.widget.table.columns.BaseMultipleDOMElementUiColumn; import org.drools.workbench.screens.guided.dtable.client.widget.table.columns.BooleanUiColumn; import org.drools.workbench.screens.guided.dtable.client.widget.table.model.synchronizers.ModelSynchronizer; import org.junit.Test; import org.kie.workbench.common.widgets.client.datamodel.AsyncPackageDataModelOracle; import org.uberfire.ext.wires.core.grids.client.model.GridColumn; import org.uberfire.ext.wires.core.grids.client.model.impl.BaseGridCellValue; import static org.junit.Assert.*; import static org.mockito.Mockito.*; public class ActionWorkItemSetFieldColumnSynchronizerTest extends BaseSynchronizerTest { @Override protected AsyncPackageDataModelOracle getOracle() { final AsyncPackageDataModelOracle oracle = super.getOracle(); oracle.addModelFields(new HashMap<String, ModelField[]>() { { put("Applicant", new ModelField[]{ new ModelField("this", "Applicant", ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.SELF, FieldAccessorsAndMutators.ACCESSOR, "Applicant"), new ModelField("age", Integer.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.SELF, FieldAccessorsAndMutators.ACCESSOR, DataType.TYPE_NUMERIC_INTEGER), new ModelField("name", String.class.getName(), ModelField.FIELD_CLASS_TYPE.REGULAR_CLASS, ModelField.FIELD_ORIGIN.SELF, FieldAccessorsAndMutators.ACCESSOR, DataType.TYPE_STRING)}); } } ); return oracle; } @Test public void testAppend() throws ModelSynchronizer.MoveColumnVetoException { final ActionWorkItemSetFieldCol52 column = new ActionWorkItemSetFieldCol52(); column.setHeader("col1"); modelSynchronizer.appendColumn(column); assertEquals(1, model.getActionCols().size()); assertEquals(3, uiModel.getColumns().size()); assertTrue(uiModel.getColumns().get(2) instanceof BooleanUiColumn); assertEquals(true, ((BaseMultipleDOMElementUiColumn) uiModel.getColumns().get(2)).isEditable()); } @Test public void testUpdate() throws ModelSynchronizer.MoveColumnVetoException { final ActionWorkItemSetFieldCol52 column = spy(new ActionWorkItemSetFieldCol52()); column.setHeader("col1"); modelSynchronizer.appendColumn(column); final ActionWorkItemSetFieldCol52 edited = new ActionWorkItemSetFieldCol52(); edited.setWidth(column.getWidth()); edited.setHideColumn(true); edited.setHeader("updated"); List<BaseColumnFieldDiff> diffs = modelSynchronizer.updateColumn(column, edited); assertEquals(2, diffs.size()); verify(column).diff(edited); assertEquals(1, model.getActionCols().size()); assertEquals(3, uiModel.getColumns().size()); assertTrue(uiModel.getColumns().get(2) instanceof BooleanUiColumn); assertEquals("updated", uiModel.getColumns().get(2).getHeaderMetaData().get(0).getTitle()); assertEquals(false, uiModel.getColumns().get(2).isVisible()); } @Test public void testDelete() throws ModelSynchronizer.MoveColumnVetoException { final ActionWorkItemSetFieldCol52 column = new ActionWorkItemSetFieldCol52(); column.setHeader("col1"); modelSynchronizer.appendColumn(column); assertEquals(1, model.getActionCols().size()); assertEquals(3, uiModel.getColumns().size()); modelSynchronizer.deleteColumn(column); assertEquals(0, model.getActionCols().size()); assertEquals(2, uiModel.getColumns().size()); } @Test public void testMoveColumnTo_MoveLeft() throws ModelSynchronizer.MoveColumnVetoException { //Add a Pattern to be updated final Pattern52 pattern = new Pattern52(); pattern.setBoundName("$a"); pattern.setFactType("Applicant"); final ConditionCol52 condition = new ConditionCol52(); condition.setConstraintValueType(BaseSingleFieldConstraint.TYPE_LITERAL); condition.setHeader("col1"); condition.setFactField("age"); condition.setOperator("=="); modelSynchronizer.appendColumn(pattern, condition); final ActionWorkItemSetFieldCol52 column1 = new ActionWorkItemSetFieldCol52(); column1.setBoundName("$a"); column1.setFactField("age"); column1.setHeader("wid1"); final ActionWorkItemSetFieldCol52 column2 = new ActionWorkItemSetFieldCol52(); column2.setBoundName("$a"); column2.setFactField("name"); column2.setHeader("wid2"); modelSynchronizer.appendColumn(column1); modelSynchronizer.appendColumn(column2); modelSynchronizer.appendRow(); uiModel.setCell(0, 3, new BaseGridCellValue<Boolean>(true)); uiModel.setCell(0, 4, new BaseGridCellValue<Boolean>(false)); assertEquals(2, model.getActionCols().size()); assertEquals(column1, model.getActionCols().get(0)); assertEquals(column2, model.getActionCols().get(1)); assertEquals(true, model.getData().get(0).get(3).getBooleanValue()); assertEquals(false, model.getData().get(0).get(4).getBooleanValue()); assertEquals(5, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_1 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn2_1 = uiModel.getColumns().get(4); assertEquals("wid1", uiModelColumn1_1.getHeaderMetaData().get(0).getTitle()); assertEquals("wid2", uiModelColumn2_1.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_1 instanceof BooleanUiColumn); assertTrue(uiModelColumn2_1 instanceof BooleanUiColumn); assertEquals(3, uiModelColumn1_1.getIndex()); assertEquals(4, uiModelColumn2_1.getIndex()); assertEquals(true, uiModel.getRow(0).getCells().get(uiModelColumn1_1.getIndex()).getValue().getValue()); assertEquals(false, uiModel.getRow(0).getCells().get(uiModelColumn2_1.getIndex()).getValue().getValue()); uiModel.moveColumnTo(3, uiModelColumn2_1); assertEquals(2, model.getActionCols().size()); assertEquals(column2, model.getActionCols().get(0)); assertEquals(column1, model.getActionCols().get(1)); assertEquals(false, model.getData().get(0).get(3).getBooleanValue()); assertEquals(true, model.getData().get(0).get(4).getBooleanValue()); assertEquals(5, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_2 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn2_2 = uiModel.getColumns().get(4); assertEquals("wid2", uiModelColumn1_2.getHeaderMetaData().get(0).getTitle()); assertEquals("wid1", uiModelColumn2_2.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_2 instanceof BooleanUiColumn); assertTrue(uiModelColumn2_2 instanceof BooleanUiColumn); assertEquals(4, uiModelColumn1_2.getIndex()); assertEquals(3, uiModelColumn2_2.getIndex()); assertEquals(false, uiModel.getRow(0).getCells().get(uiModelColumn1_2.getIndex()).getValue().getValue()); assertEquals(true, uiModel.getRow(0).getCells().get(uiModelColumn2_2.getIndex()).getValue().getValue()); } @Test public void testMoveColumnTo_MoveRight() throws ModelSynchronizer.MoveColumnVetoException { //Add a Pattern to be updated final Pattern52 pattern = new Pattern52(); pattern.setBoundName("$a"); pattern.setFactType("Applicant"); final ConditionCol52 condition = new ConditionCol52(); condition.setConstraintValueType(BaseSingleFieldConstraint.TYPE_LITERAL); condition.setHeader("col1"); condition.setFactField("age"); condition.setOperator("=="); modelSynchronizer.appendColumn(pattern, condition); final ActionWorkItemSetFieldCol52 column1 = new ActionWorkItemSetFieldCol52(); column1.setBoundName("$a"); column1.setFactField("age"); column1.setHeader("wid1"); final ActionWorkItemSetFieldCol52 column2 = new ActionWorkItemSetFieldCol52(); column2.setBoundName("$a"); column2.setFactField("name"); column2.setHeader("wid2"); modelSynchronizer.appendColumn(column1); modelSynchronizer.appendColumn(column2); modelSynchronizer.appendRow(); uiModel.setCell(0, 3, new BaseGridCellValue<Boolean>(true)); uiModel.setCell(0, 4, new BaseGridCellValue<Boolean>(false)); assertEquals(2, model.getActionCols().size()); assertEquals(column1, model.getActionCols().get(0)); assertEquals(column2, model.getActionCols().get(1)); assertEquals(true, model.getData().get(0).get(3).getBooleanValue()); assertEquals(false, model.getData().get(0).get(4).getBooleanValue()); assertEquals(5, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_1 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn2_1 = uiModel.getColumns().get(4); assertEquals("wid1", uiModelColumn1_1.getHeaderMetaData().get(0).getTitle()); assertEquals("wid2", uiModelColumn2_1.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_1 instanceof BooleanUiColumn); assertTrue(uiModelColumn2_1 instanceof BooleanUiColumn); assertEquals(3, uiModelColumn1_1.getIndex()); assertEquals(4, uiModelColumn2_1.getIndex()); assertEquals(true, uiModel.getRow(0).getCells().get(uiModelColumn1_1.getIndex()).getValue().getValue()); assertEquals(false, uiModel.getRow(0).getCells().get(uiModelColumn2_1.getIndex()).getValue().getValue()); uiModel.moveColumnTo(4, uiModelColumn1_1); assertEquals(2, model.getActionCols().size()); assertEquals(column2, model.getActionCols().get(0)); assertEquals(column1, model.getActionCols().get(1)); assertEquals(false, model.getData().get(0).get(3).getBooleanValue()); assertEquals(true, model.getData().get(0).get(4).getBooleanValue()); assertEquals(5, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_2 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn2_2 = uiModel.getColumns().get(4); assertEquals("wid2", uiModelColumn1_2.getHeaderMetaData().get(0).getTitle()); assertEquals("wid1", uiModelColumn2_2.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_2 instanceof BooleanUiColumn); assertTrue(uiModelColumn2_2 instanceof BooleanUiColumn); assertEquals(4, uiModelColumn1_2.getIndex()); assertEquals(3, uiModelColumn2_2.getIndex()); assertEquals(false, uiModel.getRow(0).getCells().get(uiModelColumn1_2.getIndex()).getValue().getValue()); assertEquals(true, uiModel.getRow(0).getCells().get(uiModelColumn2_2.getIndex()).getValue().getValue()); } @Test public void testMoveColumnTo_OutOfBounds() throws ModelSynchronizer.MoveColumnVetoException { //Add a Pattern to be updated final Pattern52 pattern = new Pattern52(); pattern.setBoundName("$a"); pattern.setFactType("Applicant"); final ConditionCol52 condition = new ConditionCol52(); condition.setConstraintValueType(BaseSingleFieldConstraint.TYPE_LITERAL); condition.setHeader("col1"); condition.setFactField("age"); condition.setOperator("=="); modelSynchronizer.appendColumn(pattern, condition); final ActionWorkItemSetFieldCol52 column1 = new ActionWorkItemSetFieldCol52(); column1.setBoundName("$a"); column1.setFactField("age"); column1.setHeader("wid1"); final ActionWorkItemSetFieldCol52 column2 = new ActionWorkItemSetFieldCol52(); column2.setBoundName("$a"); column2.setFactField("name"); column2.setHeader("wid2"); modelSynchronizer.appendColumn(column1); modelSynchronizer.appendColumn(column2); modelSynchronizer.appendRow(); uiModel.setCell(0, 3, new BaseGridCellValue<Boolean>(true)); uiModel.setCell(0, 4, new BaseGridCellValue<Boolean>(false)); assertEquals(2, model.getActionCols().size()); assertEquals(column1, model.getActionCols().get(0)); assertEquals(column2, model.getActionCols().get(1)); assertEquals(true, model.getData().get(0).get(3).getBooleanValue()); assertEquals(false, model.getData().get(0).get(4).getBooleanValue()); assertEquals(5, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_1 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn2_1 = uiModel.getColumns().get(4); assertEquals("wid1", uiModelColumn1_1.getHeaderMetaData().get(0).getTitle()); assertEquals("wid2", uiModelColumn2_1.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_1 instanceof BooleanUiColumn); assertTrue(uiModelColumn2_1 instanceof BooleanUiColumn); assertEquals(3, uiModelColumn1_1.getIndex()); assertEquals(4, uiModelColumn2_1.getIndex()); assertEquals(true, uiModel.getRow(0).getCells().get(uiModelColumn1_1.getIndex()).getValue().getValue()); assertEquals(false, uiModel.getRow(0).getCells().get(uiModelColumn2_1.getIndex()).getValue().getValue()); uiModel.moveColumnTo(0, uiModelColumn1_1); assertEquals(2, model.getActionCols().size()); assertEquals(column1, model.getActionCols().get(0)); assertEquals(column2, model.getActionCols().get(1)); assertEquals(true, model.getData().get(0).get(3).getBooleanValue()); assertEquals(false, model.getData().get(0).get(4).getBooleanValue()); assertEquals(5, uiModel.getColumns().size()); final GridColumn<?> uiModelColumn1_2 = uiModel.getColumns().get(3); final GridColumn<?> uiModelColumn2_2 = uiModel.getColumns().get(4); assertEquals("wid1", uiModelColumn1_2.getHeaderMetaData().get(0).getTitle()); assertEquals("wid2", uiModelColumn2_2.getHeaderMetaData().get(0).getTitle()); assertTrue(uiModelColumn1_2 instanceof BooleanUiColumn); assertTrue(uiModelColumn2_2 instanceof BooleanUiColumn); assertEquals(3, uiModelColumn1_2.getIndex()); assertEquals(4, uiModelColumn2_2.getIndex()); assertEquals(true, uiModel.getRow(0).getCells().get(uiModelColumn1_2.getIndex()).getValue().getValue()); assertEquals(false, uiModel.getRow(0).getCells().get(uiModelColumn2_2.getIndex()).getValue().getValue()); } }