package org.dicadeveloper.weplantaforest.admin.codes; import static org.assertj.core.api.Assertions.assertThat; import java.math.BigDecimal; import java.util.List; import javax.transaction.Transactional; import org.dicadeveloper.weplantaforest.cart.Cart; import org.dicadeveloper.weplantaforest.cart.CartItem; import org.dicadeveloper.weplantaforest.cart.CartRepository; import org.dicadeveloper.weplantaforest.code.Code; import org.dicadeveloper.weplantaforest.common.testSupport.CleanDbRule; import org.dicadeveloper.weplantaforest.dev.inject.DatabasePopulator; import org.dicadeveloper.weplantaforest.gift.Gift.Status; import org.dicadeveloper.weplantaforest.projects.ProjectArticleRepository; import org.dicadeveloper.weplantaforest.testsupport.DbInjecter; import org.dicadeveloper.weplantaforest.trees.Tree; 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 CartRepositoryIntegrationTest { @Rule @Autowired public CleanDbRule _cleanDbRule; @Autowired public DatabasePopulator _databasePopulator; @Autowired public DbInjecter _dbInjecter; @Autowired private CartRepository _cartRepository; @Autowired private UserRepository _userRepository; @Autowired private TreeRepository _treeRepository; @Autowired private TreeTypeRepository _treeTypeRepository; @Autowired private ProjectArticleRepository _projectArticleRepository; @Test @Transactional public void testSaveCartWithCartItem() { long timeOfPlanting = System.currentTimeMillis(); _dbInjecter.injectUser("Adam"); _dbInjecter.injectTreeType("wood", "wood desc", 0.5); _dbInjecter.injectProject("Project A", "Adam", "desc", true, 1.0f, 2.0f); _dbInjecter.injectProjectArticle("wood", "Project A", 100, 1.0, 0.5); Cart cart = new Cart(); cart.setBuyer(_userRepository.findByName("Adam")); Tree tree = new Tree(); tree.setAmount(2); tree.setPlantedOn(timeOfPlanting); tree.setProjectArticle(_projectArticleRepository.findOne(1L)); tree.setTreeType(_treeTypeRepository.findOne(1L)); CartItem cartItem = new CartItem(); cartItem.setTree(tree); cart.addCartItem(cartItem); _cartRepository.save(cart); Cart savedCart = _cartRepository.findOne(1L); assertThat(savedCart.getCartItems() .size()).isEqualTo(1); assertThat(savedCart.getTrees() .size()).isEqualTo(1); assertThat(savedCart.getCartItems() .get(0) .getCart() .getId()).isEqualTo(1L); CartItem cartItemInCart = savedCart.getCartItems() .get(0); assertThat(cartItemInCart.getAmount()).isEqualTo(2); assertThat(cartItemInCart.getBasePricePerPiece() .doubleValue()).isEqualTo(1.0); assertThat(cartItemInCart.getFundingPerPiece() .doubleValue()).isEqualTo(0.0); assertThat(cartItemInCart.getProjectArticleId()).isEqualTo(1); assertThat(cartItemInCart.getScontoPerPiece() .doubleValue()).isEqualTo(0.0); assertThat(cartItemInCart.getTotalPrice() .doubleValue()).isEqualTo(2.0); } @Test public void testGetCartsByCartIds() { _dbInjecter.injectUser("Adam"); Cart cart = new Cart(); cart.setBuyer(_userRepository.findByName("Adam")); _cartRepository.save(cart); Cart cart2 = new Cart(); cart2.setBuyer(_userRepository.findByName("Adam")); _cartRepository.save(cart2); Long[] cartIds = { 1L, 2L }; List<Cart> carts = _cartRepository.findCartsByIdIn(cartIds); assertThat(carts.size()).isEqualTo(2); } @Test public void testFindCartByCode() { _dbInjecter.injectUser("Adam"); Code code = _dbInjecter.injectGiftWithCode("Adam", Status.UNREDEEMED); Cart cart = new Cart(); cart.setCode(code); cart.setBuyer(_userRepository.findByName("Adam")); _cartRepository.save(cart); Cart savedCart = _cartRepository.findCartByCode(code.getCode()); assertThat(savedCart).isNotNull(); assertThat(savedCart.getBuyer() .getName()).isEqualTo("Adam"); } @Test @Transactional public void testDeleteCart() { long timeOfPlanting = System.currentTimeMillis(); _dbInjecter.injectUser("Adam"); _dbInjecter.injectTreeType("wood", "wood desc", 0.5); _dbInjecter.injectProject("Project A", "Adam", "desc", true, 1.0f, 2.0f); _dbInjecter.injectProjectArticle("wood", "Project A", 100, 1.0, 0.5); Cart cart = new Cart(); cart.setBuyer(_userRepository.findByName("Adam")); Tree tree = new Tree(); tree.setAmount(1); tree.setPlantedOn(timeOfPlanting); tree.setSubmittedOn(timeOfPlanting); tree.setTreeType(_treeTypeRepository.findOne(1L)); tree.setProjectArticle(_projectArticleRepository.findOne(1L)); CartItem cartItem = new CartItem(); cartItem.setBasePricePerPiece(new BigDecimal(1.0)); cartItem.setTotalPrice(new BigDecimal(1.0)); cartItem.setTree(tree); cart.addCartItem(cartItem); _cartRepository.save(cart); assertThat(_cartRepository.count()).isEqualTo(1); assertThat(_treeRepository.count()).isEqualTo(1); _cartRepository.delete(cart); assertThat(_cartRepository.count()).isEqualTo(0); assertThat(_treeRepository.count()).isEqualTo(0); } }