package org.bonitasoft.web.rest.server.api.form; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import org.bonitasoft.engine.api.ProcessAPI; import org.bonitasoft.engine.form.FormMapping; import org.bonitasoft.engine.search.SearchOptions; import org.bonitasoft.engine.search.SearchResult; import org.bonitasoft.web.rest.server.utils.RestletTest; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.restlet.Response; import org.restlet.data.Status; import org.restlet.resource.ServerResource; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.List; @RunWith(MockitoJUnitRunner.class) public class FormMappingResourceTest extends RestletTest { @Mock protected ProcessAPI processAPI; @Override protected ServerResource configureResource() { return new FormMappingResource(processAPI); } @Test public void searchFormMappingShouldReturnContentRange() throws Exception { final SearchResult<FormMapping> searchResult = mock(SearchResult.class); final FormMapping formMapping = mock(FormMapping.class); final List<FormMapping> formMappings = new ArrayList<>(); formMappings.add(formMapping); doReturn(formMappings).when(searchResult).getResult(); doReturn(1L).when(searchResult).getCount(); doReturn(searchResult).when(processAPI).searchFormMappings(any(SearchOptions.class)); final Response response = request("/form/mapping?p=2&c=10&f=type=TASK").get(); assertThat(response.getStatus()).isEqualTo(Status.SUCCESS_OK); assertThat(response.getHeaders().getFirstValue("Content-range")).isEqualTo("2-10/1"); } @Test public void searchFormMappingShouldReturnMapping() throws Exception { final SearchResult<FormMapping> searchResult = mock(SearchResult.class); final FormMapping formMapping = new FormMapping(); formMapping.setTask("myTask"); final List<FormMapping> formMappings = new ArrayList<>(); formMappings.add(formMapping); doReturn(formMappings).when(searchResult).getResult(); doReturn(1L).when(searchResult).getCount(); doReturn(searchResult).when(processAPI).searchFormMappings(any(SearchOptions.class)); final Response response = request("/form/mapping?p=0&c=10").get(); assertThat(response.getStatus()).isEqualTo(Status.SUCCESS_OK); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); response.getEntity().write(outputStream); final String content = outputStream.toString(); outputStream.close(); assertThat(content).isNotNull(); assertThat(content).contains("\"task\":\"myTask\""); verify(processAPI).searchFormMappings(any(SearchOptions.class)); } @Test public void searchFormMappingShouldReturnLongIdAsString() throws Exception { final SearchResult<FormMapping> searchResult = mock(SearchResult.class); final FormMapping formMapping = new FormMapping(); formMapping.setId(11125555888888L); formMapping.setTask("myTask"); formMapping.setProcessDefinitionId(4871148324840256385L); formMapping.setPageId(1L); formMapping.setLastUpdatedBy(1L); final List<FormMapping> formMappings = new ArrayList<>(); formMappings.add(formMapping); doReturn(formMappings).when(searchResult).getResult(); doReturn(1L).when(searchResult).getCount(); doReturn(searchResult).when(processAPI).searchFormMappings(any(SearchOptions.class)); final Response response = request("/form/mapping?p=0&c=10").get(); assertThat(response.getStatus()).isEqualTo(Status.SUCCESS_OK); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); response.getEntity().write(outputStream); final String content = outputStream.toString(); outputStream.close(); assertThat(content).isNotNull(); assertThat(content).contains("\"id\":\"11125555888888\""); assertThat(content).contains("\"processDefinitionId\":\"4871148324840256385\""); assertThat(content).contains("\"pageId\":\"1\""); assertThat(content).contains("\"lastUpdatedBy\":\"1\""); verify(processAPI).searchFormMappings(any(SearchOptions.class)); } }