package fr.gael.dhus.service; import java.net.MalformedURLException; import java.net.URL; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Random; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.GrantedAuthorityImpl; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.testng.AbstractTestNGSpringContextTests; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import com.google.common.collect.Sets; import fr.gael.dhus.database.dao.ProductDao; import fr.gael.dhus.database.dao.UserDao; 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.TestContextLoader; @SuppressWarnings ("deprecation") @ContextConfiguration ( locations = {"classpath:fr/gael/dhus/spring/context-test.xml", "classpath:fr/gael/dhus/spring/context-security-test.xml"}, loader = TestContextLoader.class) @DirtiesContext (classMode = DirtiesContext.ClassMode.AFTER_CLASS) public class ProductCartServiceTest extends AbstractTestNGSpringContextTests { Map<Integer, String> users = new HashMap<Integer, String>(2); { users.put(0, "test1"); users.put(1, "test2"); } HashSet<GrantedAuthority> roles = Sets.<GrantedAuthority> newHashSet( new GrantedAuthorityImpl("ROLE_DOWNLOAD")); @BeforeClass public void authenticate() { int sb = new Random().nextBoolean() ? 1 : 0; String name = users.get(sb); SandBoxUser user = new SandBoxUser(name, name, true, sb, roles); UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user, user.getPassword()); SecurityContextHolder.getContext().setAuthentication(token); } @Autowired ProductCartService pcs; @Autowired UserDao userDao; @Autowired ProductDao productDao; @Test (priority=10) public void addProductToCart() throws MalformedURLException { User u = new User(); u.setUsername ("TMPUSER##1"); u.setPassword ("TMPPASS##1"); u = userDao.create(u); Product p = new Product(); p.setPath(new URL("file:///tmp/product##1")); p = productDao.create(p); try { pcs.addProductToCart(u.getUUID (), p.getId()); } catch (Exception e) { Assert.fail("Error while adding a product into a product cart.", e); } } @Test (priority=100) public void clearCart() { try { pcs.clearCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1000"); Assert.fail("System remove cart of an unknown user ?"); } catch (Exception e) { // Shall raise an exception because user is unknown. } try { pcs.clearCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"); } catch (Exception e) { Assert.fail("Cannot remove single cart of existing user.", e); } try { pcs.clearCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"); } catch (Exception e) { Assert.fail("Cannot remove empty cart of existing user.", e); } try { pcs.clearCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"); } catch (Exception e) { Assert.fail("Cannot remove multi-cart of existing user.", e); } } @Test (priority=1) public void countProductsInCart() { Assert.assertEquals(pcs.countProductsInCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"), 2); Assert.assertEquals(pcs.countProductsInCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"), 0); Assert.assertEquals(pcs.countProductsInCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"), 0); Assert.assertEquals(pcs.countProductsInCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"), 1); } @Test (priority=1) public void getCartOfUser() { // Users #0 and #3: normal users with single cart ProductCart cart = pcs.getCartOfUser("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"); Assert.assertEquals (cart.getUUID(), "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"); cart = pcs.getCartOfUser("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"); Assert.assertEquals (cart.getUUID(), "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"); // user #1 has no cart. The cart should be NULL. cart = pcs.getCartOfUser("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"); Assert.assertNull(cart); // User #2 has carts: first cart must be returned #2 cart = pcs.getCartOfUser("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"); Assert.assertEquals (cart.getUUID(), "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"); } @Test (priority=1) public void getProductsIdOfCart() { // Users ID #0 -> CARD ID #0 -> PRODUCT IDs #0 and #5 List<Long>products = pcs.getProductsIdOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"); Assert.assertEquals (products.size(), 2); Assert.assertEquals (products.get (0), new Long(5L)); Assert.assertEquals (products.get (1), new Long(0L)); // USER #1 -> no cart products = pcs.getProductsIdOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1"); Assert.assertEquals (products.size(), 0); // USER #2 -> CART #2 -> no product // CART #3 -> product #0 // DAO methods returns only first cart if multiple... products = pcs.getProductsIdOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2"); Assert.assertEquals (products.size(), 0); // Users ID #3 -> CARD ID #1 -> PRODUCT IDs #5 products = pcs.getProductsIdOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3"); Assert.assertEquals (products.size(), 1); Assert.assertEquals (products.get (0), new Long(5L)); } @Test (priority=1) public void getProductsOfCart() { // Users ID #0 -> CARD ID #0 -> PRODUCT IDs #0 and #5 List<Product>products = pcs.getProductsOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0", 0, 100); Assert.assertEquals (products.size(), 2); Assert.assertEquals (products.get (0).getId(), new Long(5L)); Assert.assertEquals (products.get (1).getId(), new Long(0L)); // USER #1 -> no cart products = pcs.getProductsOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1", 0 , 100); Assert.assertEquals (products.size(), 0); // USER #2 -> CART #2 -> no product // CART #3 -> product #0 // DAO methods returns only first cart if multiple... products = pcs.getProductsOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2", 0, 100); Assert.assertEquals (products.size(), 0); // Users ID #3 -> CARD ID #1 -> PRODUCT IDs #5 products = pcs.getProductsOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa3", 0, 100); Assert.assertEquals (products.size(), 1); Assert.assertEquals (products.get (0).getId(), new Long(5L)); } @Test (priority=100) public void removeProductFromCart() { // Users ID #0 -> CARD ID #0 -> PRODUCT IDs #0 and #5 // Remove product #0 pcs.removeProductFromCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0", 0L); // recheck it product list size is now 1 List<Long>products = pcs.getProductsIdOfCart("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"); Assert.assertEquals (products.size(), 1); Assert.assertEquals (products.get (0), new Long(5L)); } @Test (priority=1000) public void createCartOfUser () { User u = new User(); u.setUsername ("TMPUSER##2"); u.setPassword ("TMPPASS##2"); u = userDao.create(u); ProductCart cart = pcs.createCartOfUser(u.getUUID()); Assert.assertNotNull(cart); ProductCart cart_new = pcs.createCartOfUser(u.getUUID()); Assert.assertEquals(cart, cart_new); } @Test (priority=1000) public void deleteCartOfUser () { pcs.deleteCartOfUser("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0"); Assert.assertNull (pcs.getCartOfUser("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0")); } }