diff --git a/pom.xml b/pom.xml
index ffd2470e1..2005cf8d8 100755
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
opensrp-server-web
war
- 2.9.0-SNAPSHOT
+ 2.9.1-SNAPSHOT
opensrp-server-web
OpenSRP Server Web Application
https://github.com/OpenSRP/opensrp-server-web
@@ -24,7 +24,7 @@
3.8.0
always
1.5.1
- 2.13.0-SNAPSHOT
+ 2.13.1-SNAPSHOT
2.4.0-SNAPSHOT
2.0.1-SNAPSHOT
2.0.5
diff --git a/src/main/java/org/opensrp/web/Constants.java b/src/main/java/org/opensrp/web/Constants.java
index 1add577b3..eebbc7e32 100644
--- a/src/main/java/org/opensrp/web/Constants.java
+++ b/src/main/java/org/opensrp/web/Constants.java
@@ -20,16 +20,21 @@ public interface Constants {
String DEFAULT_EXCEPTION_HANDLER_MESSAGE = "The server encountered an error processing the request." ;
public static final String RETURN_COUNT= "return_count";
+
public static final String TOTAL_RECORDS = "total_records";
public static final String PAGE_NUMBER = "pageNumber";
public static final String PAGE_SIZE = "pageSize";
+ public static final String SERVER_VERSION = "serverVersion";
+
public static final String ORDER_BY_TYPE = "orderByType";
public static final String ORDER_BY_FIELD_NAME = "orderByFieldName";
+ public static final String DATETIME_IN_UTC_FORMAT_STRING = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
+
String LOCATIONS = "locations";
String NULL = "null";
diff --git a/src/main/java/org/opensrp/web/rest/OrganizationResource.java b/src/main/java/org/opensrp/web/rest/OrganizationResource.java
index de1942989..886bfe2bb 100644
--- a/src/main/java/org/opensrp/web/rest/OrganizationResource.java
+++ b/src/main/java/org/opensrp/web/rest/OrganizationResource.java
@@ -44,11 +44,12 @@
import java.util.Set;
import java.util.stream.Collectors;
-import static org.opensrp.web.Constants.ORDER_BY_FIELD_NAME;
-import static org.opensrp.web.Constants.ORDER_BY_TYPE;
import static org.opensrp.web.Constants.PAGE_NUMBER;
import static org.opensrp.web.Constants.PAGE_SIZE;
+import static org.opensrp.web.Constants.ORDER_BY_TYPE;
import static org.opensrp.web.Constants.TOTAL_RECORDS;
+import static org.opensrp.web.Constants.ORDER_BY_FIELD_NAME;
+import static org.opensrp.web.Constants.SERVER_VERSION;
/**
* @author Samuel Githengi created on 09/10/19
@@ -116,10 +117,17 @@ public List getAllOrganizations(@RequestParam(value = "location_id
@RequestParam(value = PAGE_NUMBER, required = false) Integer pageNumber,
@RequestParam(value = PAGE_SIZE, required = false) Integer pageSize,
@RequestParam(value = ORDER_BY_TYPE, required = false) String orderByType,
- @RequestParam(value = ORDER_BY_FIELD_NAME, required = false) String orderByFieldName
+ @RequestParam(value = ORDER_BY_FIELD_NAME, required = false) String orderByFieldName,
+ @RequestParam(value = SERVER_VERSION, required = false) String serverVersionParam
) {
+
+ Long serverVersion = null;
+ if (serverVersionParam != null) {
+ serverVersion = Long.parseLong(serverVersionParam);
+ }
+
OrganizationSearchBean organizationSearchBean = createOrganizationSearchBeanForPagination(pageNumber, pageSize,
- orderByType, orderByFieldName);
+ orderByType, orderByFieldName, serverVersion);
if (StringUtils.isNotBlank(locationID)) {
return organizationService.selectOrganizationsEncompassLocations(locationID);
@@ -296,12 +304,14 @@ public ResponseEntity> getOrgPractitioners(@PathVariable("ide
/**
* This API queries list of team assignment from a practitioner identifer
+ *
* @param practitionerIdentifier
* @return List of Organization
*/
@GetMapping(value = "/by-practitioner/{practitioner-identifier}", produces = { MediaType.APPLICATION_JSON_VALUE })
- public List getTeamsByPractitionerIdentifier(@PathVariable("practitioner-identifier") String practitionerIdentifier) {
- return organizationService.getOrganizationsByPractitionerIdentifier(practitionerIdentifier);
+ public List getTeamsByPractitionerIdentifier(
+ @PathVariable("practitioner-identifier") String practitionerIdentifier) {
+ return organizationService.getOrganizationsByPractitionerIdentifier(practitionerIdentifier);
}
@RequestMapping(value = "/assignedLocationsAndPlans", method = RequestMethod.GET, produces = {
@@ -341,7 +351,7 @@ public ResponseEntity searchOrganization(OrganizationSearchBean organiza
}
private OrganizationSearchBean createOrganizationSearchBeanForPagination(Integer pageNumber, Integer pageSize,
- String orderByType, String orderByFieldName) {
+ String orderByType, String orderByFieldName, Long serverVersion) {
OrganizationSearchBean organizationSearchBean = new OrganizationSearchBean();
OrganizationSearchBean.OrderByType orderByTypeEnum = orderByType != null ?
OrganizationSearchBean.OrderByType.valueOf(orderByType) :
@@ -353,6 +363,7 @@ private OrganizationSearchBean createOrganizationSearchBeanForPagination(Integer
organizationSearchBean.setPageSize(pageSize);
organizationSearchBean.setOrderByFieldName(fieldName);
organizationSearchBean.setOrderByType(orderByTypeEnum);
+ organizationSearchBean.setServerVersion(serverVersion);
return organizationSearchBean;
}
diff --git a/src/main/java/org/opensrp/web/rest/PractitionerResource.java b/src/main/java/org/opensrp/web/rest/PractitionerResource.java
index 7bc3c8d4f..ca2a00e1a 100644
--- a/src/main/java/org/opensrp/web/rest/PractitionerResource.java
+++ b/src/main/java/org/opensrp/web/rest/PractitionerResource.java
@@ -8,13 +8,11 @@
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.joda.time.DateTime;
-import org.joda.time.LocalDate;
import org.opensrp.search.BaseSearchBean;
import org.opensrp.search.PractitionerSearchBean;
import org.opensrp.service.PractitionerService;
-import org.opensrp.util.DateTypeConverter;
import org.smartregister.domain.Practitioner;
-import org.smartregister.utils.TaskDateTimeTypeConverter;
+import org.smartregister.utils.DateTimeTypeConverter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
@@ -26,181 +24,194 @@
import java.lang.reflect.Type;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
-import static org.opensrp.web.Constants.ORDER_BY_FIELD_NAME;
-import static org.opensrp.web.Constants.ORDER_BY_TYPE;
+import static org.opensrp.web.Constants.DATETIME_IN_UTC_FORMAT_STRING;
import static org.opensrp.web.Constants.PAGE_NUMBER;
import static org.opensrp.web.Constants.PAGE_SIZE;
+import static org.opensrp.web.Constants.ORDER_BY_TYPE;
+import static org.opensrp.web.Constants.ORDER_BY_FIELD_NAME;
+import static org.opensrp.web.Constants.SERVER_VERSION;
@Controller
@RequestMapping(value = "/rest/practitioner")
public class PractitionerResource {
- private static Logger logger = LogManager.getLogger(PractitionerResource.class.toString());
-
- public static Gson gson = new GsonBuilder().registerTypeAdapter(DateTime.class, new TaskDateTimeTypeConverter())
- .registerTypeAdapter(LocalDate.class, new DateTypeConverter()).create();
-
- private PractitionerService practitionerService;
-
- public static final String IDENTIFIER = "identifier";
-
- public static final String USER_ID = "userId";
-
- public static final String GET_PRACTITIONER_BY_USER_URL = "/user/{userId}";
-
- @Autowired
- public void setPractitionerService(PractitionerService practitionerService) {
- this.practitionerService = practitionerService;
- }
-
- @RequestMapping(value = "/{identifier}", method = RequestMethod.GET, produces = {
- MediaType.APPLICATION_JSON_VALUE })
- public ResponseEntity getPractitionerByUniqueId(@PathVariable(IDENTIFIER) String identifier) {
- if (StringUtils.isBlank(identifier)) {
- return new ResponseEntity<>(gson.toJson("Practitioner Id is required"), RestUtils.getJSONUTF8Headers(),
- HttpStatus.BAD_REQUEST);
- }
- return new ResponseEntity<>(gson.toJson(
- practitionerService.getPractitioner(identifier)),
- RestUtils.getJSONUTF8Headers(), HttpStatus.OK);
- }
-
- @RequestMapping(method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE })
- public ResponseEntity getPractitioners(@RequestParam(value = PAGE_NUMBER, required = false) Integer pageNumber,
- @RequestParam(value = PAGE_SIZE, required = false) Integer pageSize,
- @RequestParam(value = ORDER_BY_TYPE, required = false) String orderByType,
- @RequestParam(value = ORDER_BY_FIELD_NAME, required = false) String orderByFieldName) {
-
- PractitionerSearchBean practitionerSearchBean = createPractitionerSearchBean(pageNumber, pageSize, orderByType,
- orderByFieldName);
- return new ResponseEntity<>(gson.toJson(
- practitionerService.getAllPractitioners(practitionerSearchBean)),
- RestUtils.getJSONUTF8Headers(), HttpStatus.OK);
- }
-
- /**
- * Gets a practitioner using the user id
- *
- * @param userId {@link String}, User id from Keycloak
- * @return practitioner {@link Practitioner}
- */
- @RequestMapping(value = GET_PRACTITIONER_BY_USER_URL, method = RequestMethod.GET, produces = {
- MediaType.APPLICATION_JSON_VALUE })
- public ResponseEntity getPractitionerByUser(@PathVariable(value = USER_ID) String userId) {
- if (StringUtils.isNotBlank(userId)) {
- return new ResponseEntity<>(gson.toJson(practitionerService.getPractitionerByUserId(userId)),
- RestUtils.getJSONUTF8Headers(), HttpStatus.OK);
- } else {
- return new ResponseEntity<>(gson.toJson("The User Id is required"),
- RestUtils.getJSONUTF8Headers(), HttpStatus.BAD_REQUEST);
- }
- }
-
- @RequestMapping(method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE,
- MediaType.TEXT_PLAIN_VALUE })
- public ResponseEntity create(@RequestBody String entity) {
- return savePractitioner(entity);
- }
-
- private ResponseEntity savePractitioner(@RequestBody String payload) {
- try {
- Practitioner practitioner = gson.fromJson(payload, Practitioner.class);
- practitionerService.addOrUpdatePractitioner(practitioner);
- return new ResponseEntity<>(HttpStatus.CREATED);
- }
- catch (JsonSyntaxException e) {
- logger.error("The request doesn't contain a valid practitioner representation", e);
- return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
- }
- catch (IllegalArgumentException e) {
- logger.error(e.getMessage(), e);
- return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
- }
- }
-
- @RequestMapping(method = RequestMethod.PUT, consumes = { MediaType.APPLICATION_JSON_VALUE,
- MediaType.TEXT_PLAIN_VALUE })
- public ResponseEntity update(@RequestBody String entity) {
- return savePractitioner(entity);
- }
-
- @RequestMapping(value = "/delete/{identifier}", method = RequestMethod.DELETE, produces = {
- MediaType.APPLICATION_JSON_VALUE })
- public ResponseEntity delete(@PathVariable("identifier") String identifier) {
- try {
- practitionerService.deletePractitioner(identifier);
- return new ResponseEntity<>(HttpStatus.NO_CONTENT);
- }
- catch (IllegalArgumentException e) {
- logger.error(e.getMessage(), e);
- return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
- }
- }
-
- @GetMapping(value = "/report-to", produces = { MediaType.APPLICATION_JSON_VALUE })
- public List getPractitionersByPractitionerRoleIdentifierAndCode(
- @RequestParam(value = "practitionerIdentifier") String practitionerIdentifier,
- @RequestParam(value = "code") String code) {
-
- return practitionerService.getAssignedPractitionersByIdentifierAndCode(practitionerIdentifier, code);
- }
-
- private PractitionerSearchBean createPractitionerSearchBean(Integer pageNumber, Integer pageSize, String orderByType,
- String orderByFieldName) {
-
- BaseSearchBean.OrderByType orderByTypeEnum;
- BaseSearchBean.FieldName fieldName;
- orderByTypeEnum =
- orderByType != null ? BaseSearchBean.OrderByType.valueOf(orderByType) : BaseSearchBean.OrderByType.DESC;
- fieldName =
- orderByFieldName != null ? BaseSearchBean.FieldName.valueOf(orderByFieldName) : BaseSearchBean.FieldName.id;
-
- return PractitionerSearchBean.builder()
- .pageNumber(pageNumber)
- .pageSize(pageSize)
- .orderByType(orderByTypeEnum)
- .orderByFieldName(fieldName)
- .build();
-
- }
-
- @RequestMapping(value = "/add", method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE,
- MediaType.TEXT_PLAIN_VALUE })
- public ResponseEntity saveMultiplePractitioners(@RequestBody String payload) {
- try {
- Set unprocessedIds = new HashSet<>();
- Type listType = new TypeToken>() {}.getType();
- List practitioners = gson.fromJson(payload, listType);
-
- for (Practitioner practitioner: practitioners){
- try {
- practitionerService.addOrUpdatePractitioner(practitioner);
- } catch (Exception exception){
- logger.error(exception.getMessage(), exception);
- unprocessedIds.add(practitioner.getIdentifier());
- }
- }
-
- if (unprocessedIds.isEmpty())
- return new ResponseEntity<>("All Practitioners processed", HttpStatus.CREATED);
- else
- return new ResponseEntity<>("Practitioners Ids not processed: " + String.join(",", unprocessedIds),
- HttpStatus.CREATED);
-
- } catch (JsonSyntaxException e) {
- logger.error("The request doesnt contain a valid practitioner representation",e);
- return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
- }
- }
-
- @GetMapping(value = "/count")
+ private static Logger logger = LogManager.getLogger(PractitionerResource.class.toString());
+
+ public static Gson gson = new GsonBuilder().setDateFormat(DATETIME_IN_UTC_FORMAT_STRING)
+ .registerTypeAdapter(DateTime.class, new DateTimeTypeConverter()).create();
+
+ private PractitionerService practitionerService;
+
+ public static final String IDENTIFIER = "identifier";
+
+ public static final String USER_ID = "userId";
+
+ public static final String GET_PRACTITIONER_BY_USER_URL = "/user/{userId}";
+
+ @Autowired
+ public void setPractitionerService(PractitionerService practitionerService) {
+ this.practitionerService = practitionerService;
+ }
+
+ @RequestMapping(value = "/{identifier}", method = RequestMethod.GET, produces = {
+ MediaType.APPLICATION_JSON_VALUE })
+ public ResponseEntity getPractitionerByUniqueId(@PathVariable(IDENTIFIER) String identifier) {
+ if (StringUtils.isBlank(identifier)) {
+ return new ResponseEntity<>(gson.toJson("Practitioner Id is required"), RestUtils.getJSONUTF8Headers(),
+ HttpStatus.BAD_REQUEST);
+ }
+ return new ResponseEntity<>(gson.toJson(
+ practitionerService.getPractitioner(identifier)),
+ RestUtils.getJSONUTF8Headers(), HttpStatus.OK);
+ }
+
+ @RequestMapping(method = RequestMethod.GET, produces = { MediaType.APPLICATION_JSON_VALUE })
+ public ResponseEntity getPractitioners(@RequestParam(value = PAGE_NUMBER, required = false) Integer pageNumber,
+ @RequestParam(value = PAGE_SIZE, required = false) Integer pageSize,
+ @RequestParam(value = ORDER_BY_TYPE, required = false) String orderByType,
+ @RequestParam(value = ORDER_BY_FIELD_NAME, required = false) String orderByFieldName,
+ @RequestParam(value = SERVER_VERSION, required = false) String serverVersionParam) {
+
+ Long serverVersion = null;
+ if (serverVersionParam != null) {
+ serverVersion = Long.parseLong(serverVersionParam);
+ }
+
+ PractitionerSearchBean practitionerSearchBean = createPractitionerSearchBean(pageNumber, pageSize, orderByType,
+ orderByFieldName, serverVersion);
+ return new ResponseEntity<>(gson.toJson(
+ practitionerService.getAllPractitioners(practitionerSearchBean)),
+ RestUtils.getJSONUTF8Headers(), HttpStatus.OK);
+ }
+
+ /**
+ * Gets a practitioner using the user id
+ *
+ * @param userId {@link String}, User id from Keycloak
+ * @return practitioner {@link Practitioner}
+ */
+ @RequestMapping(value = GET_PRACTITIONER_BY_USER_URL, method = RequestMethod.GET, produces = {
+ MediaType.APPLICATION_JSON_VALUE })
+ public ResponseEntity getPractitionerByUser(@PathVariable(value = USER_ID) String userId) {
+ if (StringUtils.isNotBlank(userId)) {
+ return new ResponseEntity<>(gson.toJson(practitionerService.getPractitionerByUserId(userId)),
+ RestUtils.getJSONUTF8Headers(), HttpStatus.OK);
+ } else {
+ return new ResponseEntity<>(gson.toJson("The User Id is required"),
+ RestUtils.getJSONUTF8Headers(), HttpStatus.BAD_REQUEST);
+ }
+ }
+
+ @RequestMapping(method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE,
+ MediaType.TEXT_PLAIN_VALUE })
+ public ResponseEntity create(@RequestBody String entity) {
+ return savePractitioner(entity);
+ }
+
+ private ResponseEntity savePractitioner(@RequestBody String payload) {
+ try {
+ Practitioner practitioner = gson.fromJson(payload, Practitioner.class);
+ practitionerService.addOrUpdatePractitioner(practitioner);
+ return new ResponseEntity<>(HttpStatus.CREATED);
+ }
+ catch (JsonSyntaxException e) {
+ logger.error("The request doesn't contain a valid practitioner representation", e);
+ return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+ }
+ catch (IllegalArgumentException e) {
+ logger.error(e.getMessage(), e);
+ return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
+ }
+ }
+
+ @RequestMapping(method = RequestMethod.PUT, consumes = { MediaType.APPLICATION_JSON_VALUE,
+ MediaType.TEXT_PLAIN_VALUE })
+ public ResponseEntity update(@RequestBody String entity) {
+ return savePractitioner(entity);
+ }
+
+ @RequestMapping(value = "/delete/{identifier}", method = RequestMethod.DELETE, produces = {
+ MediaType.APPLICATION_JSON_VALUE })
+ public ResponseEntity delete(@PathVariable("identifier") String identifier) {
+ try {
+ practitionerService.deletePractitioner(identifier);
+ return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+ }
+ catch (IllegalArgumentException e) {
+ logger.error(e.getMessage(), e);
+ return new ResponseEntity(e.getMessage(), HttpStatus.BAD_REQUEST);
+ }
+ }
+
+ @GetMapping(value = "/report-to", produces = { MediaType.APPLICATION_JSON_VALUE })
+ public List getPractitionersByPractitionerRoleIdentifierAndCode(
+ @RequestParam(value = "practitionerIdentifier") String practitionerIdentifier,
+ @RequestParam(value = "code") String code) {
+
+ return practitionerService.getAssignedPractitionersByIdentifierAndCode(practitionerIdentifier, code);
+ }
+
+ private PractitionerSearchBean createPractitionerSearchBean(Integer pageNumber, Integer pageSize, String orderByType,
+ String orderByFieldName, Long serverVersion) {
+
+ BaseSearchBean.OrderByType orderByTypeEnum;
+ BaseSearchBean.FieldName fieldName;
+ orderByTypeEnum =
+ orderByType != null ? BaseSearchBean.OrderByType.valueOf(orderByType) : BaseSearchBean.OrderByType.DESC;
+ fieldName =
+ orderByFieldName != null ? BaseSearchBean.FieldName.valueOf(orderByFieldName) : BaseSearchBean.FieldName.id;
+
+ return PractitionerSearchBean.builder()
+ .pageNumber(pageNumber)
+ .pageSize(pageSize)
+ .orderByType(orderByTypeEnum)
+ .orderByFieldName(fieldName)
+ .serverVersion(serverVersion)
+ .build();
+
+ }
+
+ @RequestMapping(value = "/add", method = RequestMethod.POST, consumes = { MediaType.APPLICATION_JSON_VALUE,
+ MediaType.TEXT_PLAIN_VALUE })
+ public ResponseEntity saveMultiplePractitioners(@RequestBody String payload) {
+ try {
+ Set unprocessedIds = new HashSet<>();
+ Type listType = new TypeToken>() {
+
+ }.getType();
+ List practitioners = gson.fromJson(payload, listType);
+
+ for (Practitioner practitioner : practitioners) {
+ try {
+ practitionerService.addOrUpdatePractitioner(practitioner);
+ }
+ catch (Exception exception) {
+ logger.error(exception.getMessage(), exception);
+ unprocessedIds.add(practitioner.getIdentifier());
+ }
+ }
+
+ if (unprocessedIds.isEmpty())
+ return new ResponseEntity<>("All Practitioners processed", HttpStatus.CREATED);
+ else
+ return new ResponseEntity<>("Practitioners Ids not processed: " + String.join(",", unprocessedIds),
+ HttpStatus.CREATED);
+
+ }
+ catch (JsonSyntaxException e) {
+ logger.error("The request doesnt contain a valid practitioner representation", e);
+ return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
+ }
+ }
+
+ @GetMapping(value = "/count")
public ResponseEntity getAllPractitionersCount() {
try {
return new ResponseEntity<>(practitionerService.countAllPractitioners(), HttpStatus.OK);
- } catch (Exception exception) {
+ }
+ catch (Exception exception) {
logger.error("Error getting practitioners count", exception);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
diff --git a/src/test/java/org/opensrp/web/rest/OrganizationResourceTest.java b/src/test/java/org/opensrp/web/rest/OrganizationResourceTest.java
index 92b301d6c..87c33e398 100644
--- a/src/test/java/org/opensrp/web/rest/OrganizationResourceTest.java
+++ b/src/test/java/org/opensrp/web/rest/OrganizationResourceTest.java
@@ -5,6 +5,8 @@
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.datatype.joda.JodaModule;
import org.apache.commons.lang3.tuple.ImmutablePair;
import org.joda.time.DateTime;
import org.junit.Before;
@@ -93,49 +95,49 @@
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = TestWebContextLoader.class, locations = { "classpath:test-webmvc-config.xml", })
public class OrganizationResourceTest {
-
+
@Rule
public MockitoRule rule = MockitoJUnit.rule();
-
+
@Autowired
protected WebApplicationContext webApplicationContext;
-
+
private MockMvc mockMvc;
-
+
@Mock
private OrganizationService organizationService;
-
+
@Mock
private PractitionerService practitionerService;
-
+
@Mock
private PhysicalLocationService locationService;
-
+
@Mock
private PlanService planService;
-
+
@Mock
private KeycloakPrincipal keycloakPrincipal;
-
+
@Mock
private RefreshableKeycloakSecurityContext securityContext;
-
+
@Mock
private AccessToken token;
-
+
@Captor
private ArgumentCaptor organizationArgumentCaptor;
-
+
private OrganizationResource organizationResource;
-
+
private String BASE_URL = "/rest/organization/";
-
- private String organizationJSON = "{\"identifier\":\"801874c0-d963-11e9-8a34-2a2ae2dbcce4\",\"active\":true,\"name\":\"B Team\",\"partOf\":1123,\"type\":{\"coding\":[{\"system\":\"http://terminology.hl7.org/CodeSystem/organization-type\",\"code\":\"team\",\"display\":\"Team\"}]}}";
-
+
+ private String organizationJSON = "{\"identifier\":\"801874c0-d963-11e9-8a34-2a2ae2dbcce4\",\"active\":true,\"name\":\"B Team\",\"partOf\":1123,\"type\":{\"coding\":[{\"system\":\"http://terminology.hl7.org/CodeSystem/organization-type\",\"code\":\"team\",\"display\":\"Team\"}]},\"dateCreated\":\"2021-12-20T13:16:02.457Z\",\"dateEdited\":\"2021-12-20T13:16:02.457Z\",\"serverVersion\":1}";
+
private ObjectMapper objectMapper;
-
+
private String MESSAGE = "The server encountered an error processing the request.";
-
+
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
@@ -147,8 +149,10 @@ public void setUp() {
organizationResource.setLocationService(locationService);
organizationResource.setPlanService(planService);
objectMapper = new ObjectMapper();
+ objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
+ objectMapper.registerModule(new JodaModule());
}
-
+
@Test
public void testGetAllOrganizations() throws Exception {
List expected = Collections.singletonList(getOrganization());
@@ -157,9 +161,9 @@ public void testGetAllOrganizations() throws Exception {
verify(organizationService).getAllOrganizations(any(OrganizationSearchBean.class));
verifyNoMoreInteractions(organizationService);
assertEquals("[" + organizationJSON + "]", result.getResponse().getContentAsString());
-
+
}
-
+
@Test
public void testGetAllOrganizationsUnderLocation() throws Exception {
List expected = Collections.singletonList(getOrganization());
@@ -167,9 +171,9 @@ public void testGetAllOrganizationsUnderLocation() throws Exception {
mockMvc.perform(get(BASE_URL).param("location_id", "12345")).andExpect(status().isOk()).andReturn();
verify(organizationService).selectOrganizationsEncompassLocations("12345");
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testGetOrganizationByIdentifier() throws Exception {
Organization expected = getOrganization();
@@ -179,21 +183,21 @@ public void testGetOrganizationByIdentifier() throws Exception {
verify(organizationService).getOrganization(expected.getIdentifier());
verifyNoMoreInteractions(organizationService);
assertEquals(organizationJSON, result.getResponse().getContentAsString());
-
+
}
-
+
@Test
public void testCreateOrganization() throws Exception {
-
+
mockMvc.perform(post(BASE_URL).contentType(MediaType.APPLICATION_JSON).content(organizationJSON.getBytes()))
.andExpect(status().isCreated());
verify(organizationService).addOrganization(organizationArgumentCaptor.capture());
assertEquals(organizationJSON, objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.writeValueAsString(organizationArgumentCaptor.getValue()));
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testCreateOrganizationWithoutIdentifier() throws Exception {
doThrow(IllegalArgumentException.class).when(organizationService).addOrganization(any(Organization.class));
@@ -201,9 +205,9 @@ public void testCreateOrganizationWithoutIdentifier() throws Exception {
.andExpect(status().isBadRequest());
verify(organizationService).addOrganization(organizationArgumentCaptor.capture());
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testCreateOrganizationWithError() throws Exception {
doThrow(RuntimeException.class).when(organizationService).addOrganization(any(Organization.class));
@@ -211,12 +215,12 @@ public void testCreateOrganizationWithError() throws Exception {
.andExpect(status().isInternalServerError());
verify(organizationService).addOrganization(organizationArgumentCaptor.capture());
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testUpdateOrganization() throws Exception {
-
+
mockMvc.perform(put(BASE_URL + "/{identifier}", getOrganization().getIdentifier())
.contentType(MediaType.APPLICATION_JSON).content(organizationJSON.getBytes()))
.andExpect(status().isCreated());
@@ -224,9 +228,9 @@ public void testUpdateOrganization() throws Exception {
assertEquals(organizationJSON, objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL)
.writeValueAsString(organizationArgumentCaptor.getValue()));
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testUpdateOrganizationWithoutIdentifier() throws Exception {
doThrow(new IllegalArgumentException()).when(organizationService).updateOrganization(any(Organization.class));
@@ -235,9 +239,9 @@ public void testUpdateOrganizationWithoutIdentifier() throws Exception {
.andExpect(status().isBadRequest());
verify(organizationService).updateOrganization(organizationArgumentCaptor.capture());
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testUpdateOrganizationWithError() throws Exception {
doThrow(new RuntimeException()).when(organizationService).updateOrganization(any(Organization.class));
@@ -246,9 +250,9 @@ public void testUpdateOrganizationWithError() throws Exception {
.andExpect(status().isInternalServerError());
verify(organizationService).updateOrganization(organizationArgumentCaptor.capture());
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testAssignLocationAndPlan() throws Exception {
mockMvc.perform(post(BASE_URL + "/assignLocationsAndPlans").contentType(MediaType.APPLICATION_JSON)
@@ -257,9 +261,9 @@ public void testAssignLocationAndPlan() throws Exception {
verify(organizationService).assignLocationAndPlan(bean.getOrganization(), bean.getJurisdiction(), bean.getPlan(),
bean.getFromDate(), bean.getToDate());
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testAssignLocationAndPlanWithMissingParams() throws Exception {
doThrow(new IllegalArgumentException()).when(organizationService).assignLocationAndPlan(null, null, null, null,
@@ -271,9 +275,9 @@ public void testAssignLocationAndPlanWithMissingParams() throws Exception {
verify(organizationService).assignLocationAndPlan(bean.getOrganization(), bean.getJurisdiction(), bean.getPlan(),
bean.getFromDate(), bean.getToDate());
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testAssignLocationAndPlanWithInternalError() throws Exception {
doThrow(new RuntimeException()).when(organizationService).assignLocationAndPlan(null, null, null, null, null);
@@ -284,48 +288,49 @@ public void testAssignLocationAndPlanWithInternalError() throws Exception {
verify(organizationService).assignLocationAndPlan(bean.getOrganization(), bean.getJurisdiction(), bean.getPlan(),
bean.getFromDate(), bean.getToDate());
verifyNoMoreInteractions(organizationService);
-
+
}
-
+
@Test
public void testGetAssignedLocationAndPlan() throws Exception {
+ objectMapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String identifier = UUID.randomUUID().toString();
List expected = getOrganizationLocationsAssigned(true);
when(organizationService.findAssignedLocationsAndPlans(identifier, true, null, null, null, null))
.thenReturn(expected);
MvcResult result = mockMvc.perform(get(BASE_URL + "/assignedLocationsAndPlans/{identifier}", identifier))
.andExpect(status().isOk()).andReturn();
-
+
verify(organizationService).findAssignedLocationsAndPlans(identifier, true, null, null, null, null);
verifyNoMoreInteractions(organizationService);
assertEquals(objectMapper.writeValueAsString(expected), result.getResponse().getContentAsString());
-
+
}
-
+
@Test
public void testGetAssignedLocationAndPlanWithMissingParams() throws Exception {
String identifier = UUID.randomUUID().toString();
doThrow(new IllegalArgumentException()).when(organizationService).findAssignedLocationsAndPlans(identifier, true,
null, null, null, null);
-
+
MvcResult result = mockMvc.perform(get(BASE_URL + "/assignedLocationsAndPlans/{identifier}", identifier))
.andExpect(status().isBadRequest()).andReturn();
-
+
verify(organizationService).findAssignedLocationsAndPlans(identifier, true, null, null, null, null);
verifyNoMoreInteractions(organizationService);
assertEquals("", result.getResponse().getContentAsString());
-
+
}
-
+
@Test
public void testGetAssignedLocationAndPlanWithInternalError() throws Exception {
String identifier = UUID.randomUUID().toString();
doThrow(new RuntimeException()).when(organizationService).findAssignedLocationsAndPlans(identifier, true, null, null,
null, null);
-
+
MvcResult result = mockMvc.perform(get(BASE_URL + "/assignedLocationsAndPlans/{identifier}", identifier))
.andExpect(status().isInternalServerError()).andReturn();
-
+
verify(organizationService).findAssignedLocationsAndPlans(identifier, true, null, null, null, null);
verifyNoMoreInteractions(organizationService);
String responseString = result.getResponse().getContentAsString();
@@ -334,24 +339,25 @@ public void testGetAssignedLocationAndPlanWithInternalError() throws Exception {
}
JsonNode actualObj = objectMapper.readTree(responseString);
assertEquals(actualObj.get("message").asText(), MESSAGE);
-
+
}
-
+
@Test
public void testGetAssignedLocationsAndPlansByPlanId() throws Exception {
+ objectMapper.enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
String identifier = UUID.randomUUID().toString();
List expected = getOrganizationLocationsAssigned(true);
when(organizationService.findAssignedLocationsAndPlansByPlanIdentifier(identifier, null, null, null, null))
.thenReturn(expected);
MvcResult result = mockMvc.perform(get(BASE_URL + "/assignedLocationsAndPlans?plan=" + identifier))
.andExpect(status().isOk()).andReturn();
-
+
verify(organizationService).findAssignedLocationsAndPlansByPlanIdentifier(identifier, null, null, null, null);
verifyNoMoreInteractions(organizationService);
assertEquals(objectMapper.writeValueAsString(expected), result.getResponse().getContentAsString());
-
+
}
-
+
@Test
public void testGetOrgPractitioners() throws Exception {
String identifier = UUID.randomUUID().toString();
@@ -360,7 +366,7 @@ public void testGetOrgPractitioners() throws Exception {
when(practitionerService.getPractitionersByOrgIdentifier(any(String.class))).thenReturn(expected);
MvcResult result = mockMvc.perform(get(BASE_URL + "/practitioner/{identifier}", identifier))
.andExpect(status().isOk()).andReturn();
-
+
String responseString = result.getResponse().getContentAsString();
if (responseString.isEmpty()) {
fail("Test case failed");
@@ -370,15 +376,15 @@ public void testGetOrgPractitioners() throws Exception {
assertEquals(actualObj.get(0).get("active").asBoolean(), expected.get(0).getActive());
assertEquals(actualObj.size(), expected.size());
}
-
+
@Test
public void testGetOrgPractitionersWithInternalError() throws Exception {
String identifier = UUID.randomUUID().toString();
doThrow(new RuntimeException()).when(practitionerService).getPractitionersByOrgIdentifier(any(String.class));
-
+
MvcResult result = mockMvc.perform(get(BASE_URL + "/practitioner/{identifier}", identifier))
.andExpect(status().isInternalServerError()).andReturn();
-
+
verify(practitionerService).getPractitionersByOrgIdentifier(identifier);
verifyNoMoreInteractions(practitionerService);
String responseString = result.getResponse().getContentAsString();
@@ -388,7 +394,7 @@ public void testGetOrgPractitionersWithInternalError() throws Exception {
JsonNode actualObj = objectMapper.readTree(responseString);
assertEquals(actualObj.get("message").asText(), MESSAGE);
}
-
+
@Test
public void testgetUserAssignedLocationsAndPlansWithoutPlansShouldReturnUserAssignment() throws Exception {
Pair authenticatedUser = TestData.getAuthentication(token, keycloakPrincipal, securityContext);
@@ -404,7 +410,7 @@ public void testgetUserAssignedLocationsAndPlansWithoutPlansShouldReturnUserAssi
location2.setProperties(new LocationProperty());
location2.getProperties().setName("OA1");
location2.getProperties().setParentId(location.getId());
-
+
PhysicalLocation location3 = new PhysicalLocation();
location3.setId(UUID.randomUUID().toString());
location3.setProperties(new LocationProperty());
@@ -412,16 +418,16 @@ public void testgetUserAssignedLocationsAndPlansWithoutPlansShouldReturnUserAssi
location3.getProperties().setParentId(location.getId());
when(locationService.findLocationByIdsWithChildren(eq(false), any(), eq(Integer.MAX_VALUE)))
.thenReturn(Arrays.asList(location, location2, location3));
-
+
Authentication authentication = authenticatedUser.getSecond();
MvcResult result = mockMvc
.perform(get(BASE_URL + "/user-assignment")
.with(SecurityMockMvcRequestPostProcessors.authentication(authentication)))
.andExpect(status().isOk()).andReturn();
-
+
UserAssignmentBean userAssignment = objectMapper.readValue(result.getResponse().getContentAsString(),
UserAssignmentBean.class);
-
+
assertEquals(new HashSet<>(ids), userAssignment.getOrganizationIds());
assertEquals(2, userAssignment.getJurisdictions().size());
assertEquals(0, userAssignment.getPlans().size());
@@ -432,23 +438,23 @@ public void testgetUserAssignedLocationsAndPlansWithoutPlansShouldReturnUserAssi
assertFalse(userAssignment.getPlans().contains(assignment.getPlanId()));
}
verifyNoInteractions(planService);
-
+
}
-
+
@Test
public void testGetUserAssignedLocationsAndPlansWithPlansShouldReturnActivePlansOnly() throws Exception {
Pair authenticatedUser = TestData.getAuthentication(token, keycloakPrincipal, securityContext);
List ids = Arrays.asList(123l, 124l);
-
+
when(practitionerService.getOrganizationsByUserId(authenticatedUser.getFirst().getBaseEntityId()))
.thenReturn(new ImmutablePair<>(getPractioner(), ids));
List assignments = getOrganizationLocationsAssigned(true);
when(organizationService.findAssignedLocationsAndPlans(ids)).thenReturn(assignments);
-
+
List planIds = assignments.stream().map(a -> a.getPlanId()).collect(Collectors.toList());
List plans = getPlans(assignments);
when(planService.getPlansByIdsReturnOptionalFields(any(), any(), eq(false))).thenReturn(plans);
-
+
PhysicalLocation location = LocationResourceTest.createStructure();
location.getProperties().setName("Vilage123");
PhysicalLocation location2 = new PhysicalLocation();
@@ -456,7 +462,7 @@ public void testGetUserAssignedLocationsAndPlansWithPlansShouldReturnActivePlans
location2.setProperties(new LocationProperty());
location2.getProperties().setName("OA1");
location2.getProperties().setParentId(location.getId());
-
+
PhysicalLocation location3 = new PhysicalLocation();
location3.setId(UUID.randomUUID().toString());
location3.setProperties(new LocationProperty());
@@ -464,16 +470,16 @@ public void testGetUserAssignedLocationsAndPlansWithPlansShouldReturnActivePlans
location3.getProperties().setParentId(location.getId());
when(locationService.findLocationByIdsWithChildren(eq(false), any(), eq(Integer.MAX_VALUE)))
.thenReturn(Arrays.asList(location, location2, location3));
-
+
Authentication authentication = authenticatedUser.getSecond();
MvcResult result = mockMvc
.perform(get(BASE_URL + "/user-assignment")
.with(SecurityMockMvcRequestPostProcessors.authentication(authentication)))
.andExpect(status().isOk()).andReturn();
-
+
UserAssignmentBean userAssignment = objectMapper.readValue(result.getResponse().getContentAsString(),
UserAssignmentBean.class);
-
+
assertEquals(new HashSet<>(ids), userAssignment.getOrganizationIds());
assertEquals(2, userAssignment.getJurisdictions().size());
@@ -488,17 +494,17 @@ public void testGetUserAssignedLocationsAndPlansWithPlansShouldReturnActivePlans
assertTrue(userAssignment.getPlans().containsAll(activePlans));
Set inActivePlans = new HashSet<>(planIds);
inActivePlans.removeAll(activePlans);
-
+
verify(planService).getPlansByIdsReturnOptionalFields(ArgumentMatchers.argThat(arg -> arg.containsAll(planIds)),
eq(Arrays.asList(UserController.JURISDICTION, UserController.STATUS, UserController.EFFECTIVE_PERIOD)),
eq(false));
-
+
}
-
+
private Organization getOrganization() throws Exception {
return objectMapper.readValue(organizationJSON, Organization.class);
}
-
+
private OrganizationAssigmentBean[] getOrganizationAssignment() {
List organizationAssigmentBeans = new ArrayList<>();
Random random = new Random();
@@ -511,14 +517,14 @@ private OrganizationAssigmentBean[] getOrganizationAssignment() {
bean.setFromDate(new Date());
if (random.nextBoolean())
bean.setToDate(new Date());
-
+
}
return organizationAssigmentBeans.toArray(new OrganizationAssigmentBean[] {});
-
+
}
-
+
private List getOrganizationLocationsAssigned(boolean includePlans) {
- List organizationAssigmentBeans = new ArrayList<>();
+ List organizationAssignmentBeans = new ArrayList<>();
Random random = new Random();
for (int i = 0; i < 5; i++) {
AssignedLocations bean = new AssignedLocations();
@@ -531,21 +537,21 @@ private List getOrganizationLocationsAssigned(boolean include
bean.setFromDate(new Date());
if (random.nextBoolean())
bean.setToDate(new Date());
- organizationAssigmentBeans.add(bean);
-
+ organizationAssignmentBeans.add(bean);
+
}
- return organizationAssigmentBeans;
-
+ return organizationAssignmentBeans;
+
}
-
+
private Practitioner getPractioner() {
Practitioner practitioner = new Practitioner();
practitioner.setIdentifier("ID-123");
practitioner.setActive(Boolean.TRUE);
return practitioner;
-
+
}
-
+
private List getPlans(List assignedLocations) {
Random random = new Random();
return assignedLocations.stream().map(al -> {
@@ -556,9 +562,9 @@ private List getPlans(List assignedLocations)
plan.setStatus(random.nextBoolean() ? PlanStatus.ACTIVE : PlanStatus.COMPLETED);
return plan;
}).collect(Collectors.toList());
-
+
}
-
+
@Test
public void testGetSearchOrganizationWithParams() throws Exception {
List expected = new ArrayList<>();
@@ -569,26 +575,26 @@ public void testGetSearchOrganizationWithParams() throws Exception {
.perform(get(BASE_URL + "search/").param("name", "C Team").param("orderByFieldName", "id")
.param("pageNumber", "1").param("pageSize", "10").param("orderByType", "ASC"))
.andExpect(status().isOk()).andReturn();
-
+
verify(organizationService).getSearchOrganizations((OrganizationSearchBean) any());
verify(organizationService).findOrganizationCount((OrganizationSearchBean) any());
verifyNoMoreInteractions(organizationService);
assertEquals(objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL).writeValueAsString(expected),
result.getResponse().getContentAsString());
}
-
+
private Organization createSearchOrganization() throws JsonMappingException, JsonProcessingException {
String searchResponseJson = "{\"id\":3,\"identifier\":\"801874c0-d963-11e9-8a34-2a2ae2dbcce5\",\"active\":false,\"name\":\"C Team\",\"partOf\":2,\"memberCount\":2}";
-
+
Organization searchOrganization = objectMapper.readValue(searchResponseJson, Organization.class);
-
+
return searchOrganization;
}
@Test
public void testCreateOrganizationInBatch() throws Exception {
- String organizations = "["+ organizationJSON+"]";
+ String organizations = "[" + organizationJSON + "]";
mockMvc.perform(post(BASE_URL + "/add").contentType(MediaType.APPLICATION_JSON).content(organizations))
.andExpect(status().isCreated());
verify(organizationService).addOrUpdateOrganization(organizationArgumentCaptor.capture());
diff --git a/src/test/java/org/opensrp/web/rest/PractitionerResourceTest.java b/src/test/java/org/opensrp/web/rest/PractitionerResourceTest.java
index b73279ed2..39ac78b27 100755
--- a/src/test/java/org/opensrp/web/rest/PractitionerResourceTest.java
+++ b/src/test/java/org/opensrp/web/rest/PractitionerResourceTest.java
@@ -1,14 +1,17 @@
package org.opensrp.web.rest;
import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import com.google.gson.reflect.TypeToken;
+import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.opensrp.search.PractitionerSearchBean;
import org.opensrp.service.PractitionerService;
import org.smartregister.domain.Practitioner;
+import org.smartregister.utils.DateTimeTypeConverter;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.test.web.server.MvcResult;
@@ -46,6 +49,9 @@ public class PractitionerResourceTest extends BaseResourceTest {
private final String practitionerJson = "{\"identifier\":\"practitoner-1-identifier\",\"active\":true,\"name\":\"Practitioner\",\"userId\":\"user1\",\"username\":\"Practioner1\"}";
+ private final Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd'T'HHmm.ss.SSSZ")
+ .registerTypeAdapter(DateTime.class, new DateTimeTypeConverter()).create();
+
@Before
public void setUp() {
practitionerService = mock(PractitionerService.class);
@@ -54,32 +60,31 @@ public void setUp() {
}
@Test
- public void testGetPractitionersSHouldReturnAllPractitioners() throws Exception {
- List expectedPractitoiners = new ArrayList<>();
+ public void testGetPractitionersShouldReturnAllPractitioners() throws Exception {
+ List expectedPractitioners = new ArrayList<>();
Practitioner expectedPractitioner = initTestPractitioner1();
- expectedPractitoiners.add(expectedPractitioner);
+ expectedPractitioners.add(expectedPractitioner);
expectedPractitioner = initTestPractitioner2();
- expectedPractitoiners.add(expectedPractitioner);
+ expectedPractitioners.add(expectedPractitioner);
- doReturn(expectedPractitoiners).when(practitionerService).getAllPractitioners(any(PractitionerSearchBean.class));
+ doReturn(expectedPractitioners).when(practitionerService).getAllPractitioners(any(PractitionerSearchBean.class));
String actualPractitionersString = getResponseAsString(BASE_URL, null, MockMvcResultMatchers.status().isOk());
- List actualPractitioners = new Gson()
- .fromJson(actualPractitionersString, new TypeToken>() {
+ List actualPractitioners = gson.fromJson(actualPractitionersString, new TypeToken>() {
}.getType());
- assertListsAreSameIgnoringOrder(actualPractitioners, expectedPractitoiners);
+ assertListsAreSameIgnoringOrder(actualPractitioners, expectedPractitioners);
}
@Test
- public void testGetPractitionerByUniqueIdShouldReturnCorrectPractititoner() throws Exception {
- List expectedPractitoiners = new ArrayList<>();
+ public void testGetPractitionerByUniqueIdShouldReturnCorrectPractitioner() throws Exception {
+ List expectedPractitioners = new ArrayList<>();
Practitioner expectedPractitioner = initTestPractitioner1();
- expectedPractitoiners.add(expectedPractitioner);
+ expectedPractitioners.add(expectedPractitioner);
List practitionerIdList = new ArrayList<>();
practitionerIdList.add(expectedPractitioner.getIdentifier());
@@ -88,7 +93,7 @@ public void testGetPractitionerByUniqueIdShouldReturnCorrectPractititoner() thro
String actualPractitionersString = getResponseAsString(BASE_URL + "practitoner-1-identifier", null,
MockMvcResultMatchers.status().isOk());
- Practitioner actualPractitioner = new Gson().fromJson(actualPractitionersString, new TypeToken() {
+ Practitioner actualPractitioner = gson.fromJson(actualPractitionersString, new TypeToken() {
}.getType());
@@ -98,6 +103,9 @@ public void testGetPractitionerByUniqueIdShouldReturnCorrectPractititoner() thro
assertEquals(actualPractitioner.getName(), expectedPractitioner.getName());
assertEquals(actualPractitioner.getUsername(), expectedPractitioner.getUsername());
assertEquals(actualPractitioner.getActive(), expectedPractitioner.getActive());
+ assertEquals(actualPractitioner.getDateCreated(), expectedPractitioner.getDateCreated());
+ assertEquals(actualPractitioner.getDateEdited(), expectedPractitioner.getDateEdited());
+ assertEquals(actualPractitioner.getServerVersion(), expectedPractitioner.getServerVersion());
}
@@ -110,7 +118,7 @@ public void testGetPractitionerByUniqueIdSWithBlankIdentifierShouldReturnAnError
assertEquals("Practitioner Id is required", actualPractitioner);
}
@Test
- public void testGetPractitionerByUserIdShouldReturnCorrectPractititoner() throws Exception {
+ public void testGetPractitionerByUserIdShouldReturnCorrectPractitioner() throws Exception {
List expectedPractitioners = new ArrayList<>();
Practitioner expectedPractitioner = initTestPractitioner1();
@@ -123,7 +131,7 @@ public void testGetPractitionerByUserIdShouldReturnCorrectPractititoner() throws
String actualPractitionersString = getResponseAsString(BASE_URL + "/user/" + "user1", null,
MockMvcResultMatchers.status().isOk());
- Practitioner actualPractitioner = new Gson().fromJson(actualPractitionersString, new TypeToken() {
+ Practitioner actualPractitioner = gson.fromJson(actualPractitionersString, new TypeToken() {
}.getType());
@@ -133,6 +141,9 @@ public void testGetPractitionerByUserIdShouldReturnCorrectPractititoner() throws
assertEquals(actualPractitioner.getName(), expectedPractitioner.getName());
assertEquals(actualPractitioner.getUsername(), expectedPractitioner.getUsername());
assertEquals(actualPractitioner.getActive(), expectedPractitioner.getActive());
+ assertEquals(actualPractitioner.getDateCreated(), expectedPractitioner.getDateCreated());
+ assertEquals(actualPractitioner.getDateEdited(), expectedPractitioner.getDateEdited());
+ assertEquals(actualPractitioner.getServerVersion(), expectedPractitioner.getServerVersion());
}
@Test
@@ -161,7 +172,7 @@ public void testCreateShouldCreateNewPractitionerResource() throws Exception {
public void testUpdateShouldUpdateExistingPractitionerResource() throws Exception {
Practitioner expectedPractitioner = initTestPractitioner1();
- String practitionerJson = new Gson().toJson(expectedPractitioner, new TypeToken() {
+ String practitionerJson = gson.toJson(expectedPractitioner, new TypeToken() {
}.getType());
putRequestWithJsonContent(BASE_URL, practitionerJson, MockMvcResultMatchers.status().isCreated());
@@ -227,8 +238,7 @@ public void testGetPractitionersByPractitionerRoleIdentifierAndCode() throws Exc
String actualPractitionersString = getResponseAsString(
BASE_URL + "/report-to?practitionerIdentifier=test&code=testCode", null,
MockMvcResultMatchers.status().isOk());
- List actualPractitioners = new Gson()
- .fromJson(actualPractitionersString, new TypeToken>() {
+ List actualPractitioners = gson.fromJson(actualPractitionersString, new TypeToken>() {
}.getType());
@@ -238,6 +248,10 @@ public void testGetPractitionersByPractitionerRoleIdentifierAndCode() throws Exc
assertEquals(actualPractitioners.get(0).getName(), expectedPractitioner.getName());
assertEquals(actualPractitioners.get(0).getUsername(), expectedPractitioner.getUsername());
assertEquals(actualPractitioners.get(0).getActive(), expectedPractitioner.getActive());
+ assertEquals(actualPractitioners.get(0).getDateCreated(), expectedPractitioner.getDateCreated());
+ assertEquals(actualPractitioners.get(0).getDateEdited(), expectedPractitioner.getDateEdited());
+ assertEquals(actualPractitioners.get(0).getServerVersion(), expectedPractitioner.getServerVersion());
+
}
@Override
@@ -275,7 +289,7 @@ public void testBatchSaveWithJsonSyntaxException() throws Exception {
}
@Test
- public void testCountAllPractitioners() throws Exception {
+ public void testCountAllPractitioners() throws Exception {
doReturn(2L).when(practitionerService).countAllPractitioners();
MvcResult mvcResult = this.mockMvc.perform(get(BASE_URL + "count").accept(MediaType.APPLICATION_JSON))
.andExpect(MockMvcResultMatchers.status().isOk()).andReturn();
@@ -296,22 +310,30 @@ public void testCountAllPractitionersWithException() throws Exception {
}
private Practitioner initTestPractitioner1() {
+ DateTime dateCreated = DateTime.now();
Practitioner practitioner = new Practitioner();
practitioner.setIdentifier("practitoner-1-identifier");
practitioner.setActive(true);
practitioner.setName("Practitioner");
practitioner.setUsername("Practioner1");
practitioner.setUserId("user1");
+ practitioner.setDateCreated(dateCreated);
+ practitioner.setDateEdited(dateCreated);
+ practitioner.setServerVersion(1);
return practitioner;
}
private Practitioner initTestPractitioner2() {
+ DateTime dateCreated = DateTime.now();
Practitioner practitioner = new Practitioner();
practitioner.setIdentifier("practitoner-2-identifier");
practitioner.setActive(false);
practitioner.setName("Second Practitioner");
practitioner.setUsername("Practioner2");
practitioner.setUserId("user2");
+ practitioner.setDateCreated(dateCreated);
+ practitioner.setDateEdited(dateCreated);
+ practitioner.setServerVersion(2);
return practitioner;
}