From f706932f0fa938e13612284e468a630d401e1132 Mon Sep 17 00:00:00 2001 From: Robert Rettig Date: Fri, 29 May 2015 00:51:13 +0200 Subject: [PATCH] [#1951] Fix yaml compatible fixture loading --- .../src/play/data/binding/ParamNode.java | 6 ++++- framework/src/play/test/Fixtures.java | 2 +- .../models/orphans/collections/BaseModel.java | 3 +++ .../orphans/collections/DefaultModel.java | 25 +++++++++++++++++++ .../just-test-cases/test/FixturesTest.java | 12 +++++++++ .../just-test-cases/test/emptycol.yml | 8 ++++++ 6 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 samples-and-tests/just-test-cases/app/models/orphans/collections/DefaultModel.java create mode 100644 samples-and-tests/just-test-cases/test/emptycol.yml diff --git a/framework/src/play/data/binding/ParamNode.java b/framework/src/play/data/binding/ParamNode.java index 018a35632b..a7ed66422c 100644 --- a/framework/src/play/data/binding/ParamNode.java +++ b/framework/src/play/data/binding/ParamNode.java @@ -132,12 +132,16 @@ public String getOriginalKey() { } public static RootParamNode convert(Map params) { + return convert(params, false); + } + + public static RootParamNode convert(Map params, boolean paramsFromYaml) { RootParamNode root = new RootParamNode( params); for (Map.Entry e : params.entrySet()) { String key = e.getKey(); String[] values = e.getValue(); - if (values != null && values.length == 0) { + if (!paramsFromYaml && values != null && values.length == 0) { values = null; } diff --git a/framework/src/play/test/Fixtures.java b/framework/src/play/test/Fixtures.java index 93dad5fd6e..ee22989462 100644 --- a/framework/src/play/test/Fixtures.java +++ b/framework/src/play/test/Fixtures.java @@ -233,7 +233,7 @@ public static void loadModels(boolean loadAsTemplate, String name) { Class cType = (Class)Play.classloader.loadClass(type); final Map resolvedFields = resolveDependencies(cType, fields); - RootParamNode rootParamNode = ParamNode.convert(resolvedFields); + RootParamNode rootParamNode = ParamNode.convert(resolvedFields, true); // This is kind of hacky. This basically says that if we have an embedded class we should ignore it. if (Model.class.isAssignableFrom(cType)) { diff --git a/samples-and-tests/just-test-cases/app/models/orphans/collections/BaseModel.java b/samples-and-tests/just-test-cases/app/models/orphans/collections/BaseModel.java index 7f6ce6b13d..2ba14f6fff 100644 --- a/samples-and-tests/just-test-cases/app/models/orphans/collections/BaseModel.java +++ b/samples-and-tests/just-test-cases/app/models/orphans/collections/BaseModel.java @@ -4,6 +4,8 @@ import javax.persistence.CascadeType; import javax.persistence.Entity; +import javax.persistence.Inheritance; +import javax.persistence.InheritanceType; import javax.persistence.ManyToOne; import javax.persistence.OneToMany; import javax.persistence.Table; @@ -13,6 +15,7 @@ @Entity(name = "collections.BaseModel") @Table(name = "collections_base_model") +@Inheritance(strategy=InheritanceType.JOINED) public class BaseModel extends Model { @OneToMany(mappedBy = "baseModel", cascade = CascadeType.ALL, orphanRemoval = true) diff --git a/samples-and-tests/just-test-cases/app/models/orphans/collections/DefaultModel.java b/samples-and-tests/just-test-cases/app/models/orphans/collections/DefaultModel.java new file mode 100644 index 0000000000..bd60cdd71b --- /dev/null +++ b/samples-and-tests/just-test-cases/app/models/orphans/collections/DefaultModel.java @@ -0,0 +1,25 @@ +package models.orphans.collections; + +import javax.persistence.Entity; +import javax.persistence.Table; + +/** + * Model with preinitialized collection (e.g. one element) + * + */ +@Entity(name = "collections.DefaultModel") +@Table(name = "collections_default_model") +public class DefaultModel extends BaseModel { + + public DefaultModel() { + super(); + initLevelOnes(); + } + + private void initLevelOnes() { + LevelOne levelOne = new LevelOne(); + levelOne.baseModel = this; + levelOnes.add(levelOne); + } + +} diff --git a/samples-and-tests/just-test-cases/test/FixturesTest.java b/samples-and-tests/just-test-cases/test/FixturesTest.java index b35b07562a..d38e0a3c99 100755 --- a/samples-and-tests/just-test-cases/test/FixturesTest.java +++ b/samples-and-tests/just-test-cases/test/FixturesTest.java @@ -2,10 +2,12 @@ import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.List; import javax.management.RuntimeErrorException; import models.Bloc; +import models.orphans.collections.DefaultModel; import models.vendor.Vendor; import models.vendor.VenueVendor; import models.vendor.tag.AreaTag; @@ -17,6 +19,7 @@ import org.junit.Test; import play.Logger; +import play.db.jpa.JPABase; import play.test.Fixtures; import play.test.UnitTest; @@ -116,5 +119,14 @@ public void withEmbeddedCompositePrimaryKey() { assertEquals("nutella", c.name); } + @Test + public void checkEmptyCollections() { + Fixtures.load("emptycol.yml"); + List defaultModels = DefaultModel.findAll(); + assertEquals(1,defaultModels.size()); + DefaultModel defaultModel = defaultModels.get(0); + // before #1868 you had 3 elements, the preinitialized and two additional from yaml + assertEquals(2, defaultModel.levelOnes.size()); + } } diff --git a/samples-and-tests/just-test-cases/test/emptycol.yml b/samples-and-tests/just-test-cases/test/emptycol.yml new file mode 100644 index 0000000000..d4d64d9f27 --- /dev/null +++ b/samples-and-tests/just-test-cases/test/emptycol.yml @@ -0,0 +1,8 @@ +orphans.collections.DefaultModel(b1): + levelOnes: [] + +orphans.collections.LevelOne(l1): + baseModel: b1 + +orphans.collections.LevelOne(l2): + baseModel: b1