/** * *************************************************************************** * Copyright (c) 2010 Qcadoo Limited * Project: Qcadoo MES * Version: 1.2.0 * * 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.genealogies; import static org.junit.Assert.assertNotNull; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.RETURNS_DEEP_STUBS; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.springframework.test.util.ReflectionTestUtils.setField; import java.util.ArrayList; import java.util.List; import java.util.Locale; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.springframework.transaction.interceptor.TransactionAspectSupport; import com.qcadoo.mes.basic.constants.BasicConstants; import com.qcadoo.mes.genealogies.constants.GenealogiesConstants; import com.qcadoo.mes.orders.constants.OrdersConstants; import com.qcadoo.model.api.DataDefinition; import com.qcadoo.model.api.DataDefinitionService; import com.qcadoo.model.api.Entity; import com.qcadoo.model.api.search.SearchRestrictions; import com.qcadoo.model.internal.DefaultEntity; import com.qcadoo.plugin.api.PluginManager; import com.qcadoo.security.api.SecurityService; 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.FormComponent; @RunWith(PowerMockRunner.class) @PrepareForTest({ GenealogyService.class, TransactionAspectSupport.class, SearchRestrictions.class }) public class AutoGenealogyServiceTest { private AutoGenealogyService autoGenealogyService; private DataDefinitionService dataDefinitionService; private SecurityService securityService; private PluginManager pluginManager; @Before public void init() { dataDefinitionService = mock(DataDefinitionService.class, RETURNS_DEEP_STUBS); securityService = mock(SecurityService.class); pluginManager = mock(PluginManager.class); autoGenealogyService = new AutoGenealogyService(); setField(autoGenealogyService, "dataDefinitionService", dataDefinitionService); setField(autoGenealogyService, "securityService", securityService); setField(autoGenealogyService, "pluginManager", pluginManager); given(pluginManager.isPluginEnabled("genealogiesForComponents")).willReturn(true); } @Test public void shouldFailAutoCreateGenealogyIfNoRowIsSelected() throws Exception { // given ComponentState state = mock(ComponentState.class); given(state.getFieldValue()).willReturn(null); ViewDefinitionState viewDefinitionState = mock(ViewDefinitionState.class); given(viewDefinitionState.getLocale()).willReturn(Locale.ENGLISH); // when autoGenealogyService.autocompleteGenealogy(viewDefinitionState, state, new String[] { "false" }); // then verify(state).addMessage("qcadooView.grid.noRowSelectedError", MessageType.FAILURE); } @Test public void shouldFailAutoCreateGenealogyIfFormHasNoIdentifier() throws Exception { // given FormComponent state = mock(FormComponent.class); given(state.getFieldValue()).willReturn(null); ViewDefinitionState viewDefinitionState = mock(ViewDefinitionState.class); given(viewDefinitionState.getLocale()).willReturn(Locale.ENGLISH); // when autoGenealogyService.autocompleteGenealogy(viewDefinitionState, state, new String[] { "false" }); // then verify(state).addMessage("qcadooView.form.entityWithoutIdentifier", MessageType.FAILURE); } @Test public void shouldFailAutoCreateGenealogyIfOrderIsNull() { // given ComponentState state = mock(ComponentState.class); given(state.getFieldValue()).willReturn(13L); ViewDefinitionState viewDefinitionState = mock(ViewDefinitionState.class); given(viewDefinitionState.getLocale()).willReturn(Locale.ENGLISH); given(dataDefinitionService.get(OrdersConstants.PLUGIN_IDENTIFIER, OrdersConstants.MODEL_ORDER).get(13L)) .willReturn(null); // when autoGenealogyService.autocompleteGenealogy(viewDefinitionState, state, new String[] { "false" }); // then verify(state, times(2)).getFieldValue(); verify(state).addMessage("qcadooView.message.entityNotFound", MessageType.FAILURE); } @Test public void shouldFillLastUsedShiftFeature() { // given DataDefinition dataDefinition = mock(DataDefinition.class); Entity entity = new DefaultEntity(dataDefinition); Entity feature = mock(Entity.class); List<Entity> featureEntities = new ArrayList<Entity>(); featureEntities.add(feature); given( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities()).willReturn(featureEntities); given(securityService.getCurrentUserName()).willReturn("newTest"); // when autoGenealogyService.fillLastUsedShiftFeature(dataDefinition, entity); // then verify( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities().get(0)).setField(anyString(), anyString()); verify(dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE)) .save(any(Entity.class)); assertNotNull(entity.getField("date")); assertNotNull(entity.getField("worker")); } @Test public void shouldFailFillLastUsedShiftFeature() { // given DataDefinition dataDefinition = mock(DataDefinition.class); Entity entity = new DefaultEntity(dataDefinition); given( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities()).willReturn(new ArrayList<Entity>()); given(securityService.getCurrentUserName()).willReturn("newTest"); // when autoGenealogyService.fillLastUsedShiftFeature(dataDefinition, entity); // then verify(dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE), never()).save(any(Entity.class)); } @Test public void shouldFillLastUsedOtherFeature() { // given DataDefinition dataDefinition = mock(DataDefinition.class); Entity entity = new DefaultEntity(dataDefinition); Entity feature = mock(Entity.class); List<Entity> featureEntities = new ArrayList<Entity>(); featureEntities.add(feature); given( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities()).willReturn(featureEntities); given(securityService.getCurrentUserName()).willReturn("newTest"); // when autoGenealogyService.fillLastUsedOtherFeature(dataDefinition, entity); // then verify( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities().get(0)).setField(anyString(), anyString()); verify(dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE)) .save(any(Entity.class)); assertNotNull(entity.getField("date")); assertNotNull(entity.getField("worker")); } @Test public void shouldFailFillLastUsedOtherFeature() { // given DataDefinition dataDefinition = mock(DataDefinition.class); Entity entity = new DefaultEntity(dataDefinition); given( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities()).willReturn(new ArrayList<Entity>()); given(securityService.getCurrentUserName()).willReturn("newTest"); // when autoGenealogyService.fillLastUsedOtherFeature(dataDefinition, entity); // then verify(dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE), never()).save(any(Entity.class)); } @Test public void shouldFillLastUsedPostFeature() { // given DataDefinition dataDefinition = mock(DataDefinition.class); Entity entity = new DefaultEntity(dataDefinition); Entity feature = mock(Entity.class); List<Entity> featureEntities = new ArrayList<Entity>(); featureEntities.add(feature); given( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities()).willReturn(featureEntities); given(securityService.getCurrentUserName()).willReturn("newTest"); // when autoGenealogyService.fillLastUsedPostFeature(dataDefinition, entity); // then verify( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities().get(0)).setField(anyString(), anyString()); verify(dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE)) .save(any(Entity.class)); assertNotNull(entity.getField("date")); assertNotNull(entity.getField("worker")); } @Test public void shouldFailFillLastUsedPostFeature() { // given DataDefinition dataDefinition = mock(DataDefinition.class); Entity entity = new DefaultEntity(dataDefinition); given( dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE) .find().setMaxResults(1).list().getEntities()).willReturn(new ArrayList<Entity>()); given(securityService.getCurrentUserName()).willReturn("newTest"); // when autoGenealogyService.fillLastUsedPostFeature(dataDefinition, entity); // then verify(dataDefinitionService.get(GenealogiesConstants.PLUGIN_IDENTIFIER, GenealogiesConstants.MODEL_CURRENT_ATTRIBUTE), never()).save(any(Entity.class)); } @Test public void shouldFillLastUsedBatchForProduct() { // given Entity entity = mock(Entity.class, RETURNS_DEEP_STUBS); given(entity.getField("date")).willReturn(null); given(entity.getField("worker")).willReturn(null); DataDefinition dataDefinition = mock(DataDefinition.class); given(securityService.getCurrentUserName()).willReturn("newTest"); // when autoGenealogyService.fillLastUsedBatchForProduct(dataDefinition, entity); // then verify(entity, times(2)).setField(anyString(), any()); verify(dataDefinitionService.get(BasicConstants.PLUGIN_IDENTIFIER, BasicConstants.MODEL_PRODUCT).get(anyLong())) .setField(anyString(), anyString()); verify(dataDefinitionService.get(BasicConstants.PLUGIN_IDENTIFIER, BasicConstants.MODEL_PRODUCT)).save(any(Entity.class)); } @Test public void shouldFillLastUsedBatchForGenealogyWithoutFillUserAndDate() { // given Entity entity = mock(Entity.class, RETURNS_DEEP_STUBS); DataDefinition dataDefinition = mock(DataDefinition.class); given(securityService.getCurrentUserName()).willReturn("newTest"); // when autoGenealogyService.fillLastUsedBatchForGenealogy(dataDefinition, entity); // then verify(dataDefinitionService.get(BasicConstants.PLUGIN_IDENTIFIER, BasicConstants.MODEL_PRODUCT).get(anyLong())) .setField(anyString(), anyString()); verify(dataDefinitionService.get(BasicConstants.PLUGIN_IDENTIFIER, BasicConstants.MODEL_PRODUCT)).save(any(Entity.class)); } }