/**
* ***************************************************************************
* Copyright (c) 2010 Qcadoo Limited
* Project: Qcadoo MES
* Version: 1.4
*
* This file is part of Qcadoo.
*
* Qcadoo is free software; you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation; either version 3 of the License,
* or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
* ***************************************************************************
*/
package com.qcadoo.mes.masterOrders.hooks;
import com.qcadoo.mes.masterOrders.constants.MasterOrderFields;
import com.qcadoo.mes.masterOrders.constants.MasterOrderType;
import com.qcadoo.mes.orders.TechnologyServiceO;
import com.qcadoo.model.api.Entity;
import com.qcadoo.model.api.ExpressionService;
import com.qcadoo.view.api.ComponentState;
import com.qcadoo.view.api.ComponentState.MessageType;
import com.qcadoo.view.api.ViewDefinitionState;
import com.qcadoo.view.api.components.FieldComponent;
import com.qcadoo.view.api.components.FormComponent;
import com.qcadoo.view.api.components.GridComponent;
import com.qcadoo.view.api.components.LookupComponent;
import com.qcadoo.view.api.ribbon.Ribbon;
import com.qcadoo.view.api.ribbon.RibbonActionItem;
import com.qcadoo.view.api.ribbon.RibbonGroup;
import com.qcadoo.view.internal.components.window.WindowComponentState;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.test.util.ReflectionTestUtils;
import java.math.BigDecimal;
import java.util.Locale;
import static com.qcadoo.mes.masterOrders.constants.MasterOrderFields.CUMULATED_ORDER_QUANTITY;
import static com.qcadoo.mes.masterOrders.constants.MasterOrderFields.MASTER_ORDER_QUANTITY;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class MasterOrderDetailsHooksTest {
private MasterOrderDetailsHooks masterOrderDetailsHooks;
@Mock
private ViewDefinitionState view;
@Mock
private FieldComponent masterOrderTypeField, technologyField, defaultTechnologyField, cumulatedQuantityField,
masterOrderQuantityField, producedOrderQuantityField, cumulatedOrderQuantityUnitField, masterOrderQuantityUnitField,
producedOrderQuantityUnitField, leftToRelease, leftToReleaseUnit, comments, masterOrderPositionStatus;
@Mock
private FormComponent form;
@Mock
private LookupComponent productField;
@Mock
private GridComponent masterOrderProducts;
@Mock
private ExpressionService expressionService;
@Mock
private TechnologyServiceO technologyServiceO;
@Mock
private Entity productEntity, defaultTechnologyEntity, masterOrderEntity;
@Mock
private ComponentState borderLayoutProductQuantity;
@Before
public void init() {
masterOrderDetailsHooks = new MasterOrderDetailsHooks();
MockitoAnnotations.initMocks(this);
ReflectionTestUtils.setField(masterOrderDetailsHooks, "technologyServiceO", technologyServiceO);
ReflectionTestUtils.setField(masterOrderDetailsHooks, "expressionService", expressionService);
given(view.getComponentByReference("form")).willReturn(form);
given(view.getComponentByReference(MasterOrderFields.MASTER_ORDER_TYPE)).willReturn(masterOrderTypeField);
given(view.getComponentByReference(MasterOrderFields.PRODUCT)).willReturn(productField);
given(view.getComponentByReference(MasterOrderFields.TECHNOLOGY)).willReturn(technologyField);
given(view.getComponentByReference(MasterOrderFields.DEFAULT_TECHNOLOGY)).willReturn(defaultTechnologyField);
given(view.getComponentByReference(MasterOrderFields.CUMULATED_ORDER_QUANTITY)).willReturn(cumulatedQuantityField);
given(view.getComponentByReference(MasterOrderFields.MASTER_ORDER_QUANTITY)).willReturn(masterOrderQuantityField);
given(view.getComponentByReference("producedOrderQuantity")).willReturn(producedOrderQuantityField);
given(view.getComponentByReference(MasterOrderFields.MASTER_ORDER_PRODUCTS)).willReturn(masterOrderProducts);
given(view.getComponentByReference("borderLayoutProductQuantity")).willReturn(borderLayoutProductQuantity);
given(view.getComponentByReference("cumulatedOrderQuantityUnit")).willReturn(cumulatedOrderQuantityUnitField);
given(view.getComponentByReference("masterOrderQuantityUnit")).willReturn(masterOrderQuantityUnitField);
given(view.getComponentByReference("producedOrderQuantityUnit")).willReturn(producedOrderQuantityUnitField);
given(view.getComponentByReference("leftToReleaseUnit")).willReturn(leftToReleaseUnit);
given(view.getComponentByReference("leftToRelease")).willReturn(leftToRelease);
given(view.getComponentByReference("comments")).willReturn(comments);
given(view.getComponentByReference("masterOrderPositionStatus")).willReturn(masterOrderPositionStatus);
WindowComponentState windowComponent = mock(WindowComponentState.class);
mockRibbon(windowComponent);
}
private void mockRibbon(final WindowComponentState windowComponent) {
given(view.getComponentByReference("window")).willReturn(windowComponent);
Ribbon ribbon = mock(Ribbon.class);
given(windowComponent.getRibbon()).willReturn(ribbon);
RibbonGroup ordersRibbonGroup = mock(RibbonGroup.class);
given(ribbon.getGroupByName("orders")).willReturn(ordersRibbonGroup);
RibbonActionItem createOrderButton = mock(RibbonActionItem.class);
given(ordersRibbonGroup.getItemByName("createOrder")).willReturn(createOrderButton);
}
@Test
public final void shouldInvisibleFieldWhenMasterOrderTypeValueIsEmty() {
given(masterOrderTypeField.getFieldValue()).willReturn(null);
// given
masterOrderDetailsHooks.hideFieldDependOnMasterOrderType(view);
// then
Mockito.verify(productField).setVisible(false);
Mockito.verify(defaultTechnologyField).setVisible(false);
Mockito.verify(cumulatedQuantityField).setVisible(false);
Mockito.verify(technologyField).setVisible(false);
Mockito.verify(masterOrderQuantityField).setVisible(false);
Mockito.verify(borderLayoutProductQuantity).setVisible(false);
Mockito.verify(masterOrderProducts).setVisible(false);
}
@Test
public final void shouldInvisibleFieldWhenMasterOrderTypeIsManyProducts() {
// given
given(masterOrderTypeField.getFieldValue()).willReturn(MasterOrderType.MANY_PRODUCTS.getStringValue());
// given
masterOrderDetailsHooks.hideFieldDependOnMasterOrderType(view);
// then
Mockito.verify(productField).setVisible(false);
Mockito.verify(defaultTechnologyField).setVisible(false);
Mockito.verify(cumulatedQuantityField).setVisible(false);
Mockito.verify(technologyField).setVisible(false);
Mockito.verify(masterOrderQuantityField).setVisible(false);
Mockito.verify(borderLayoutProductQuantity).setVisible(false);
Mockito.verify(masterOrderProducts).setVisible(true);
}
@Test
public final void shouldInvisibleFieldWhenMasterOrderTypeIsUndefined() {
// given
given(masterOrderTypeField.getFieldValue()).willReturn(MasterOrderType.UNDEFINED.getStringValue());
// given
masterOrderDetailsHooks.hideFieldDependOnMasterOrderType(view);
// then
Mockito.verify(productField).setVisible(false);
Mockito.verify(defaultTechnologyField).setVisible(false);
Mockito.verify(cumulatedQuantityField).setVisible(false);
Mockito.verify(technologyField).setVisible(false);
Mockito.verify(masterOrderQuantityField).setVisible(false);
Mockito.verify(borderLayoutProductQuantity).setVisible(false);
Mockito.verify(masterOrderProducts).setVisible(false);
}
@Test
public final void shouldVisibleFieldWhenMasterOrderTypeIsOnProduct() {
// given
given(masterOrderTypeField.getFieldValue()).willReturn(MasterOrderType.ONE_PRODUCT.getStringValue());
// given
masterOrderDetailsHooks.hideFieldDependOnMasterOrderType(view);
// then
verify(productField).setVisible(true);
verify(defaultTechnologyField).setVisible(true);
verify(cumulatedQuantityField).setVisible(true);
verify(technologyField).setVisible(true);
verify(masterOrderQuantityField).setVisible(true);
verify(borderLayoutProductQuantity).setVisible(true);
verify(masterOrderProducts).setVisible(false);
}
@Test
public final void shouldFillDefaultTechnologyIfExists() {
// given
String defaultTechnologyExpression = "00001 - Tech-1";
given(productField.getEntity()).willReturn(productEntity);
given(technologyServiceO.getDefaultTechnology(productEntity)).willReturn(defaultTechnologyEntity);
given(view.getLocale()).willReturn(Locale.getDefault());
given(expressionService.getValue(defaultTechnologyEntity, "#number + ' - ' + #name", Locale.getDefault())).willReturn(
defaultTechnologyExpression);
// given
masterOrderDetailsHooks.fillDefaultTechnology(view);
// then
verify(defaultTechnologyField).setFieldValue(defaultTechnologyExpression);
}
@Test
public final void shouldFillNullWhenDefaultTechnlogyDoesnotExists() {
// given
given(productField.getEntity()).willReturn(null);
// given
masterOrderDetailsHooks.fillDefaultTechnology(view);
// then
verify(defaultTechnologyField).setFieldValue(null);
}
@Test
public final void shouldShowMessageError() {
// given
BigDecimal cumulatedQuantity = BigDecimal.ONE;
BigDecimal masterQuantity = BigDecimal.TEN;
String masterOrderType = "02oneProduct";
given(form.getEntity()).willReturn(masterOrderEntity);
given(masterOrderEntity.getStringField(MasterOrderFields.MASTER_ORDER_TYPE)).willReturn(masterOrderType);
given(masterOrderEntity.getDecimalField(MASTER_ORDER_QUANTITY)).willReturn(masterQuantity);
given(masterOrderEntity.getDecimalField(CUMULATED_ORDER_QUANTITY)).willReturn(cumulatedQuantity);
// when
masterOrderDetailsHooks.showErrorWhenCumulatedQuantity(view);
// then
verify(form).addMessage("masterOrders.masterOrder.masterOrderCumulatedQuantityField.wrongQuantity", MessageType.INFO,
false);
}
@Test
public final void shouldDonotShowMessageError() {
// given
BigDecimal cumulatedQuantity = BigDecimal.TEN;
BigDecimal masterQuantity = BigDecimal.ONE;
String masterOrderType = "02oneProduct";
given(form.getEntity()).willReturn(masterOrderEntity);
given(masterOrderEntity.getStringField(MasterOrderFields.MASTER_ORDER_TYPE)).willReturn(masterOrderType);
given(masterOrderEntity.getDecimalField(MASTER_ORDER_QUANTITY)).willReturn(masterQuantity);
given(masterOrderEntity.getDecimalField(CUMULATED_ORDER_QUANTITY)).willReturn(cumulatedQuantity);
// when
masterOrderDetailsHooks.showErrorWhenCumulatedQuantity(view);
// then
verify(form, Mockito.never()).addMessage("masterOrders.masterOrder.masterOrderCumulatedQuantityField.wrongQuantity",
MessageType.INFO, false);
}
@Test
public final void shouldSetNullToUnitField() {
// given
given(productField.getEntity()).willReturn(null);
// when
masterOrderDetailsHooks.fillUnitField(view);
// then
verify(masterOrderQuantityUnitField).setFieldValue(null);
verify(cumulatedOrderQuantityUnitField).setFieldValue(null);
}
@Test
public final void shouldSetproductUnitToField() {
String unit = "szt";
// given
given(productField.getEntity()).willReturn(productEntity);
given(productEntity.getStringField("unit")).willReturn(unit);
// when
masterOrderDetailsHooks.fillUnitField(view);
// then
verify(masterOrderQuantityUnitField).setFieldValue(unit);
verify(cumulatedOrderQuantityUnitField).setFieldValue(unit);
}
}