Package com.nayidisha.pointy.api

Source Code of com.nayidisha.pointy.api.ReportingControllerFunctionalTests

package com.nayidisha.pointy.api;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup;

import java.io.IOException;
import java.util.List;

import javax.inject.Inject;

import org.apache.commons.lang3.time.DateUtils;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.annotate.JsonSerialize;
import org.codehaus.jackson.type.TypeReference;
import org.joda.time.DateTime;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.ContextHierarchy;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.util.Assert;
import org.springframework.web.context.WebApplicationContext;

import com.nayidisha.pointy.domain.Patient;
import com.nayidisha.pointy.dto.VisitFrequency;
import com.nayidisha.pointy.services.patient.PatientService;
import com.nayidisha.pointy.services.reporting.ReportingService;
import com.nayidisha.pointy.support.ApiResponse;

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextHierarchy({
  @ContextConfiguration("/META-INF/spring/api-bootstrap-context.xml")
})
public class ReportingControllerFunctionalTests {

  private static final Logger LOG = LoggerFactory.getLogger(ReportingControllerFunctionalTests.class);
 
  @Inject
  private WebApplicationContext wac; 

  @Inject
  private PatientService patientService;

  @Inject
  private ReportingService reportingService;
 
  @Inject
  private ObjectMapper jacksonObjectMapper;
 
  private Long createdPatientId1;
  private Long createdPatientId2;
  private Long createdPatientId25;
  private Long createdPatientId3;
  private Long createdPatientId4;
 
  private MockMvc mockMvc;
 
  private DateTime today;
  private DateTime todayInTheAM;
  private DateTime todayInThePM;
  private DateTime tomorrow;
  private DateTime dayAfter;
  private DateTime yesterday;
  @Before
  public void setup() {
    this.mockMvc = webAppContextSetup(this.wac).build();
   
    today = new DateTime();
    int todaysYear = today.getYear();
    int todaysMonth = today.getMonthOfYear();
    int todaysDay = today.getDayOfMonth();
    todayInTheAM = new DateTime(todaysYear, todaysMonth, todaysDay, 10, 15); //10:15 am
    todayInThePM = new DateTime(todaysYear, todaysMonth, todaysDay, 14, 25); //2:25 pm
   
   
    tomorrow = today.plusDays(1);
    dayAfter = tomorrow.plusDays(1);
    yesterday = today.minusDays(1);
   
    Patient patient1 = this.createTestPatient(yesterday);
    Patient patient2 = this.createTestPatient(todayInTheAM);
    Patient patient25 = this.createTestPatient(todayInThePM);
    Patient patient3 = this.createTestPatient(tomorrow);
    Patient patient4 = this.createTestPatient(dayAfter);
   
    patientService.createPatient(patient1);
    patientService.createPatient(patient2);
    patientService.createPatient(patient25);
    patientService.createPatient(patient3);
    patientService.createPatient(patient4);
    createdPatientId1 = patient1.getId();
    createdPatientId2 = patient2.getId();
    createdPatientId25 = patient25.getId();
    createdPatientId3 = patient3.getId();
    createdPatientId4 = patient4.getId();
  }
 
  @Test
  public void testGettingAllVisitFreqs() throws Exception {
    ResultActions resultActions = this.mockMvc.perform(get("/reporting/visitFrequency" )
        .accept(MediaType.APPLICATION_JSON));
    String result = resultActions.andReturn().getResponse().getContentAsString();
    LOG.debug("RestultActons: " + result) ;
   
    resultActions.andExpect(status().isOk());
    ApiResponse<List<VisitFrequency>> apiResponse = jsonToObject(result);

    List<VisitFrequency> vfList = apiResponse.getPayload();
    int days = 0;
    for (VisitFrequency visitFrequency : vfList) {
      if (DateUtils.isSameDay(visitFrequency.getVisitDate(), yesterday.toDate())){
        Assert.isTrue(visitFrequency.getNumberOfVisits() == 1);
        days++;
      }
      if (DateUtils.isSameDay(visitFrequency.getVisitDate(), today.toDate())){
        Assert.isTrue(visitFrequency.getNumberOfVisits() == 2);
        days++;
      }
      if (DateUtils.isSameDay(visitFrequency.getVisitDate(), tomorrow.toDate())){
        Assert.isTrue(visitFrequency.getNumberOfVisits() == 1);
        days++;
      }
      if (DateUtils.isSameDay(visitFrequency.getVisitDate(), dayAfter.toDate())){
        Assert.isTrue(visitFrequency.getNumberOfVisits() == 1);
        days++;
      }
    }   
    Assert.isTrue(days >= 4);
 
 
  @After
  public void afterEach() {
    patientService.deletePatient(createdPatientId1);
    patientService.deletePatient(createdPatientId2);
    patientService.deletePatient(createdPatientId25);
    patientService.deletePatient(createdPatientId3);
    patientService.deletePatient(createdPatientId4);
   
  }
 
  private  ApiResponse<List<VisitFrequency>> jsonToObject(String jsonString) throws IOException {
    jacksonObjectMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
    return jacksonObjectMapper.readValue(jsonString, new TypeReference<ApiResponse<List<VisitFrequency>>>() {});
  }
 
  private Patient createTestPatient(DateTime datetime) {
    Patient patient = new Patient();
    patient.setFirstName("aFirstName");
    patient.setLastName("aLastName");
    patient.setAddress("anAddress");
    patient.setCity("aCity");
    patient.setState("aState");
    patient.setVisitDate(datetime.toDate());
    return patient;
  }
}
TOP

Related Classes of com.nayidisha.pointy.api.ReportingControllerFunctionalTests

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.