package org.dicadeveloper.weplantaforest.reports.projects;
import static org.assertj.core.api.Assertions.assertThat;
import org.dicadeveloper.weplantaforest.common.testSupport.CleanDbRule;
import org.dicadeveloper.weplantaforest.dev.inject.DatabasePopulator;
import org.dicadeveloper.weplantaforest.testsupport.DbInjecter;
import org.dicadeveloper.weplantaforest.trees.TreeRepository;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.annotation.DirtiesContext.ClassMode;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest({ "spring.profiles.active=test" })
@DirtiesContext(classMode = ClassMode.AFTER_CLASS)
public class ProjectReportRepositoryIntegrationTest {
@Rule
@Autowired
public CleanDbRule _cleanDbRule;
@Autowired
public DatabasePopulator _databasePopulator;
@Autowired
public DbInjecter _dbInjecter;
@Autowired
private ProjectReportRepository _projectReportRepository;
@Autowired
private TreeRepository _treeRepository;
static long timeOfPlanting;
static boolean entitiesInjected = false;
@Before
public void setupDb() {
if (!entitiesInjected) {
timeOfPlanting = System.currentTimeMillis();
_dbInjecter.injectTreeType("wood", "wooddesc", 0.5);
_dbInjecter.injectTreeType("doow", "wooddesc", 0.5);
_dbInjecter.injectUser("Adam");
_dbInjecter.injectProject("Project B", "Adam", "projectdesc", true, 1.0f, 2.0f);
_dbInjecter.injectProject("Project A", "Adam", "projectdesc", true, 1.0f, 2.0f);
_dbInjecter.injectProjectArticle("wood", "Project A", 100, 1.0, 0.5);
_dbInjecter.injectProjectArticle("doow", "Project A", 200, 1.0, 0.5);
_dbInjecter.injectProjectArticle("wood", "Project B", 300, 1.0, 0.5);
_dbInjecter.injectProjectArticle("doow", "Project B", 500, 1.0, 0.5);
entitiesInjected = true;
}
}
@After
public void clearTreeTable(){
_treeRepository.deleteAll();
}
@Test
public void testGetActiveProjectReportWithoutPlantedTrees() {
Page<ProjectReportData> projects = _projectReportRepository.getAllProjects(new PageRequest(0, 5));
assertThat(projects.getTotalElements()).isEqualTo(2);
assertThat(projects.getContent()
.get(0)
.getProjectId()).isEqualTo(2);
assertThat(projects.getContent()
.get(0)
.getProjectName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getProjectImageFileName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(0)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(0)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(0)
.getAmountOfMaximumTreesToPlant()).isEqualTo(300);
assertThat(projects.getContent()
.get(0)
.getAmountOfPlantedTrees()).isEqualTo(0);
assertThat(projects.getContent()
.get(0)
.isActive()).isEqualTo(true);
}
@Test
public void testGetActiveProjectReportOneTreeTypePlanted() {
_dbInjecter.injectTreeToProject("wood", "Adam", 10, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("wood", "Adam", 10, timeOfPlanting, "Project A");
Page<ProjectReportData> projects = _projectReportRepository.getAllProjects(new PageRequest(0, 5));
assertThat(projects.getTotalElements()).isEqualTo(2);
assertThat(projects.getContent()
.get(0)
.getProjectName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getProjectImageFileName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(0)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(0)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(0)
.getAmountOfMaximumTreesToPlant()).isEqualTo(300);
assertThat(projects.getContent()
.get(0)
.getAmountOfPlantedTrees()).isEqualTo(20);
}
@Test
public void testGetActiveProjectReportWithPlantedTrees() {
_dbInjecter.injectTreeToProject("wood", "Adam", 10, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("wood", "Adam", 10, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("doow", "Adam", 30, timeOfPlanting, "Project A");
Page<ProjectReportData> projects = _projectReportRepository.getAllProjects(new PageRequest(0, 5));
assertThat(projects.getTotalElements()).isEqualTo(2);
assertThat(projects.getContent()
.get(0)
.getProjectName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getProjectImageFileName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(0)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(0)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(0)
.getAmountOfMaximumTreesToPlant()).isEqualTo(300);
assertThat(projects.getContent()
.get(0)
.getAmountOfPlantedTrees()).isEqualTo(50);
}
@Test
public void testGetActiveProjectReportWithTwoProjectsWithoutPlantedTrees() {
Page<ProjectReportData> projects = _projectReportRepository.getAllProjects(new PageRequest(0, 5));
assertThat(projects.getTotalElements()).isEqualTo(2);
assertThat(projects.getContent()
.get(0)
.getProjectName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getProjectImageFileName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(0)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(0)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(0)
.getAmountOfMaximumTreesToPlant()).isEqualTo(300);
assertThat(projects.getContent()
.get(0)
.getAmountOfPlantedTrees()).isEqualTo(0);
assertThat(projects.getContent()
.get(1)
.getProjectName()).isEqualTo("Project B");
assertThat(projects.getContent()
.get(1)
.getProjectImageFileName()).isEqualTo("Project B");
assertThat(projects.getContent()
.get(1)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(1)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(1)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(1)
.getAmountOfMaximumTreesToPlant()).isEqualTo(800);
assertThat(projects.getContent()
.get(1)
.getAmountOfPlantedTrees()).isEqualTo(0);
}
@Test
public void testGetActiveProjectReportWithTwoProjectsWithPlantedTrees() {
_dbInjecter.injectTreeToProject("wood", "Adam", 50, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("doow", "Adam", 30, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("wood", "Adam", 20, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("wood", "Adam", 100, timeOfPlanting, "Project B");
_dbInjecter.injectTreeToProject("wood", "Adam", 100, timeOfPlanting, "Project B");
_dbInjecter.injectTreeToProject("doow", "Adam", 200, timeOfPlanting, "Project B");
Page<ProjectReportData> projects = _projectReportRepository.getAllProjects(new PageRequest(0, 5));
assertThat(projects.getTotalElements()).isEqualTo(2);
assertThat(projects.getContent()
.get(0)
.getProjectName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getProjectImageFileName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(0)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(0)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(0)
.getAmountOfMaximumTreesToPlant()).isEqualTo(300);
assertThat(projects.getContent()
.get(0)
.getAmountOfPlantedTrees()).isEqualTo(100);
assertThat(projects.getContent()
.get(1)
.getProjectName()).isEqualTo("Project B");
assertThat(projects.getContent()
.get(1)
.getProjectImageFileName()).isEqualTo("Project B");
assertThat(projects.getContent()
.get(1)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(1)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(1)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(1)
.getAmountOfMaximumTreesToPlant()).isEqualTo(800);
assertThat(projects.getContent()
.get(1)
.getAmountOfPlantedTrees()).isEqualTo(400);
}
@Test
public void testGetActiveProjectReportWithTwoProjectsOneWithoutPlantedTrees() {
_dbInjecter.injectTreeToProject("wood", "Adam", 50, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("doow", "Adam", 30, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("wood", "Adam", 20, timeOfPlanting, "Project A");
Page<ProjectReportData> projects = _projectReportRepository.getAllProjects(new PageRequest(0, 5));
assertThat(projects.getTotalElements()).isEqualTo(2);
assertThat(projects.getContent()
.get(0)
.getProjectName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getProjectImageFileName()).isEqualTo("Project A");
assertThat(projects.getContent()
.get(0)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(0)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(0)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(0)
.getAmountOfMaximumTreesToPlant()).isEqualTo(300);
assertThat(projects.getContent()
.get(0)
.getAmountOfPlantedTrees()).isEqualTo(100);
assertThat(projects.getContent()
.get(1)
.getProjectName()).isEqualTo("Project B");
assertThat(projects.getContent()
.get(1)
.getProjectImageFileName()).isEqualTo("Project B");
assertThat(projects.getContent()
.get(1)
.getDescription()).isEqualTo("projectdesc");
assertThat(projects.getContent()
.get(1)
.getLatitude()).isEqualTo(1.0f);
assertThat(projects.getContent()
.get(1)
.getLongitude()).isEqualTo(2.0f);
assertThat(projects.getContent()
.get(1)
.getAmountOfMaximumTreesToPlant()).isEqualTo(800);
assertThat(projects.getContent()
.get(1)
.getAmountOfPlantedTrees()).isEqualTo(0);
}
@Test
public void testGetProjectByProjectName() {
_dbInjecter.injectTreeToProject("wood", "Adam", 50, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("doow", "Adam", 30, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("wood", "Adam", 20, timeOfPlanting, "Project A");
ProjectReportData project = _projectReportRepository.getProjectDataByProjectName("Project A");
assertThat(project.getProjectName()).isEqualTo("Project A");
assertThat(project.getProjectImageFileName()).isEqualTo("Project A");
assertThat(project.getDescription()).isEqualTo("projectdesc");
assertThat(project.getLatitude()).isEqualTo(1.0f);
assertThat(project.getLongitude()).isEqualTo(2.0f);
assertThat(project.getAmountOfMaximumTreesToPlant()).isEqualTo(300);
assertThat(project.getAmountOfPlantedTrees()).isEqualTo(100);
}
@Test
public void testGetProjectByProjectNameFalse() {
_dbInjecter.injectTreeToProject("wood", "Adam", 50, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("doow", "Adam", 30, timeOfPlanting, "Project A");
_dbInjecter.injectTreeToProject("wood", "Adam", 20, timeOfPlanting, "Project A");
ProjectReportData project = _projectReportRepository.getProjectDataByProjectName("Project A");
assertThat(project.getProjectName()).isEqualTo("Project A");
assertThat(project.getProjectImageFileName()).isEqualTo("Project A");
assertThat(project.getDescription()).isEqualTo("projectdesc");
assertThat(project.getLatitude()).isEqualTo(1.0f);
assertThat(project.getLongitude()).isEqualTo(2.0f);
assertThat(project.getAmountOfMaximumTreesToPlant()).isEqualTo(300);
assertThat(project.getAmountOfPlantedTrees()).isEqualTo(100);
}
}