package org.jhipster.health.web.rest; import org.elasticsearch.index.query.BoolQueryBuilder; import org.elasticsearch.index.query.QueryBuilders; import org.jhipster.health.TwentyOnePointsApp; import org.jhipster.health.domain.BloodPressure; import org.jhipster.health.domain.User; import org.jhipster.health.repository.BloodPressureRepository; import org.jhipster.health.repository.UserRepository; import org.jhipster.health.repository.search.BloodPressureSearchRepository; import org.jhipster.health.web.rest.errors.ExceptionTranslator; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.MockitoAnnotations; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.PageImpl; import org.springframework.data.domain.PageRequest; import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.context.WebApplicationContext; import javax.persistence.EntityManager; import java.time.Instant; import java.time.ZonedDateTime; import java.time.ZoneOffset; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.Collections; import java.util.List; import static org.hamcrest.Matchers.hasSize; import static org.jhipster.health.web.rest.TestUtil.sameInstant; import static org.jhipster.health.web.rest.TestUtil.createFormattingConversionService; import static org.assertj.core.api.Assertions.assertThat; import static org.elasticsearch.index.query.QueryBuilders.queryStringQuery; import static org.hamcrest.Matchers.hasItem; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user; import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; /** * Test class for the BloodPressureResource REST controller. * * @see BloodPressureResource */ @RunWith(SpringRunner.class) @SpringBootTest(classes = TwentyOnePointsApp.class) public class BloodPressureResourceIntTest { private static final ZonedDateTime DEFAULT_TIMESTAMP = ZonedDateTime.ofInstant(Instant.ofEpochMilli(0L), ZoneOffset.UTC); private static final ZonedDateTime UPDATED_TIMESTAMP = ZonedDateTime.now(ZoneId.systemDefault()).withNano(0); private static final Integer DEFAULT_SYSTOLIC = 1; private static final Integer UPDATED_SYSTOLIC = 2; private static final Integer DEFAULT_DIASTOLIC = 1; private static final Integer UPDATED_DIASTOLIC = 2; @Autowired private BloodPressureRepository bloodPressureRepository; @Autowired private UserRepository userRepository; /** * This repository is mocked in the org.jhipster.health.repository.search test package. * * @see org.jhipster.health.repository.search.BloodPressureSearchRepositoryMockConfiguration */ @Autowired private BloodPressureSearchRepository mockBloodPressureSearchRepository; @Autowired private MappingJackson2HttpMessageConverter jacksonMessageConverter; @Autowired private PageableHandlerMethodArgumentResolver pageableArgumentResolver; @Autowired private ExceptionTranslator exceptionTranslator; @Autowired private EntityManager em; @Autowired private WebApplicationContext context; private MockMvc restBloodPressureMockMvc; private BloodPressure bloodPressure; @Before public void setup() { MockitoAnnotations.initMocks(this); final BloodPressureResource bloodPressureResource = new BloodPressureResource(bloodPressureRepository, mockBloodPressureSearchRepository, userRepository); this.restBloodPressureMockMvc = MockMvcBuilders.standaloneSetup(bloodPressureResource) .setCustomArgumentResolvers(pageableArgumentResolver) .setControllerAdvice(exceptionTranslator) .setConversionService(createFormattingConversionService()) .setMessageConverters(jacksonMessageConverter).build(); } /** * Create an entity for this test. * * This is a static method, as tests for other entities might also need it, * if they test an entity which requires the current entity. */ public static BloodPressure createEntity(EntityManager em) { BloodPressure bloodPressure = new BloodPressure() .timestamp(DEFAULT_TIMESTAMP) .systolic(DEFAULT_SYSTOLIC) .diastolic(DEFAULT_DIASTOLIC); return bloodPressure; } @Before public void initTest() { bloodPressure = createEntity(em); } @Test @Transactional public void createBloodPressure() throws Exception { int databaseSizeBeforeCreate = bloodPressureRepository.findAll().size(); // create security-aware mockMvc restBloodPressureMockMvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); // Create the BloodPressure restBloodPressureMockMvc.perform(post("/api/blood-pressures") .with(user("user")) .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(bloodPressure))) .andExpect(status().isCreated()); // Validate the BloodPressure in the database List<BloodPressure> bloodPressureList = bloodPressureRepository.findAll(); assertThat(bloodPressureList).hasSize(databaseSizeBeforeCreate + 1); BloodPressure testBloodPressure = bloodPressureList.get(bloodPressureList.size() - 1); assertThat(testBloodPressure.getTimestamp()).isEqualTo(DEFAULT_TIMESTAMP); assertThat(testBloodPressure.getSystolic()).isEqualTo(DEFAULT_SYSTOLIC); assertThat(testBloodPressure.getDiastolic()).isEqualTo(DEFAULT_DIASTOLIC); // Validate the BloodPressure in Elasticsearch verify(mockBloodPressureSearchRepository, times(1)).save(testBloodPressure); } @Test @Transactional public void createBloodPressureWithExistingId() throws Exception { int databaseSizeBeforeCreate = bloodPressureRepository.findAll().size(); // Create the BloodPressure with an existing ID bloodPressure.setId(1L); // An entity with an existing ID cannot be created, so this API call must fail restBloodPressureMockMvc.perform(post("/api/blood-pressures") .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(bloodPressure))) .andExpect(status().isBadRequest()); // Validate the BloodPressure in the database List<BloodPressure> bloodPressureList = bloodPressureRepository.findAll(); assertThat(bloodPressureList).hasSize(databaseSizeBeforeCreate); // Validate the BloodPressure in Elasticsearch verify(mockBloodPressureSearchRepository, times(0)).save(bloodPressure); } @Test @Transactional public void checkTimestampIsRequired() throws Exception { int databaseSizeBeforeTest = bloodPressureRepository.findAll().size(); // set the field null bloodPressure.setTimestamp(null); // Create the BloodPressure, which fails. restBloodPressureMockMvc.perform(post("/api/blood-pressures") .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(bloodPressure))) .andExpect(status().isBadRequest()); List<BloodPressure> bloodPressureList = bloodPressureRepository.findAll(); assertThat(bloodPressureList).hasSize(databaseSizeBeforeTest); } @Test @Transactional public void checkSystolicIsRequired() throws Exception { int databaseSizeBeforeTest = bloodPressureRepository.findAll().size(); // set the field null bloodPressure.setSystolic(null); // Create the BloodPressure, which fails. restBloodPressureMockMvc.perform(post("/api/blood-pressures") .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(bloodPressure))) .andExpect(status().isBadRequest()); List<BloodPressure> bloodPressureList = bloodPressureRepository.findAll(); assertThat(bloodPressureList).hasSize(databaseSizeBeforeTest); } @Test @Transactional public void checkDiastolicIsRequired() throws Exception { int databaseSizeBeforeTest = bloodPressureRepository.findAll().size(); // set the field null bloodPressure.setDiastolic(null); // Create the BloodPressure, which fails. restBloodPressureMockMvc.perform(post("/api/blood-pressures") .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(bloodPressure))) .andExpect(status().isBadRequest()); List<BloodPressure> bloodPressureList = bloodPressureRepository.findAll(); assertThat(bloodPressureList).hasSize(databaseSizeBeforeTest); } @Test @Transactional public void getAllBloodPressures() throws Exception { // Initialize the database bloodPressureRepository.saveAndFlush(bloodPressure); restBloodPressureMockMvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); // Get all the bloodPressures restBloodPressureMockMvc.perform(get("/api/blood-pressures?sort=id,desc") .with(user("admin").roles("ADMIN"))) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) .andExpect(jsonPath("$.[*].id").value(hasItem(bloodPressure.getId().intValue()))) .andExpect(jsonPath("$.[*].timestamp").value(hasItem(sameInstant(DEFAULT_TIMESTAMP)))) .andExpect(jsonPath("$.[*].systolic").value(hasItem(DEFAULT_SYSTOLIC))) .andExpect(jsonPath("$.[*].diastolic").value(hasItem(DEFAULT_DIASTOLIC))); } @Test @Transactional public void getBloodPressure() throws Exception { // Initialize the database bloodPressureRepository.saveAndFlush(bloodPressure); // Get the bloodPressure restBloodPressureMockMvc.perform(get("/api/blood-pressures/{id}", bloodPressure.getId())) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) .andExpect(jsonPath("$.id").value(bloodPressure.getId().intValue())) .andExpect(jsonPath("$.timestamp").value(sameInstant(DEFAULT_TIMESTAMP))) .andExpect(jsonPath("$.systolic").value(DEFAULT_SYSTOLIC)) .andExpect(jsonPath("$.diastolic").value(DEFAULT_DIASTOLIC)); } @Test @Transactional public void getNonExistingBloodPressure() throws Exception { // Get the bloodPressure restBloodPressureMockMvc.perform(get("/api/blood-pressures/{id}", Long.MAX_VALUE)) .andExpect(status().isNotFound()); } @Test @Transactional public void updateBloodPressure() throws Exception { // Initialize the database bloodPressureRepository.saveAndFlush(bloodPressure); int databaseSizeBeforeUpdate = bloodPressureRepository.findAll().size(); // Update the bloodPressure BloodPressure updatedBloodPressure = bloodPressureRepository.findById(bloodPressure.getId()).get(); // Disconnect from session so that the updates on updatedBloodPressure are not directly saved in db em.detach(updatedBloodPressure); updatedBloodPressure .timestamp(UPDATED_TIMESTAMP) .systolic(UPDATED_SYSTOLIC) .diastolic(UPDATED_DIASTOLIC); restBloodPressureMockMvc.perform(put("/api/blood-pressures") .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(updatedBloodPressure))) .andExpect(status().isOk()); // Validate the BloodPressure in the database List<BloodPressure> bloodPressureList = bloodPressureRepository.findAll(); assertThat(bloodPressureList).hasSize(databaseSizeBeforeUpdate); BloodPressure testBloodPressure = bloodPressureList.get(bloodPressureList.size() - 1); assertThat(testBloodPressure.getTimestamp()).isEqualTo(UPDATED_TIMESTAMP); assertThat(testBloodPressure.getSystolic()).isEqualTo(UPDATED_SYSTOLIC); assertThat(testBloodPressure.getDiastolic()).isEqualTo(UPDATED_DIASTOLIC); // Validate the BloodPressure in Elasticsearch verify(mockBloodPressureSearchRepository, times(1)).save(testBloodPressure); } @Test @Transactional public void updateNonExistingBloodPressure() throws Exception { int databaseSizeBeforeUpdate = bloodPressureRepository.findAll().size(); // create security-aware mockMvc restBloodPressureMockMvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); // Create the BloodPressure // If the entity doesn't have an ID, it will throw BadRequestAlertException restBloodPressureMockMvc.perform(put("/api/blood-pressures") .with(user("user")) .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(bloodPressure))) .andExpect(status().isBadRequest()); // Validate the BloodPressure in the database List<BloodPressure> bloodPressureList = bloodPressureRepository.findAll(); assertThat(bloodPressureList).hasSize(databaseSizeBeforeUpdate); // Validate the BloodPressure in Elasticsearch verify(mockBloodPressureSearchRepository, times(0)).save(bloodPressure); } @Test @Transactional public void deleteBloodPressure() throws Exception { // Initialize the database bloodPressureRepository.saveAndFlush(bloodPressure); int databaseSizeBeforeDelete = bloodPressureRepository.findAll().size(); // Get the bloodPressure restBloodPressureMockMvc.perform(delete("/api/blood-pressures/{id}", bloodPressure.getId()) .accept(TestUtil.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()); // Validate the database is empty List<BloodPressure> bloodPressureList = bloodPressureRepository.findAll(); assertThat(bloodPressureList).hasSize(databaseSizeBeforeDelete - 1); // Validate the BloodPressure in Elasticsearch verify(mockBloodPressureSearchRepository, times(1)).deleteById(bloodPressure.getId()); } @Test @Transactional public void searchBloodPressure() throws Exception { // Initialize the database bloodPressureRepository.saveAndFlush(bloodPressure); BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery().must(queryStringQuery("id:" + bloodPressure.getId())); when(mockBloodPressureSearchRepository.search(queryBuilder, PageRequest.of(0, 20))) .thenReturn(new PageImpl<>(Collections.singletonList(bloodPressure), PageRequest.of(0, 1), 1)); // Search the bloodPressure restBloodPressureMockMvc.perform(get("/api/_search/blood-pressures?query=id:" + bloodPressure.getId())) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)) .andExpect(jsonPath("$.[*].id").value(hasItem(bloodPressure.getId().intValue()))) .andExpect(jsonPath("$.[*].timestamp").value(hasItem(sameInstant(DEFAULT_TIMESTAMP)))) .andExpect(jsonPath("$.[*].systolic").value(hasItem(DEFAULT_SYSTOLIC))) .andExpect(jsonPath("$.[*].diastolic").value(hasItem(DEFAULT_DIASTOLIC))); } @Test @Transactional public void equalsVerifier() throws Exception { TestUtil.equalsVerifier(BloodPressure.class); BloodPressure bloodPressure1 = new BloodPressure(); bloodPressure1.setId(1L); BloodPressure bloodPressure2 = new BloodPressure(); bloodPressure2.setId(bloodPressure1.getId()); assertThat(bloodPressure1).isEqualTo(bloodPressure2); bloodPressure2.setId(2L); assertThat(bloodPressure1).isNotEqualTo(bloodPressure2); bloodPressure1.setId(null); assertThat(bloodPressure1).isNotEqualTo(bloodPressure2); } private void createBloodPressureByMonth(ZonedDateTime firstDate, ZonedDateTime firstDayOfLastMonth) { User user = userRepository.findOneByLogin("user").get(); bloodPressure = new BloodPressure(firstDate, 120, 80, user); bloodPressureRepository.saveAndFlush(bloodPressure); bloodPressure = new BloodPressure(firstDate.plusDays(10), 125, 75, user); bloodPressureRepository.saveAndFlush(bloodPressure); bloodPressure = new BloodPressure(firstDate.plusDays(20), 100, 69, user); bloodPressureRepository.saveAndFlush(bloodPressure); // last month bloodPressure = new BloodPressure(firstDayOfLastMonth, 130, 90, user); bloodPressureRepository.saveAndFlush(bloodPressure); bloodPressure = new BloodPressure(firstDayOfLastMonth.plusDays(11), 135, 85, user); bloodPressureRepository.saveAndFlush(bloodPressure); bloodPressure = new BloodPressure(firstDayOfLastMonth.plusDays(23), 130, 75, user); bloodPressureRepository.saveAndFlush(bloodPressure); } @Test @Transactional public void getBloodPressureForLast30Days() throws Exception { ZonedDateTime now = ZonedDateTime.now(); ZonedDateTime twentyNineDaysAgo = now.minusDays(29); ZonedDateTime firstDayOfLastMonth = now.withDayOfMonth(1).minusMonths(1); createBloodPressureByMonth(twentyNineDaysAgo, firstDayOfLastMonth); // create security-aware mockMvc restBloodPressureMockMvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); // Get all the blood pressure readings restBloodPressureMockMvc.perform(get("/api/blood-pressures") .with(user("user").roles("USER"))) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$", hasSize(6))); // Get the blood pressure readings for the last 30 days restBloodPressureMockMvc.perform(get("/api/bp-by-days/{days}", 30) .with(user("user").roles("USER"))) .andDo(print()) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.period").value("Last 30 Days")) .andExpect(jsonPath("$.readings.[*].systolic").value(hasItem(120))) .andExpect(jsonPath("$.readings.[*].diastolic").value(hasItem(69))); } @Test @Transactional public void getBloodPressureByMonth() throws Exception { ZonedDateTime now = ZonedDateTime.now(); ZonedDateTime firstOfMonth = now.withDayOfMonth(1); ZonedDateTime firstDayOfLastMonth = firstOfMonth.minusMonths(1); createBloodPressureByMonth(firstOfMonth, firstDayOfLastMonth); // create security-aware mockMvc restBloodPressureMockMvc = MockMvcBuilders .webAppContextSetup(context) .apply(springSecurity()) .build(); DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM"); // Get the points for last week restBloodPressureMockMvc.perform(get("/api/bp-by-month/{yearAndMonth}", fmt.format(firstDayOfLastMonth)) .with(user("user").roles("USER"))) .andDo(print()) .andExpect(status().isOk()) .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.period").value(fmt.format(firstDayOfLastMonth))) .andExpect(jsonPath("$.readings.[*].systolic").value(hasItem(130))) .andExpect(jsonPath("$.readings.[*].diastolic").value(hasItem(90))); } }