/**
* 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.webservices.rest.web.resource.api;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import static java.util.Arrays.asList;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
/**
* Tests {@link SearchConfig}.
*/
public class SearchConfigTest {
@Rule
public ExpectedException expectedException = ExpectedException.none();
/**
* @verifies create an instance of search config
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldCreateAnInstanceOfSearchConfig() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by encounter").withRequiredParameters(
"encounter").build();
SearchConfig searchConfig = new SearchConfig("default", "v1/order", asList("1.8.*", "1.9.*"), asList(searchQuery1,
searchQuery2));
assertThat(searchConfig.getId(), is("default"));
assertThat(searchConfig.getSupportedResource(), is("v1/order"));
assertThat(searchConfig.getSupportedOpenmrsVersions().size(), is(2));
assertThat(searchConfig.getSupportedOpenmrsVersions(), hasItem("1.8.*"));
assertThat(searchConfig.getSupportedOpenmrsVersions(), hasItem("1.9.*"));
assertThat(searchConfig.getSearchQueries().size(), is(2));
assertThat(searchConfig.getSearchQueries(), hasItem(searchQuery1));
assertThat(searchConfig.getSearchQueries(), hasItem(searchQuery2));
}
/**
* @verifies fail if given id is null
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldFailIfGivenIdIsNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("id must not be empty");
String id = null;
new SearchConfig(id, "v1/order", asList("1.8.*"), asList(new SearchQuery.Builder("Enables to search")
.withOptionalParameters("id").build()));
}
/**
* @verifies fail if given id is empty
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldFailIfGivenIdIsEmpty() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("id must not be empty");
new SearchConfig("", "v1/order", asList("1.8.*"), asList(new SearchQuery.Builder("Enables to search")
.withOptionalParameters("id").build()));
}
/**
* @verifies fail if given supported resource is null
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldFailIfGivenSupportedResourceIsNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("supportedResource must not be empty");
String supportedResource = null;
new SearchConfig("default", supportedResource, asList("1.8.*"), asList(new SearchQuery.Builder("Enables to search")
.withOptionalParameters("id").build()));
}
/**
* @verifies fail if given supported resource is empty
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldFailIfGivenSupportedResourceIsEmpty() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("supportedResource must not be empty");
new SearchConfig("default", "", asList("1.8.*"), asList(new SearchQuery.Builder("Enables to search")
.withOptionalParameters("id").build()));
}
/**
* @verifies fail if given supported openmrs versions is null
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldFailIfGivenSupportedOpenmrsVersionsIsNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("supportedOpenmrsVersions must not be empty");
List<String> supportedOpenmrsVersions = null;
new SearchConfig("default", "v1/order", supportedOpenmrsVersions,
asList(new SearchQuery.Builder("Enables to search").withOptionalParameters("id").build()));
}
/**
* @verifies fail if given supported openmrs versions is empty
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldFailIfGivenSupportedOpenmrsVersionsIsEmpty() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("supportedOpenmrsVersions must not be empty");
List<String> supportedOpenmrsVersions = Collections.emptyList();
new SearchConfig("default", "v1/order", supportedOpenmrsVersions,
asList(new SearchQuery.Builder("Enables to search").withOptionalParameters("id").build()));
}
/**
* @verifies fail if given search queries is null
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldFailIfGivenSearchQueriesIsNull() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("searchQueries must not be empty");
List<SearchQuery> searchQueries = null;
new SearchConfig("default", "v1/order", "1.8.*", searchQueries);
}
/**
* @verifies fail if given search queries is empty
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, java.util.Collection)
*/
@Test
public void SearchConfig_shouldFailIfGivenSearchQueriesIsEmpty() throws Exception {
expectedException.expect(IllegalArgumentException.class);
expectedException.expectMessage("searchQueries must not be empty");
List<SearchQuery> searchQueries = Collections.emptyList();
new SearchConfig("default", "v1/order", "1.8.*", searchQueries);
}
/**
* @verifies create an instance of search config
* @see SearchConfig#SearchConfig(String, String, String, SearchQuery)
*/
@Test
public void SearchConfig_shouldCreateAnInstanceOfSearchConfig_ConstructorStringStringStringSearchQuery()
throws Exception {
SearchQuery searchQuery = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig = new SearchConfig("default", "v1/order", "1.8.*", searchQuery);
assertThat(searchConfig.getId(), is("default"));
assertThat(searchConfig.getSupportedResource(), is("v1/order"));
assertThat(searchConfig.getSupportedOpenmrsVersions().size(), is(1));
assertThat(searchConfig.getSupportedOpenmrsVersions(), hasItem("1.8.*"));
assertThat(searchConfig.getSearchQueries().size(), is(1));
assertThat(searchConfig.getSearchQueries(), hasItem(searchQuery));
}
/**
* @verifies create an instance of search config
* @see SearchConfig#SearchConfig(String, String, java.util.Collection, SearchQuery)
*/
@Test
public void SearchConfig_shouldCreateAnInstanceOfSearchConfig_ConstructorString() throws Exception {
SearchQuery searchQuery = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig = new SearchConfig("default", "v1/order", asList("1.8.*", "1.9.*"), searchQuery);
assertThat(searchConfig.getId(), is("default"));
assertThat(searchConfig.getSupportedResource(), is("v1/order"));
assertThat(searchConfig.getSupportedOpenmrsVersions().size(), is(2));
assertThat(searchConfig.getSupportedOpenmrsVersions(), hasItem("1.8.*"));
assertThat(searchConfig.getSupportedOpenmrsVersions(), hasItem("1.9.*"));
assertThat(searchConfig.getSearchQueries().size(), is(1));
assertThat(searchConfig.getSearchQueries(), hasItem(searchQuery));
}
/**
* @verifies create an instance of search config
* @see SearchConfig#SearchConfig(String, String, String, java.util.Collection)
*/
@Test
public void SearchConfig_shouldCreateAnInstanceOfSearchConfig_ConstructorStringStringStringCollection() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by encounter").withRequiredParameters(
"encounter").build();
SearchConfig searchConfig = new SearchConfig("default", "v1/order", "1.8.*", Arrays.asList(searchQuery1,
searchQuery2));
assertThat(searchConfig.getId(), is("default"));
assertThat(searchConfig.getSupportedResource(), is("v1/order"));
assertThat(searchConfig.getSupportedOpenmrsVersions().size(), is(1));
assertThat(searchConfig.getSupportedOpenmrsVersions(), hasItem("1.8.*"));
assertThat(searchConfig.getSearchQueries().size(), is(2));
assertThat(searchConfig.getSearchQueries(), hasItem(searchQuery1));
assertThat(searchConfig.getSearchQueries(), hasItem(searchQuery2));
}
/**
* @verifies return same hashcode for equal search configs
* @see SearchConfig#hashCode()
*/
@Test
public void hashCode_shouldReturnSameHashcodeForEqualSearchConfigs() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig2 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery2);
assertTrue(searchConfig1.equals(searchConfig2));
assertThat(searchConfig1.hashCode(), is(searchConfig2.hashCode()));
}
/**
* @verifies return true if given this
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldReturnTrueIfGivenThis() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
assertTrue(searchConfig1.equals(searchConfig1));
}
/**
* @verifies return true if this id and supported openmrs version and supported resource are
* equal to given search configs
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldReturnTrueIfThisIdAndSupportedOpenmrsVersionAndSupportedResourceAreEqualToGivenSearchConfigs()
throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig2 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery2);
assertTrue(searchConfig1.equals(searchConfig2));
}
/**
* @verifies be symmetric
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldBeSymmetric() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig2 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery2);
assertTrue(searchConfig1.equals(searchConfig2));
assertTrue(searchConfig2.equals(searchConfig1));
}
/**
* @verifies be transitive
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldBeTransitive() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig2 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery2);
SearchQuery searchQuery3 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig3 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery3);
assertTrue(searchConfig1.equals(searchConfig2));
assertTrue(searchConfig1.equals(searchConfig3));
assertTrue(searchConfig2.equals(searchConfig3));
}
/**
* @verifies return false if given null
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldReturnFalseIfGivenNull() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
assertFalse(searchConfig1.equals(null));
}
/**
* @verifies return false if given an object which is not an instanceof this class
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldReturnFalseIfGivenAnObjectWhichIsNotAnInstanceofThisClass() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
assertFalse(searchConfig1.equals("String"));
}
/**
* @verifies return false if this id is not equal to the given search configs id
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldReturnFalseIfThisIdIsNotEqualToTheGivenSearchConfigsId() throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig2 = new SearchConfig("other", "v1/order", "1.8.*", searchQuery2);
assertFalse(searchConfig1.equals(searchConfig2));
}
/**
* @verifies return false if this supported openmrs version is not equal to given search configs
* supported openmrs version
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldReturnFalseIfThisSupportedOpenmrsVersionIsNotEqualToGivenSearchConfigsSupportedOpenmrsVersion()
throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig2 = new SearchConfig("default", "v1/order", "1.9.*", searchQuery2);
assertFalse(searchConfig1.equals(searchConfig2));
}
/**
* @verifies return false if this supported resource is not equal to given search configs
* supported resource
* @see SearchConfig#equals(Object)
*/
@Test
public void equals_shouldReturnFalseIfThisSupportedResourceIsNotEqualToGivenSearchConfigsSupportedResource()
throws Exception {
SearchQuery searchQuery1 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig1 = new SearchConfig("default", "v1/order", "1.8.*", searchQuery1);
SearchQuery searchQuery2 = new SearchQuery.Builder("Enables to search by patient").withRequiredParameters("patient")
.build();
SearchConfig searchConfig2 = new SearchConfig("default", "v2/order", "1.8.*", searchQuery2);
assertFalse(searchConfig1.equals(searchConfig2));
}
}