/**
* This Source Code Form is subject to the terms of the Mozilla Public License,
* v. 2.0. If a copy of the MPL was not distributed with this file, You can
* obtain one at http://mozilla.org/MPL/2.0/. OpenMRS is also distributed under
* the terms of the Healthcare Disclaimer located at http://openmrs.org/license.
*
* Copyright (C) OpenMRS Inc. OpenMRS is a registered trademark and the OpenMRS
* graphic logo is a trademark of OpenMRS Inc.
*/
package org.openmrs.module.radiology.report.template.web.search;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
import org.junit.Before;
import org.junit.Test;
import org.openmrs.module.radiology.report.template.MrrtReportTemplateSearchCriteria;
import org.openmrs.module.radiology.report.template.MrrtReportTemplateService;
import org.openmrs.module.webservices.rest.SimpleObject;
import org.openmrs.module.webservices.rest.web.RequestContext;
import org.openmrs.module.webservices.rest.web.representation.Representation;
import org.openmrs.module.webservices.rest.web.response.ResourceDoesNotSupportOperationException;
import org.openmrs.module.webservices.rest.web.v1_0.controller.MainResourceControllerTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Tests {@link MrrtReportTemplateSearchHandler}
*/
public class MrrtReportTemplateSearchHandlerComponentTest extends MainResourceControllerTest {
private static final String TEST_DATASET = "MrrtReportTemplateSearchHandlerComponentTestDataset.xml";
private static final String MRRT_REPORT_TEMPLATE_UUID = "2379d290-96f7-408a-bbae-270387e3b92e";
private static final String NON_EXISTING_TITLE = "invalid title";
private static final String TITLE_QUERY = "Cardiac MRI";
private static final String PUBLISHER_QUERY = "IHE CAT Publisher";
private static final String NON_EXISTING_PUBLISHER = "Non existing publisher";
private static final String LICENSE_QUERY = "General Public License";
private static final String NON_EXISTING_LICENSE = "Non existing license";
private static final String CREATOR_QUERY = "creator1";
private static final String NON_EXISTING_CREATOR = "Non existing creator";
@Autowired
MrrtReportTemplateService mrrtReportTemplateService;
@Before
public void setUp() throws Exception {
executeDataSet(TEST_DATASET);
}
@Override
public long getAllCount() {
return 0;
}
@Override
public String getURI() {
return "mrrtreporttemplate";
}
@Override
public String getUuid() {
return MRRT_REPORT_TEMPLATE_UUID;
}
/**
* @see MainResourceControllerTest#shouldGetAll()
*/
@Override
@Test(expected = ResourceDoesNotSupportOperationException.class)
public void shouldGetAll() throws Exception {
deserialize(handle(request(RequestMethod.GET, getURI())));
}
@Test
public void shouldReturnEmptySearchResultIfTitleDoesNotExist() throws Exception {
MockHttpServletRequest mockRequest = request(RequestMethod.GET, getURI());
mockRequest.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_TITLE, NON_EXISTING_TITLE);
SimpleObject resultMrrtReportTemplate = deserialize(handle(mockRequest));
assertNotNull(resultMrrtReportTemplate);
List<Object> hits = (List<Object>) resultMrrtReportTemplate.get("results");
assertThat(hits.size(), is(0));
}
@Test
public void shouldReturnAllReportTemplatesThatMatchGivenTitle() throws Exception {
MockHttpServletRequest mrrtReportTemplateRequest = request(RequestMethod.GET, getURI());
mrrtReportTemplateRequest.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_TITLE, TITLE_QUERY);
mrrtReportTemplateRequest.setParameter("v", Representation.FULL.getRepresentation());
SimpleObject resultMrrtReportTemplate = deserialize(handle(mrrtReportTemplateRequest));
assertNotNull(resultMrrtReportTemplate);
List<Object> hits = (List<Object>) resultMrrtReportTemplate.get("results");
MrrtReportTemplateSearchCriteria searchCriteria =
new MrrtReportTemplateSearchCriteria.Builder().withTitle(TITLE_QUERY)
.build();
assertThat(hits.size(), is(2));
assertThat(PropertyUtils.getProperty(hits.get(0), "uuid"),
is(mrrtReportTemplateService.getMrrtReportTemplates(searchCriteria)
.get(0)
.getUuid()));
assertNull(PropertyUtils.getProperty(resultMrrtReportTemplate, "totalCount"));
}
@Test
public void shouldReturnAllMrrtTemplatesThatMatchGivenTitleAndTotalCountIfRequested() throws Exception {
MockHttpServletRequest requestMrrtReportTemplate = request(RequestMethod.GET, getURI());
requestMrrtReportTemplate.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_TITLE, TITLE_QUERY);
requestMrrtReportTemplate.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_TOTAL_COUNT, "true");
SimpleObject resultMrrtReportTemplate = deserialize(handle(requestMrrtReportTemplate));
assertNotNull(resultMrrtReportTemplate);
assertThat(PropertyUtils.getProperty(resultMrrtReportTemplate, "totalCount"), is(2));
}
@Test
public void shouldReturnAllReportTemplatesByGivenPublisher() throws Exception {
MockHttpServletRequest mrrtReportTemplateRequest = request(RequestMethod.GET, getURI());
mrrtReportTemplateRequest.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_PUBLISHER, PUBLISHER_QUERY);
SimpleObject resultMrrtReportTemplate = deserialize(handle(mrrtReportTemplateRequest));
assertNotNull(resultMrrtReportTemplate);
List<Object> hits = (List<Object>) resultMrrtReportTemplate.get("results");
MrrtReportTemplateSearchCriteria searchCriteria =
new MrrtReportTemplateSearchCriteria.Builder().withPublisher(PUBLISHER_QUERY)
.build();
assertThat(hits.size(), is(1));
assertThat(PropertyUtils.getProperty(hits.get(0), "uuid"),
is(mrrtReportTemplateService.getMrrtReportTemplates(searchCriteria)
.get(0)
.getUuid()));
assertNull(PropertyUtils.getProperty(resultMrrtReportTemplate, "totalCount"));
}
/**
* @see MrrtReportTemplateSearchHandler#search(RequestContext)
*/
@Test
public void shouldReturnEmptySearchResultIfPublisherDoesNotExist() throws Exception {
MockHttpServletRequest mockRequest = request(RequestMethod.GET, getURI());
mockRequest.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_PUBLISHER, NON_EXISTING_PUBLISHER);
SimpleObject resultMrrtReportTemplate = deserialize(handle(mockRequest));
assertNotNull(resultMrrtReportTemplate);
List<Object> hits = (List<Object>) resultMrrtReportTemplate.get("results");
assertThat(hits.size(), is(0));
}
@Test
public void shouldReturnAllReportTemplatesThatMatchGivenLicense() throws Exception {
MockHttpServletRequest mrrtReportTemplateRequest = request(RequestMethod.GET, getURI());
mrrtReportTemplateRequest.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_LICENSE, LICENSE_QUERY);
SimpleObject resultMrrtReportTemplate = deserialize(handle(mrrtReportTemplateRequest));
assertNotNull(resultMrrtReportTemplate);
List<Object> hits = (List<Object>) resultMrrtReportTemplate.get("results");
MrrtReportTemplateSearchCriteria searchCriteria =
new MrrtReportTemplateSearchCriteria.Builder().withLicense(LICENSE_QUERY)
.build();
assertThat(hits.size(), is(1));
assertThat(PropertyUtils.getProperty(hits.get(0), "uuid"),
is(mrrtReportTemplateService.getMrrtReportTemplates(searchCriteria)
.get(0)
.getUuid()));
assertNull(PropertyUtils.getProperty(resultMrrtReportTemplate, "totalCount"));
}
@Test
public void shouldReturnEmptySearchResultIfLicenseDoesNotExist() throws Exception {
MockHttpServletRequest mockRequest = request(RequestMethod.GET, getURI());
mockRequest.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_LICENSE, NON_EXISTING_LICENSE);
SimpleObject resultMrrtReportTemplate = deserialize(handle(mockRequest));
assertNotNull(resultMrrtReportTemplate);
List<Object> hits = (List<Object>) resultMrrtReportTemplate.get("results");
assertThat(hits.size(), is(0));
}
@Test
public void shouldReturnAllReportTemplatesThatMatchGivenCreator() throws Exception {
MockHttpServletRequest mrrtReportTemplateRequest = request(RequestMethod.GET, getURI());
mrrtReportTemplateRequest.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_CREATOR, CREATOR_QUERY);
SimpleObject resultMrrtReportTemplate = deserialize(handle(mrrtReportTemplateRequest));
assertNotNull(resultMrrtReportTemplate);
List<Object> hits = (List<Object>) resultMrrtReportTemplate.get("results");
MrrtReportTemplateSearchCriteria searchCriteria =
new MrrtReportTemplateSearchCriteria.Builder().withCreator(CREATOR_QUERY)
.build();
assertThat(hits.size(), is(1));
assertThat(PropertyUtils.getProperty(hits.get(0), "uuid"),
is(mrrtReportTemplateService.getMrrtReportTemplates(searchCriteria)
.get(0)
.getUuid()));
assertNull(PropertyUtils.getProperty(resultMrrtReportTemplate, "totalCount"));
}
@Test
public void shouldReturnEmptySearchResultIfCreatorDoesNotExist() throws Exception {
MockHttpServletRequest mockRequest = request(RequestMethod.GET, getURI());
mockRequest.setParameter(MrrtReportTemplateSearchHandler.REQUEST_PARAM_CREATOR, NON_EXISTING_CREATOR);
SimpleObject resultMrrtReportTemplate = deserialize(handle(mockRequest));
assertNotNull(resultMrrtReportTemplate);
List<Object> hits = (List<Object>) resultMrrtReportTemplate.get("results");
assertThat(hits.size(), is(0));
}
}