Skip to content
This repository was archived by the owner on Feb 4, 2026. It is now read-only.

Commit 5c97a73

Browse files
author
Matej Briskar
committed
FORGE-1398 (Test): Being able to create embeddables
1 parent 72c70a8 commit 5c97a73

4 files changed

Lines changed: 162 additions & 1 deletion

File tree

‎javaee/impl/src/main/java/org/jboss/forge/addon/javaee/jpa/ui/NewFieldRelationshipWizardStep.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
public class NewFieldRelationshipWizardStep extends AbstractJavaEECommand implements UIWizardStep
3838
{
3939
@Inject
40-
@WithAttributes(label = "Fetch Type", description = "Whether the association should be lazily loaded or must be eagerly fetched", required = true, type = InputType.RADIO)
40+
@WithAttributes(label = "Fetch Type", description = "Whether the association should be lazily loaded or must be eagerly fetched", type = InputType.RADIO)
4141
private UISelectOne<FetchType> fetchType;
4242

4343
@Inject
@@ -74,6 +74,8 @@ public void initializeUI(UIBuilder builder) throws Exception
7474
fetchType.setDefaultValue(FetchType.EAGER);
7575
shouldAddRequired = true;
7676
break;
77+
case EMBEDDED:
78+
break;
7779
default:
7880
throw new UnsupportedOperationException("Relationship " + relationship + " is not supported");
7981
}

‎javaee/tests/src/main/java/org/jboss/forge/addon/javaee/ProjectHelper.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,12 @@ public JavaResource createJPAEntity(Project project, String entityName) throws I
131131
String packageName = project.getFacet(MetadataFacet.class).getTopLevelPackage() + ".model";
132132
return persistenceOperations.newEntity(project, entityName, packageName, GenerationType.AUTO);
133133
}
134+
135+
public JavaResource createJPAEmbeddable(Project project, String entityName) throws IOException
136+
{
137+
String packageName = project.getFacet(MetadataFacet.class).getTopLevelPackage() + ".model";
138+
return persistenceOperations.newEmbeddableEntity(project, entityName, packageName);
139+
}
134140

135141
public JavaResource createEmptyEnum(Project project, String enumName) throws IOException
136142
{
Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package org.jboss.forge.addon.javaee.jpa;
2+
3+
import static org.hamcrest.CoreMatchers.instanceOf;
4+
import static org.hamcrest.CoreMatchers.is;
5+
import static org.hamcrest.CoreMatchers.not;
6+
7+
import java.io.FileNotFoundException;
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
import javax.inject.Inject;
12+
import javax.persistence.Embeddable;
13+
import javax.persistence.Entity;
14+
import javax.persistence.Table;
15+
16+
import org.jboss.arquillian.container.test.api.Deployment;
17+
import org.jboss.arquillian.junit.Arquillian;
18+
import org.jboss.forge.addon.javaee.ProjectHelper;
19+
import org.jboss.forge.addon.javaee.jpa.ui.NewEmbeddableCommand;
20+
import org.jboss.forge.addon.javaee.validation.ui.ValidationNewGroupCommand;
21+
import org.jboss.forge.addon.parser.java.facets.JavaSourceFacet;
22+
import org.jboss.forge.addon.parser.java.resources.JavaResource;
23+
import org.jboss.forge.addon.parser.java.resources.JavaResourceVisitor;
24+
import org.jboss.forge.addon.projects.Project;
25+
import org.jboss.forge.addon.projects.facets.MetadataFacet;
26+
import org.jboss.forge.addon.resource.visit.VisitContext;
27+
import org.jboss.forge.addon.ui.controller.CommandController;
28+
import org.jboss.forge.addon.ui.result.Failed;
29+
import org.jboss.forge.addon.ui.result.Result;
30+
import org.jboss.forge.addon.ui.test.UITestHarness;
31+
import org.jboss.forge.arquillian.AddonDependency;
32+
import org.jboss.forge.arquillian.Dependencies;
33+
import org.jboss.forge.arquillian.archive.ForgeArchive;
34+
import org.jboss.forge.furnace.repositories.AddonDependencyEntry;
35+
import org.jboss.forge.roaster.model.JavaClass;
36+
import org.jboss.forge.roaster.model.JavaInterface;
37+
import org.jboss.forge.roaster.model.JavaType;
38+
import org.jboss.forge.roaster.model.source.JavaClassSource;
39+
import org.jboss.shrinkwrap.api.ShrinkWrap;
40+
import org.junit.Assert;
41+
import org.junit.Test;
42+
import org.junit.runner.RunWith;
43+
44+
@RunWith(Arquillian.class)
45+
public class NewEmbeddableCommandTest
46+
{
47+
48+
@Deployment
49+
@Dependencies({
50+
@AddonDependency(name = "org.jboss.forge.addon:ui"),
51+
@AddonDependency(name = "org.jboss.forge.addon:ui-test-harness"),
52+
@AddonDependency(name = "org.jboss.forge.addon:javaee"),
53+
@AddonDependency(name = "org.jboss.forge.addon:maven")
54+
})
55+
public static ForgeArchive getDeployment()
56+
{
57+
return ShrinkWrap
58+
.create(ForgeArchive.class)
59+
.addBeansXML()
60+
.addClass(ProjectHelper.class)
61+
.addAsAddonDependencies(
62+
AddonDependencyEntry.create("org.jboss.forge.furnace.container:cdi"),
63+
AddonDependencyEntry.create("org.jboss.forge.addon:projects"),
64+
AddonDependencyEntry.create("org.jboss.forge.addon:javaee"),
65+
AddonDependencyEntry.create("org.jboss.forge.addon:maven"),
66+
AddonDependencyEntry.create("org.jboss.forge.addon:ui"),
67+
AddonDependencyEntry.create("org.jboss.forge.addon:ui-test-harness")
68+
);
69+
}
70+
71+
@Inject
72+
private UITestHarness testHarness;
73+
74+
@Inject
75+
private ProjectHelper projectHelper;
76+
77+
@SuppressWarnings("unchecked")
78+
@Test
79+
public void testCreateEmbeddable() throws Exception
80+
{
81+
Project project = projectHelper.createJavaLibraryProject();
82+
projectHelper.installJPA_2_0(project);
83+
CommandController controller = testHarness.createCommandController(NewEmbeddableCommand.class, project.getRoot());
84+
controller.initialize();
85+
controller.setValueFor("named", "MyEmbeddable");
86+
Assert.assertTrue(controller.isValid());
87+
Assert.assertTrue(controller.canExecute());
88+
Result result = controller.execute();
89+
Assert.assertThat(result, is(not(instanceOf(Failed.class))));
90+
91+
JavaSourceFacet facet = project.getFacet(JavaSourceFacet.class);
92+
93+
final List<JavaClass> embeddables = new ArrayList<JavaClass>();
94+
facet.visitJavaSources(new JavaResourceVisitor()
95+
{
96+
@Override
97+
public void visit(VisitContext context, JavaResource resource)
98+
{
99+
try
100+
{
101+
JavaType<?> type = resource.getJavaType();
102+
if (type.hasAnnotation(Embeddable.class) && type.isClass())
103+
{
104+
embeddables.add((JavaClassSource) type);
105+
}
106+
}
107+
catch (FileNotFoundException e)
108+
{
109+
throw new IllegalStateException(e);
110+
}
111+
}
112+
});
113+
114+
List<JavaClass<?>> allEntities = project.getFacet(JPAFacet.class).getAllEntities();
115+
Assert.assertEquals(1, embeddables.size());
116+
JavaClass<?> embeddableEntity = embeddables.get(0);
117+
Assert.assertTrue(embeddableEntity.hasAnnotation(Embeddable.class));
118+
Assert.assertTrue(embeddableEntity.getName().equals("MyEmbeddable"));
119+
}
120+
121+
}

‎javaee/tests/src/test/java/org/jboss/forge/addon/javaee/jpa/NewFieldWizardTest.java‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import javax.inject.Inject;
1313
import javax.persistence.Column;
14+
import javax.persistence.Embedded;
1415
import javax.persistence.EnumType;
1516
import javax.persistence.Enumerated;
1617
import javax.persistence.FetchType;
@@ -203,6 +204,37 @@ public void testNewOneToManyField() throws Exception
203204
Assert.assertTrue(field.hasAnnotation(OneToMany.class));
204205
Assert.assertEquals("Set", field.getType().getName());
205206
}
207+
208+
@Test
209+
public void testEmbeddedRelationship() throws Exception
210+
{
211+
JavaResource entity = projectHelper.createJPAEntity(project, "Customer");
212+
JavaResource otherEntity = projectHelper.createJPAEmbeddable(project, "Account");
213+
try (WizardCommandController controller = uiTestHarness.createWizardController(NewFieldWizard.class,
214+
project.getRoot()))
215+
{
216+
controller.initialize();
217+
Assert.assertTrue(controller.isEnabled());
218+
controller.setValueFor("targetEntity", entity);
219+
Assert.assertFalse(controller.canExecute());
220+
controller.setValueFor("named", "accounts");
221+
controller.setValueFor("type", otherEntity.getJavaType().getCanonicalName());
222+
controller.setValueFor("relationshipType", RelationshipType.EMBEDDED);
223+
Assert.assertTrue(controller.canMoveToNextStep());
224+
Assert.assertTrue(controller.canExecute());
225+
Result result = controller.execute();
226+
Assert.assertFalse(result instanceof Failed);
227+
assertThat("Result should be of type CompositeResult", result, instanceOf(CompositeResult.class));
228+
CompositeResult compositeResult = (CompositeResult) result;
229+
Assert.assertEquals("Relationship Embedded created", compositeResult.getResults().get(1).getMessage());
230+
}
231+
JavaClass<?> javaClass = entity.getJavaType();
232+
Assert.assertTrue(javaClass.hasField("accounts"));
233+
final Field<?> field = javaClass.getField("accounts");
234+
Assert.assertFalse(field.hasAnnotation(Column.class));
235+
Assert.assertTrue(field.hasAnnotation(Embedded.class));
236+
Assert.assertEquals("Account", field.getType().getName());
237+
}
206238

207239
@Test
208240
public void testNewOneToManyEagerFetchField() throws Exception

0 commit comments

Comments
 (0)