diff options
Diffstat (limited to 'proxy/code/src/org/fedoraproject')
6 files changed, 98 insertions, 16 deletions
diff --git a/proxy/code/src/org/fedoraproject/candlepin/model/Entitlement.java b/proxy/code/src/org/fedoraproject/candlepin/model/Entitlement.java index edc77d1..446e78d 100644 --- a/proxy/code/src/org/fedoraproject/candlepin/model/Entitlement.java +++ b/proxy/code/src/org/fedoraproject/candlepin/model/Entitlement.java @@ -56,13 +56,6 @@ public class Entitlement extends BaseModel { } /** - * @param uuid unique id of the entitlement - */ - public Entitlement(String uuid) { - super(uuid); - } - - /** * @return the org */ @XmlTransient diff --git a/proxy/code/src/org/fedoraproject/candlepin/model/Product.java b/proxy/code/src/org/fedoraproject/candlepin/model/Product.java index 115213c..521c6c2 100644 --- a/proxy/code/src/org/fedoraproject/candlepin/model/Product.java +++ b/proxy/code/src/org/fedoraproject/candlepin/model/Product.java @@ -22,6 +22,10 @@ import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.JoinTable; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import javax.xml.bind.annotation.XmlAccessType; @@ -45,14 +49,16 @@ public class Product { private Long id; // TODO: Drop one of these? - @Column(nullable=false) + @Column(nullable=false, unique=true) private String label; - @Column(nullable=false) + @Column(nullable=false, unique=true) private String name; - - // TODO - @Transient + + @OneToMany(targetEntity=Product.class) + @JoinTable(name="cp_product_hierarchy", + joinColumns=@JoinColumn(name="PARENT_PRODUCT_ID"), + inverseJoinColumns=@JoinColumn(name="CHILD_PRODUCT_ID")) private List<Product> childProducts; /** diff --git a/proxy/code/src/org/fedoraproject/candlepin/model/test/ModelTestFixture.java b/proxy/code/src/org/fedoraproject/candlepin/model/test/ModelTestFixture.java index 4076555..9e4ccdc 100644 --- a/proxy/code/src/org/fedoraproject/candlepin/model/test/ModelTestFixture.java +++ b/proxy/code/src/org/fedoraproject/candlepin/model/test/ModelTestFixture.java @@ -9,7 +9,7 @@ import org.junit.Before; public class ModelTestFixture { protected EntityManager em; - + @Before public void setUp() { em = EntityManagerUtil.createEntityManager(); @@ -26,7 +26,12 @@ public class ModelTestFixture { tx.begin(); em.persist(storeMe); - tx.commit(); + try { + tx.commit(); + } + catch (Exception e) { + tx.rollback(); + } } diff --git a/proxy/code/src/org/fedoraproject/candlepin/model/test/OwnerTest.java b/proxy/code/src/org/fedoraproject/candlepin/model/test/OwnerTest.java index efd0fbf..b3ab842 100644 --- a/proxy/code/src/org/fedoraproject/candlepin/model/test/OwnerTest.java +++ b/proxy/code/src/org/fedoraproject/candlepin/model/test/OwnerTest.java @@ -56,6 +56,7 @@ public class OwnerTest extends ModelTestFixture { for (int i = 0; i < 10; i++) { em.persist(new Owner("Corp " + i)); } + em.getTransaction().commit(); orgs = em.createQuery("select o from Owner as o") .getResultList(); diff --git a/proxy/code/src/org/fedoraproject/candlepin/model/test/ProductTest.java b/proxy/code/src/org/fedoraproject/candlepin/model/test/ProductTest.java index a492741..c139ce5 100644 --- a/proxy/code/src/org/fedoraproject/candlepin/model/test/ProductTest.java +++ b/proxy/code/src/org/fedoraproject/candlepin/model/test/ProductTest.java @@ -4,9 +4,11 @@ import static org.junit.Assert.assertEquals; import java.util.List; +import javax.persistence.EntityManager; import javax.persistence.PersistenceException; import org.fedoraproject.candlepin.model.Product; +import org.fedoraproject.candlepin.util.EntityManagerUtil; import org.junit.Test; public class ProductTest extends ModelTestFixture { @@ -15,12 +17,16 @@ public class ProductTest extends ModelTestFixture { @Test public void normalCreate() { - Product prod = new Product("myproductlabel", "My Product"); + Product prod = new Product("cptest-label", "My Product"); persistAndCommit(prod); List<Product> results = em.createQuery("select p from Product as p") .getResultList(); assertEquals(1, results.size()); + + em.getTransaction().begin(); + em.remove(prod); + em.getTransaction().commit(); } @Test(expected = PersistenceException.class) @@ -38,7 +44,78 @@ public class ProductTest extends ModelTestFixture { Product prod = new Product(); prod.setName("My Product Name"); persistAndCommit(prod); + } + + @Test(expected = PersistenceException.class) + public void nameUnique() { + + Product prod = new Product("label1", "name"); + persistAndCommit(prod); + + Product prod2 = new Product("label2", "name"); + persistAndCommit(prod2); + } + + @Test(expected = PersistenceException.class) + public void labelUnique() { + + Product prod = new Product("label1", "name"); + Product prod2 = new Product("label1", "name2"); + persistAndCommit(prod); + try { + persistAndCommit(prod2); + } + catch (PersistenceException e) { + em.remove(prod); + em.getTransaction().commit(); + throw e; + } } + @Test + public void addChildProducts() { + em.getTransaction().begin(); + Product parent = new Product("parent-product", "Parent Product"); + Product child1 = new Product("child-product1", "Child Product 1"); + Product child2 = new Product("child-product2", "Child Product 2"); + + parent.addChildProduct(child1); + parent.addChildProduct(child2); + em.persist(child1); + em.persist(child2); + em.persist(parent); + em.getTransaction().commit(); + + EntityManager em2 = EntityManagerUtil.createEntityManager(); + Product result = (Product)em2.createQuery( + "select p from Product as p where name = :name") + .setParameter("name", parent.getName()) + .getSingleResult(); + assertEquals(2, result.getChildProducts().size()); + + em.getTransaction().begin(); + em.remove(parent); + em.remove(child1); + em.remove(child2); + em.getTransaction().commit(); + } + + @Test + public void childHasSingleParentOnly() { + em.getTransaction().begin(); + + Product parent1 = new Product("parent-product1", "Parent Product 1"); + Product child1 = new Product("child-product1", "Child Product 1"); + Product parent2 = new Product("parent-product2", "Parent Product 2"); + + parent1.addChildProduct(child1); +// parent2.addChildProduct(child1); + + em.persist(child1); + em.persist(parent1); + em.persist(parent2); + em.getTransaction().commit(); + } + } diff --git a/proxy/code/src/org/fedoraproject/candlepin/resource/EntitlementResource.java b/proxy/code/src/org/fedoraproject/candlepin/resource/EntitlementResource.java index 139309f..0e32188 100644 --- a/proxy/code/src/org/fedoraproject/candlepin/resource/EntitlementResource.java +++ b/proxy/code/src/org/fedoraproject/candlepin/resource/EntitlementResource.java @@ -118,7 +118,7 @@ public class EntitlementResource extends BaseResource { ep.getEndDate()); } - Entitlement e = new Entitlement(BaseModel.generateUUID()); + Entitlement e = new Entitlement(); e.setPool(ep); e.setStartDate(new Date()); ep.bumpCurrentMembers(); |