package org.dicadeveloper.weplantaforest.inject;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.fail;
import java.io.File;
import javax.transaction.Transactional;
import org.dicadeveloper.weplantaforest.FileSystemInjector;
import org.dicadeveloper.weplantaforest.abo.AboRepository;
import org.dicadeveloper.weplantaforest.admin.codes.TeamRepository;
import org.dicadeveloper.weplantaforest.cart.CartRepository;
import org.dicadeveloper.weplantaforest.certificate.CertificateRepository;
import org.dicadeveloper.weplantaforest.common.testSupport.CleanDbRule;
import org.dicadeveloper.weplantaforest.dev.inject.DatabasePopulator;
import org.dicadeveloper.weplantaforest.gift.GiftRepository;
import org.dicadeveloper.weplantaforest.projects.ProjectArticleRepository;
import org.dicadeveloper.weplantaforest.projects.ProjectImageRepository;
import org.dicadeveloper.weplantaforest.projects.ProjectRepository;
import org.dicadeveloper.weplantaforest.trees.TreeRepository;
import org.dicadeveloper.weplantaforest.treetypes.TreeTypeRepository;
import org.dicadeveloper.weplantaforest.user.UserRepository;
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.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_EACH_TEST_METHOD)
public class DatabasePopulatorTest {
@Rule
@Autowired
public CleanDbRule _cleanDbRule;
@Autowired
private DatabasePopulator _databasePopulator;
@Autowired
private TreeTypeRepository _treeTypeRepository;
@Autowired
private TreeRepository _treeRepository;
@Autowired
private UserRepository _userRepository;
@Autowired
private ProjectArticleRepository _projectArticleRepository;
@Autowired
private ProjectRepository _projectRepository;
@Autowired
private ProjectImageRepository _projectImageRepository;
@Autowired
private TeamRepository _teamRepository;
@Autowired
private CartRepository _cartRepository;
@Autowired
private CertificateRepository _certificateRepository;
@Autowired
private GiftRepository _giftRepository;
@Autowired
private AboRepository _aboRepository;
@Test
public void testInsertUsers() throws Exception {
_databasePopulator.insertUsers();
assertThat(_userRepository.count()).isEqualTo(16);
}
@Test
public void testInsertDefaultTreeTypes() throws Exception {
_databasePopulator.insertDefaultTreeTypes();
assertThat(_treeTypeRepository.count()).isEqualTo(11);
}
@Test
public void testInsertTrees_noTypes() throws Exception {
try {
_databasePopulator.insertTrees(10);
fail("should throw exception");
} catch (Exception e) {
assertThat(e.getMessage()).isEqualTo("No ProjectArticles set up!");
}
}
@Test
public void testInsertTrees() throws Exception {
_databasePopulator.insertUsers();
_databasePopulator.insertDefaultTreeTypes();
_databasePopulator.insertProjects();
_databasePopulator.insertProjectArticles();
_databasePopulator.insertTrees(1000);
assertThat(_treeRepository.count()).isEqualTo(1000);
}
@Test
public void testInsertProjectArticles() throws Exception {
_databasePopulator.insertUsers();
_databasePopulator.insertDefaultTreeTypes();
_databasePopulator.insertProjects();
_databasePopulator.insertProjectArticles();
long activeProjectCount = _projectRepository.count();
assertThat(_projectArticleRepository.count()).isEqualTo(activeProjectCount * 5);
}
@Test
public void testInsertProjectImages() {
_databasePopulator.insertUsers();
_databasePopulator.insertDefaultTreeTypes();
_databasePopulator.insertProjects();
_databasePopulator.insertProjectImages();
assertThat(_projectImageRepository.count()).isEqualTo(50);
}
@Test
public void testInsertTeams() {
_databasePopulator.insertUsers();
_databasePopulator.insertTeams();
assertThat(_teamRepository.count()).isEqualTo(5);
}
@Test
public void testcreateProjectFoldersAndInsertMainImages() {
_databasePopulator.insertUsers();
_databasePopulator.insertProjects();
_databasePopulator.createProjectImageFoldersAndAddMainImages();
_databasePopulator.copyAndRenameProjectImagesToProjectFolders();
assertThat(_projectRepository.count() * 7).isEqualTo(new File(FileSystemInjector.getImageFolderForProjects()).listFiles().length);
}
@Test
public void testAddUserImages() {
_databasePopulator.addUserAndTeamImages();
File userImageFolder = new File(FileSystemInjector.getUserFolder());
int imageCount = userImageFolder.listFiles().length;
assertThat(imageCount).isEqualTo(4);
}
@Test
@Transactional
public void testInsertCartAndCertificateToCart() {
_databasePopulator.insertUsers();
_databasePopulator.insertDefaultTreeTypes();
_databasePopulator.insertProjects();
_databasePopulator.insertProjectArticles();
_databasePopulator.insertCartAndCertificateToCart();
assertThat(_cartRepository.count()).isEqualTo(1L);
assertThat(_certificateRepository.count()).isEqualTo(1L);
}
@Test
public void testInsertGifts() {
_databasePopulator.insertUsers();
_databasePopulator.insertGifts();
assertThat(_giftRepository.count()).isEqualTo(10);
}
@Test
public void testInsertAbo() {
_databasePopulator.insertUsers();
_databasePopulator.insertAbo();
assertThat(_aboRepository.count()).isEqualTo(1);
}
}