/** * Copyright (C) 2012 BonitaSoft S.A. * BonitaSoft, 32 rue Gustave Eiffel - 38000 Grenoble * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 2.0 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.bonitasoft.web.rest.server.datastore.bpm.connector; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import junit.framework.Assert; import org.bonitasoft.console.common.server.i18n.I18n; import org.bonitasoft.engine.api.ProcessAPI; import org.bonitasoft.engine.bpm.connector.ConnectorEvent; import org.bonitasoft.engine.bpm.connector.ConnectorInstance; import org.bonitasoft.engine.bpm.connector.ConnectorState; import org.bonitasoft.engine.bpm.connector.impl.ConnectorInstanceImpl; import org.bonitasoft.engine.search.Order; import org.bonitasoft.engine.search.SearchOptions; import org.bonitasoft.engine.search.SearchResult; import org.bonitasoft.engine.search.impl.SearchResultImpl; import org.bonitasoft.web.rest.model.bpm.connector.ConnectorInstanceItem; import org.bonitasoft.web.rest.server.BonitaRestAPIServlet; import org.bonitasoft.web.rest.server.framework.search.ItemSearchResult; import org.bonitasoft.web.toolkit.client.data.item.Item; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.Spy; /** * @author Vincent Elcrin * */ public class ConnectorInstanceDatastoreTest { @Spy private final ConnectorInstanceDatastore spiedDatastore = new ConnectorInstanceDatastore(null); @Mock private ProcessAPI mockedProcessAPI; @BeforeClass public static void initEnvironnement() { I18n.getInstance(); new BonitaRestAPIServlet(); } @Before public void init() { MockitoAnnotations.initMocks(this); Mockito.doReturn(this.mockedProcessAPI).when(this.spiedDatastore).getProcessAPI(); } // ////////////////////////////////////////////////////////////////////////// // / Test search // ////////////////////////////////////////////////////////////////////////// /** * Test right parameters go through engine API call method * * @throws Exception */ @Test public void searchBuildRightParameters() throws Exception { final Map<String, String> filters = new HashMap<String, String>(); filters.put(ConnectorInstanceItem.ATTRIBUTE_CONTAINER_ID, "1"); filters.put(ConnectorInstanceItem.ATTRIBUTE_STATE, "2"); final SearchOptions searchOptions = this.spiedDatastore.buildSearchOptions(0, 123, "searchTerm", "order " + Order.ASC, filters); Assert.assertEquals(0, searchOptions.getStartIndex()); Assert.assertEquals(123, searchOptions.getMaxResults()); Assert.assertEquals("searchTerm", searchOptions.getSearchTerm()); Assert.assertEquals("order", searchOptions.getSorts().get(0).getField()); Assert.assertEquals(Order.ASC, searchOptions.getSorts().get(0).getOrder()); Assert.assertEquals(filters.size(), searchOptions.getFilters().size()); } /** * Test search result conversion * * @throws Exception */ @Test public void searchReturnAllItems() throws Exception { final ConnectorInstance connectorInstance1 = createConnectorInstanceImpl(1L, "instance 1"); final ConnectorInstance connectorInstance2 = createConnectorInstanceImpl(1L, "instance 2"); final SearchResult<ConnectorInstance> expected = new SearchResultImpl<ConnectorInstance>(2, Arrays.asList(connectorInstance1, connectorInstance2)); Mockito.when(this.mockedProcessAPI.searchConnectorInstances(Mockito.any(SearchOptions.class))).thenReturn(expected); final ItemSearchResult<ConnectorInstanceItem> searchResult = this.spiedDatastore.search(0, 10, null, null, new HashMap<String, String>()); Mockito.verify(this.mockedProcessAPI).searchConnectorInstances(Mockito.any(SearchOptions.class)); Assert.assertTrue(areEquals(new ConnectorInstanceItemWrapper(expected.getResult().get(0)), searchResult.getResults().get(0))); Assert.assertTrue(areEquals(new ConnectorInstanceItemWrapper(expected.getResult().get(1)), searchResult.getResults().get(1))); } // ////////////////////////////////////////////////////////////////////////// // / Convenient tools // ////////////////////////////////////////////////////////////////////////// private boolean areEquals(final Item expected, final Item actual) { return expected.getAttributes().equals(actual.getAttributes()); } private ConnectorInstance createConnectorInstanceImpl(final long id, final String name) { final ConnectorInstanceImpl connectorInstance = new ConnectorInstanceImpl(name, 2L, "containerType", String.valueOf(id), "version", ConnectorState.DONE, ConnectorEvent.ON_ENTER); connectorInstance.setId(1L); return connectorInstance; } }