package org.bonitasoft.web.rest.server.datastore.bpm.flownode;
import static org.assertj.core.api.Assertions.*;
import static org.mockito.Mockito.*;
import java.util.HashMap;
import java.util.Map;
import org.bonitasoft.engine.bpm.flownode.FlowNodeInstance;
import org.bonitasoft.engine.bpm.flownode.FlowNodeInstanceSearchDescriptor;
import org.bonitasoft.engine.search.SearchFilterOperation;
import org.bonitasoft.engine.search.SearchOptionsBuilder;
import org.bonitasoft.engine.session.APISession;
import org.bonitasoft.web.rest.model.bpm.flownode.FlowNodeItem;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class AbstractFlowNodeDatastoreTest {
AbstractFlowNodeDatastore<FlowNodeItem, FlowNodeInstance> datastore;
@Before
public void setUp() throws Exception {
final APISession engineSession = mock(APISession.class);
datastore = new AbstractFlowNodeDatastore<FlowNodeItem, FlowNodeInstance>(engineSession);
}
@Test
public void makeSearchOptionBuilder_state_Filter_Pending_Adds_multiple_entries_in_SearchOption() throws Exception {
final Map<String, String> filters = new HashMap<String, String>();
filters.put(FlowNodeInstanceSearchDescriptor.STATE_NAME, "pending");
final SearchOptionsBuilder makeSearchOptionBuilder = datastore.makeSearchOptionBuilder(0, 10, "", "", filters);
assertThat(makeSearchOptionBuilder.done().getFilters()).extracting("field", "operation", "value").contains(
tuple(null, SearchFilterOperation.L_PARENTHESIS, null),
tuple("state", SearchFilterOperation.EQUALS, "ready"),
tuple(null, SearchFilterOperation.OR, null),
tuple("state", SearchFilterOperation.EQUALS, "waiting"),
tuple(null, SearchFilterOperation.R_PARENTHESIS, null),
tuple("state", SearchFilterOperation.DIFFERENT, "aborted"),
tuple("state", SearchFilterOperation.DIFFERENT, "cancelled"),
tuple("state", SearchFilterOperation.DIFFERENT, "completed")
);
}
@Test
public void makeSearchOptionBuilder_state_Filter_Ongoing_Adds_multiple_entries_in_SearchOption() throws Exception {
final Map<String, String> filters = new HashMap<String, String>();
filters.put(FlowNodeInstanceSearchDescriptor.STATE_NAME, "ongoing");
final SearchOptionsBuilder makeSearchOptionBuilder = datastore.makeSearchOptionBuilder(0, 10, "", "", filters);
assertThat(makeSearchOptionBuilder.done().getFilters()).extracting("field", "operation", "value").contains(
tuple(null, SearchFilterOperation.L_PARENTHESIS, null),
tuple("state", SearchFilterOperation.EQUALS, "executing"),
tuple(null, SearchFilterOperation.OR, null),
tuple("state", SearchFilterOperation.EQUALS, "completing"),
tuple(null, SearchFilterOperation.OR, null),
tuple("state", SearchFilterOperation.EQUALS, "initializing"),
tuple(null, SearchFilterOperation.R_PARENTHESIS, null),
tuple("state", SearchFilterOperation.DIFFERENT, "aborted"),
tuple("state", SearchFilterOperation.DIFFERENT, "cancelled"),
tuple("state", SearchFilterOperation.DIFFERENT, "completed")
);
}
@Test
public void makeSearchOptionBuilder_state_Filter_Ready_Adds_single_entries_in_SearchOption() throws Exception {
final Map<String, String> filters = new HashMap<String, String>();
filters.put(FlowNodeInstanceSearchDescriptor.STATE_NAME, "ready");
final SearchOptionsBuilder makeSearchOptionBuilder = datastore.makeSearchOptionBuilder(0, 10, "", "", filters);
assertThat(makeSearchOptionBuilder.done().getFilters()).extracting("field", "operation", "value").contains(
tuple("state", SearchFilterOperation.EQUALS, "ready"),
tuple("state", SearchFilterOperation.DIFFERENT, "aborted"),
tuple("state", SearchFilterOperation.DIFFERENT, "cancelled"),
tuple("state", SearchFilterOperation.DIFFERENT, "completed")
);
}
@Test
public void makeSearchOptionBuilder_without_state_Filter_Adds_only_Unwanted_state_SearchOption() throws Exception {
final Map<String, String> filters = new HashMap<String, String>();
filters.put(FlowNodeInstanceSearchDescriptor.STATE_NAME, "ready");
final SearchOptionsBuilder makeSearchOptionBuilder = datastore.makeSearchOptionBuilder(0, 10, "", "", filters);
assertThat(makeSearchOptionBuilder.done().getFilters()).extracting("field", "operation", "value").contains(
tuple("state", SearchFilterOperation.DIFFERENT, "aborted"),
tuple("state", SearchFilterOperation.DIFFERENT, "cancelled"),
tuple("state", SearchFilterOperation.DIFFERENT, "completed")
);
}
}