Author: bleny Date: 2013-03-15 18:34:28 +0100 (Fri, 15 Mar 2013) New Revision: 28 Url: http://forge.codelutin.com/projects/franciaflex-magalie/repository/revisions... Log: introduce fixtures in Yaml Added: trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java trunk/magalie-persistence/src/test/resources/fixtures.yaml Modified: trunk/magalie-persistence/pom.xml trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Article.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/SiteError.java trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java trunk/magalie-persistence/src/main/resources/magalie.properties trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java Modified: trunk/magalie-persistence/pom.xml =================================================================== --- trunk/magalie-persistence/pom.xml 2013-03-15 15:06:29 UTC (rev 27) +++ trunk/magalie-persistence/pom.xml 2013-03-15 17:34:28 UTC (rev 28) @@ -21,6 +21,13 @@ <dependencies> <dependency> + <groupId>com.esotericsoftware.yamlbeans</groupId> + <artifactId>yamlbeans</artifactId> + <version>1.06</version> + <scope>test</scope> + </dependency> + + <dependency> <groupId>org.hibernate.javax.persistence</groupId> <artifactId>hibernate-jpa-2.0-api</artifactId> </dependency> Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Article.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Article.java 2013-03-15 15:06:29 UTC (rev 27) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/Article.java 2013-03-15 17:34:28 UTC (rev 28) @@ -13,10 +13,14 @@ @ManyToOne protected Site fixedSite; + protected String description; + protected String code; - protected String quantityInKanban; + protected double quantityInKanban; + protected String unit; + public String getId() { return id; } @@ -41,11 +45,27 @@ this.code = code; } - public String getQuantityInKanban() { + public double getQuantityInKanban() { return quantityInKanban; } - public void setQuantityInKanban(String quantityInKanban) { + public void setQuantityInKanban(double quantityInKanban) { this.quantityInKanban = quantityInKanban; } + + public String getUnit() { + return unit; + } + + public void setUnit(String unit) { + this.unit = unit; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } } Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/SiteError.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/SiteError.java 2013-03-15 15:06:29 UTC (rev 27) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/SiteError.java 2013-03-15 17:34:28 UTC (rev 28) @@ -1,6 +1,7 @@ package com.franciaflex.magalie.entity; import javax.persistence.Entity; +import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import javax.persistence.OneToOne; @@ -10,6 +11,7 @@ public class SiteError { @Id + @GeneratedValue protected String id; @OneToOne Modified: trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java =================================================================== --- trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java 2013-03-15 15:06:29 UTC (rev 27) +++ trunk/magalie-persistence/src/main/java/com/franciaflex/magalie/entity/StorageMovement.java 2013-03-15 17:34:28 UTC (rev 28) @@ -1,6 +1,7 @@ package com.franciaflex.magalie.entity; import javax.persistence.Entity; +import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.ManyToOne; import java.util.Date; @@ -9,6 +10,7 @@ public class StorageMovement { @Id + @GeneratedValue protected String id; @ManyToOne Modified: trunk/magalie-persistence/src/main/resources/magalie.properties =================================================================== --- trunk/magalie-persistence/src/main/resources/magalie.properties 2013-03-15 15:06:29 UTC (rev 27) +++ trunk/magalie-persistence/src/main/resources/magalie.properties 2013-03-15 17:34:28 UTC (rev 28) @@ -7,3 +7,4 @@ hibernate.show_sql=true hibernate.format_sql=true hibernate.transaction.flush_before_completion=true +hibernate.ejb.naming_strategy=org.hibernate.cfg.ImprovedNamingStrategy Added: trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java =================================================================== --- trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java (rev 0) +++ trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/MagalieFixtures.java 2013-03-15 17:34:28 UTC (rev 28) @@ -0,0 +1,46 @@ +package com.franciaflex.magalie; + +import com.esotericsoftware.yamlbeans.YamlException; +import com.esotericsoftware.yamlbeans.YamlReader; +import com.franciaflex.magalie.entity.Article; +import com.franciaflex.magalie.entity.MagalieUser; +import com.franciaflex.magalie.entity.RequestedArticle; +import com.franciaflex.magalie.entity.Site; +import com.franciaflex.magalie.entity.StoredArticle; +import org.apache.commons.io.Charsets; +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.util.Map; + +public class MagalieFixtures { + + private final Map<String,Object> fixtures; + + public MagalieFixtures(String fixturesName) { + String yamlPath = "/" + fixturesName + ".yaml"; + InputStream inputStream = getClass().getResourceAsStream(yamlPath); + String yaml; + try { + yaml = IOUtils.toString(inputStream, Charsets.UTF_8); + } catch (IOException e) { + throw new IllegalArgumentException(fixturesName + " is not a valid fixtures set name", e); + } + YamlReader reader = new YamlReader(yaml); + reader.getConfig().setClassTag("article", Article.class); + reader.getConfig().setClassTag("stored article", StoredArticle.class); + reader.getConfig().setClassTag("user", MagalieUser.class); + reader.getConfig().setClassTag("requested article", RequestedArticle.class); + reader.getConfig().setClassTag("site", Site.class); + try { + fixtures = (Map<String, Object>) reader.read(); + } catch (YamlException e) { + throw new MagalieTechnicalException("unable to read yaml file", e); + } + } + + public <E> E fixture(String id) throws Exception { + return (E) fixtures.get(id); + } +} Modified: trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java =================================================================== --- trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java 2013-03-15 15:06:29 UTC (rev 27) +++ trunk/magalie-persistence/src/test/java/com/franciaflex/magalie/PersistenceTest.java 2013-03-15 17:34:28 UTC (rev 28) @@ -1,18 +1,14 @@ package com.franciaflex.magalie; import com.franciaflex.magalie.entity.Article; -import com.franciaflex.magalie.entity.MagalieUser; -import com.franciaflex.magalie.entity.RequestedArticle; import com.franciaflex.magalie.entity.Site; -import com.franciaflex.magalie.entity.SiteError; -import com.franciaflex.magalie.entity.StorageMovement; -import com.franciaflex.magalie.entity.StoredArticle; import org.junit.Ignore; import org.junit.Test; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; +import java.util.List; import java.util.Map; public class PersistenceTest { @@ -21,6 +17,12 @@ @Ignore public void testName() throws Exception { + MagalieFixtures fixtures = new MagalieFixtures("fixtures"); + + Article article = fixtures.fixture("article2"); + + System.out.println(article); + MagalieApplicationConfig applicationConfig = new MagalieApplicationConfig(); Map<String, Object> jpaParameters = applicationConfig.getJpaParameters(); @@ -31,14 +33,23 @@ entityManager.getTransaction().begin(); - entityManager.persist(new MagalieUser()); - entityManager.persist(new Article()); - entityManager.persist(new RequestedArticle()); - entityManager.persist(new Site()); - entityManager.persist(new SiteError()); - entityManager.persist(new StorageMovement()); - entityManager.persist(new StoredArticle()); +// entityManager.persist(new MagalieUser()); +// entityManager.persist(new Article()); +// entityManager.persist(new StoredArticle()); +// entityManager.persist(new Site()); +// entityManager.persist(new RequestedArticle()); +// entityManager.persist(new SiteError()); +// entityManager.persist(new StorageMovement()); + + List<Site> sites = fixtures.fixture("sites"); + + for (Site site : sites) { + + entityManager.persist(site); + + } + entityManager.getTransaction().commit(); entityManager.close(); Added: trunk/magalie-persistence/src/test/resources/fixtures.yaml =================================================================== --- trunk/magalie-persistence/src/test/resources/fixtures.yaml (rev 0) +++ trunk/magalie-persistence/src/test/resources/fixtures.yaml 2013-03-15 17:34:28 UTC (rev 28) @@ -0,0 +1,72 @@ +site1: + &site1 !site + id: site1 + storeCode: UO1 + locationCode: A1 + requiredAccreditationLevel: 0 + +site2: + &site2 !site + id: site2 + storeCode: UO1 + locationCode: B2 + requiredAccreditationLevel: 9 + +site3: + &site3 !site + id: site3 + storeCode: UO1 + locationCode: C3 + requiredAccreditationLevel: 0 + +site4: + &site4 !site + id: site4 + storeCode: UO1 + locationCode: D4 + requiredAccreditationLevel: 0 + +site5: + &site5 !site + id: site5 + storeCode: UO2 + locationCode: A1 + requiredAccreditationLevel: 0 + +sites: + - *site1 + - *site2 + - *site3 + - *site4 + - *site5 + +article1: + &article1 !article + id: article1 + fixedSite: *site1 + code: 111111111 + quantityInKanban: 10 + unit: kg + description: very big screws + +article2: + &article2 !article + id: article2 + code: 222222222 + quantityInKanban: 2 + unit: box + description: little buttons + +article3: + &article3 !article + id: article3 + fixedSite: *site2 + code: 333333333 + quantityInKanban: 50 + unit: g + description: magic powder + +articles: + - *article1 + - *article2 + - *article3