package com.rits.tests.perspectives; import java.math.BigDecimal; import junit.framework.TestCase; import com.rits.cloning.Cloner; import com.rits.perspectives.Perspectives; import com.rits.tests.perspectives.model.OrderedProduct; import com.rits.tests.perspectives.model.OrderedProducts; import com.rits.tests.perspectives.model.Product; import com.rits.tests.perspectives.model.Products; import com.rits.tests.perspectives.model.RelatedProduct; /** * @author kostantinos.kougios * * 30 Nov 2009 */ public class TestPerspectives extends TestCase { private final Cloner cloner = new Cloner(); private final Perspectives perspectives = new Perspectives(cloner); public void testViewAs() { // we somehow fetch a product, i.e. from the database final Product product = new Product(5, "mouse", "a 3-button mouse"); // we need to "view" this product as an ordered product. final OrderedProduct orderedProduct = perspectives.viewAs(OrderedProduct.class, product); orderedProduct.setPrice(new BigDecimal("5.44")); orderedProduct.setQty(5); // test if all ok assertEquals(product.getId(), orderedProduct.getId()); assertEquals(product.getSku(), orderedProduct.getSku()); assertEquals(product.getTitle(), orderedProduct.getTitle()); assertEquals(new BigDecimal("5.44"), orderedProduct.getPrice()); assertEquals(5, orderedProduct.getQty()); } public void testViewAs2ExtendedSubclasses() { final Product relatedProduct = new RelatedProduct(8, "X5", "RX5"); final OrderedProduct op = perspectives.viewAs(OrderedProduct.class, relatedProduct); assertEquals(relatedProduct.getId(), op.getId()); assertEquals(relatedProduct.getSku(), op.getSku()); assertEquals(relatedProduct.getTitle(), op.getTitle()); } public void testViewAsNull() { final OrderedProduct op = perspectives.viewAs(OrderedProduct.class, null); assertNull(op); } public void testViewCollectionAs() { final Product p1 = new Product(1, "mouse1", "a mouse"); final Product p2 = new Product(2, "mouse2", "an other mouse"); final Product p3 = new Product(3, "keyboard1", "a keyboard"); final Products products = new Products(p1, p2, p3); // view the products from the orderedproducts perspective final OrderedProducts orderedProducts = perspectives.viewCollectionAs(new OrderedProducts(), OrderedProduct.class, products); assertEquals(products.size(), orderedProducts.size()); assertEquals(products.get(0), orderedProducts.get(0)); assertEquals(products.get(1), orderedProducts.get(1)); assertEquals(products.get(2), orderedProducts.get(2)); } public void testViewNullCollectionAs() { final OrderedProducts orderedProducts = perspectives.viewCollectionAs(new OrderedProducts(), OrderedProduct.class, null); assertNull(orderedProducts); } }