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);
}
}