package fr.gael.dhus.database.dao; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; import static org.testng.Assert.assertNull; import static org.testng.Assert.assertTrue; import java.util.Iterator; import java.util.List; import java.util.Set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; import fr.gael.dhus.database.dao.interfaces.HibernateDao; import fr.gael.dhus.database.object.Product; import fr.gael.dhus.database.object.ProductCart; import fr.gael.dhus.database.object.User; import fr.gael.dhus.util.CheckIterator; import fr.gael.dhus.util.TestContextLoader; @ContextConfiguration ( locations = "classpath:fr/gael/dhus/spring/context-test.xml", loader = TestContextLoader.class) @DirtiesContext (classMode = DirtiesContext.ClassMode.AFTER_CLASS) public class TestProductCartDao extends TestAbstractHibernateDao<ProductCart, String> { @Autowired private ProductCartDao dao; @Autowired private ProductDao pdao; @Autowired private UserDao udao; @Override protected HibernateDao<ProductCart, String> getHibernateDao () { return dao; } @Override protected int howMany () { return 4; } @Override public void create () { User user = udao.read ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"); ProductCart pc = new ProductCart (); pc.setUser (user); pc = dao.create (pc); assertNotNull (pc); assertEquals (pc.getUser (), user); } @Override public void read () { ProductCart pc = dao.read ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"); assertNotNull (pc); assertEquals (pc.getProducts ().size (), 2); } @Override public void update () { String cartId = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"; ProductCart pc = dao.read (cartId); Product p = new Product (); p.setId (3L); assertEquals (pc.getProducts ().size (), 2); pc.getProducts ().add (p); dao.update (pc); pc = dao.read (cartId); assertEquals (pc.getProducts ().size (), 3); } @Override public void delete () { String id = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"; ProductCart cart = dao.read (id); assertNotNull (cart); Set<Product> products = cart.getProducts (); dao.delete (cart); assertNull (dao.read (id)); for (Product product : products) { assertNotNull (pdao.read (product.getId ())); } } @Override public void scroll () { String hql = ""; Iterator<ProductCart> it = dao.scroll (hql, -1, -1).iterator (); assertTrue (CheckIterator.checkElementNumber (it, 4)); } @Override public void first () { ProductCart cart = dao.first ("FROM ProductCart ORDER BY id DESC"); assertNotNull (cart); assertEquals (cart.getUUID (), "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"); } @Test public void deleteCartOfUser () { // emulate userDao.read (2L) User u = new User (); u.setUUID ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"); dao.deleteCartOfUser (u); List<ProductCart> res = dao.getCartsOfUser (u); assertTrue (res.isEmpty ()); } @Test public void getCartOfUser () { User user = udao.read ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"); ProductCart cart = dao.getCartOfUser (user); assertNotNull (cart); assertEquals (cart.getUUID(), "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"); assertEquals (cart.getUser(), user, "User not owner of the found cart."); // No cart attached to User #1 user = udao.read ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"); cart = dao.getCartOfUser (user); assertNull (cart); // User #2 has 2 carts user = udao.read ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"); cart = dao.getCartOfUser (user); assertNotNull (cart); } @Test public void deleteProductReferences () { Product product = new Product (); product.setId (5L); dao.deleteProductReferences (product); List<ProductCart> pcs = dao.readAll (); for (ProductCart pc : pcs) { assertFalse (pc.getProducts ().contains (product)); } } @Test public void getProductsIdOfCart () { User user = new User (); user.setUUID ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"); List<Long> ids = dao.getProductsIdOfCart (user); assertNotNull (ids); assertEquals (ids.size (), 2); assertTrue (ids.contains (Long.valueOf (0))); assertTrue (ids.contains (Long.valueOf (5))); } @Test public void scrollCartOfUser () { User user = new User (); user.setUUID ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"); Iterator<Product> it = dao.scrollCartOfUser (user, -1, -1).iterator (); assertTrue (CheckIterator.checkElementNumber (it, 2)); it = dao.scrollCartOfUser (user, 0, 10000).iterator (); assertTrue (CheckIterator.checkElementNumber (it, 2)); it = dao.scrollCartOfUser (user, 1, 10).iterator (); assertTrue (CheckIterator.checkElementNumber (it, 1)); it = dao.scrollCartOfUser (user, 2, 10).iterator (); assertTrue (CheckIterator.checkElementNumber (it, 0)); it = dao.scrollCartOfUser (user, 10, 10).iterator (); assertTrue (CheckIterator.checkElementNumber (it, 0)); } }