package com.worktajm.web.rest; import com.worktajm.Application; import com.worktajm.domain.Project; import com.worktajm.repository.ProjectRepository; import com.worktajm.service.ProjectService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import static org.hamcrest.Matchers.hasItem; import org.mockito.MockitoAnnotations; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.http.MediaType; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.data.web.PageableHandlerMethodArgumentResolver; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.util.ReflectionTestUtils; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import javax.inject.Inject; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; /** * Test class for the ProjectResource REST controller. * * @see ProjectResource */ @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebAppConfiguration @IntegrationTest public class ProjectResourceIntTest { private static final String DEFAULT_NAME = "AAAAA"; private static final String UPDATED_NAME = "BBBBB"; private static final String DEFAULT_DESCRIPTION = "AAAAA"; private static final String UPDATED_DESCRIPTION = "BBBBB"; @Inject private ProjectRepository projectRepository; @Inject private ProjectService projectService; @Inject private MappingJackson2HttpMessageConverter jacksonMessageConverter; @Inject private PageableHandlerMethodArgumentResolver pageableArgumentResolver; private MockMvc restProjectMockMvc; private Project project; @PostConstruct public void setup() { MockitoAnnotations.initMocks(this); ProjectResource projectResource = new ProjectResource(); ReflectionTestUtils.setField(projectResource, "projectService", projectService); this.restProjectMockMvc = MockMvcBuilders.standaloneSetup(projectResource) .setCustomArgumentResolvers(pageableArgumentResolver) .setMessageConverters(jacksonMessageConverter).build(); } @Before public void initTest() { project = new Project(); project.setName(DEFAULT_NAME); project.setDescription(DEFAULT_DESCRIPTION); } @Test @Transactional public void createProject() throws Exception { int databaseSizeBeforeCreate = projectRepository.findAll().size(); // Create the Project restProjectMockMvc.perform(post("/api/projects") .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(project))) .andExpect(status().isCreated()); // Validate the Project in the database List<Project> projects = projectRepository.findAll(); assertThat(projects).hasSize(databaseSizeBeforeCreate + 1); Project testProject = projects.get(projects.size() - 1); assertThat(testProject.getName()).isEqualTo(DEFAULT_NAME); assertThat(testProject.getDescription()).isEqualTo(DEFAULT_DESCRIPTION); } @Test @Transactional public void checkNameIsRequired() throws Exception { int databaseSizeBeforeTest = projectRepository.findAll().size(); // set the field null project.setName(null); // Create the Project, which fails. restProjectMockMvc.perform(post("/api/projects") .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(project))) .andExpect(status().isBadRequest()); List<Project> projects = projectRepository.findAll(); assertThat(projects).hasSize(databaseSizeBeforeTest); } @Test @Transactional public void getAllProjects() throws Exception { // Initialize the database projectRepository.saveAndFlush(project); // Get all the projects restProjectMockMvc.perform(get("/api/projects?sort=id,desc")) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.[*].id").value(hasItem(project.getId().intValue()))) .andExpect(jsonPath("$.[*].name").value(hasItem(DEFAULT_NAME.toString()))) .andExpect(jsonPath("$.[*].description").value(hasItem(DEFAULT_DESCRIPTION.toString()))); } @Test @Transactional public void getProject() throws Exception { // Initialize the database projectRepository.saveAndFlush(project); // Get the project restProjectMockMvc.perform(get("/api/projects/{id}", project.getId())) .andExpect(status().isOk()) .andExpect(content().contentType(MediaType.APPLICATION_JSON)) .andExpect(jsonPath("$.id").value(project.getId().intValue())) .andExpect(jsonPath("$.name").value(DEFAULT_NAME.toString())) .andExpect(jsonPath("$.description").value(DEFAULT_DESCRIPTION.toString())); } @Test @Transactional public void getNonExistingProject() throws Exception { // Get the project restProjectMockMvc.perform(get("/api/projects/{id}", Long.MAX_VALUE)) .andExpect(status().isNotFound()); } @Test @Transactional public void updateProject() throws Exception { // Initialize the database projectRepository.saveAndFlush(project); int databaseSizeBeforeUpdate = projectRepository.findAll().size(); // Update the project project.setName(UPDATED_NAME); project.setDescription(UPDATED_DESCRIPTION); restProjectMockMvc.perform(put("/api/projects") .contentType(TestUtil.APPLICATION_JSON_UTF8) .content(TestUtil.convertObjectToJsonBytes(project))) .andExpect(status().isOk()); // Validate the Project in the database List<Project> projects = projectRepository.findAll(); assertThat(projects).hasSize(databaseSizeBeforeUpdate); Project testProject = projects.get(projects.size() - 1); assertThat(testProject.getName()).isEqualTo(UPDATED_NAME); assertThat(testProject.getDescription()).isEqualTo(UPDATED_DESCRIPTION); } @Test @Transactional public void deleteProject() throws Exception { // Initialize the database projectRepository.saveAndFlush(project); int databaseSizeBeforeDelete = projectRepository.findAll().size(); // Get the project restProjectMockMvc.perform(delete("/api/projects/{id}", project.getId()) .accept(TestUtil.APPLICATION_JSON_UTF8)) .andExpect(status().isOk()); // Validate the database is empty List<Project> projects = projectRepository.findAll(); assertThat(projects).hasSize(databaseSizeBeforeDelete - 1); } }