Skip to content

Commit

Permalink
spring-projects-experimental#56 Fixed failing test and added new tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ravigkant committed May 22, 2022
1 parent b3ba598 commit 4e5c331
Show file tree
Hide file tree
Showing 2 changed files with 171 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -93,13 +93,13 @@ private void handleStatelessSessionBean(ProjectContext context, SessionBeanType
final StringBuilder statelessSnippet =
new StringBuilder("@Stateless(")
.append(getEjbName(sbt)
.map(n -> "name=" + n + ",")
.map(n -> "name = \"" + n + "\"")
.orElse("")
).append(getMappedName(sbt)
.map(m -> "mappedName=" + m + ",")
.map(m -> ", mappedName = \"" + m + "\"")
.orElse("")
).append(getDescription(sbt)
.map(d -> "description=" + d)
.map(d -> ", description = \"" + d + "\"")
.orElse("")
).append(")");

Expand All @@ -109,23 +109,23 @@ private void handleStatelessSessionBean(ProjectContext context, SessionBeanType
type.addAnnotation(statelessSnippet.toString(), "javax.ejb.Stateless");

getRemote(sbt)
.map( r -> "@Remote(value=" + r + ".class)")
.map( r -> "@Remote(" + r + ".class)")
.ifPresent( a -> type.addAnnotation(a,"javax.ejb.Remote"));

getRemoteHome(sbt)
.map( r -> "@RemoteHome(value=" + r + ".class)")
.map( r -> "@RemoteHome(" + r + ".class)")
.ifPresent( a -> type.addAnnotation(a,"javax.ejb.RemoteHome"));

getLocal(sbt)
.map( r -> "@Local(value=" + r + ".class)")
.map( r -> "@Local(" + r + ".class)")
.ifPresent( a -> type.addAnnotation(a,"javax.ejb.Local"));

getLocalHome(sbt)
.map( r -> "@LocalHome(value=" + r + ".class)")
.map( r -> "@LocalHome(" + r + ".class)")
.ifPresent( a -> type.addAnnotation(a,"javax.ejb.LocalHome"));

getTransactionType(sbt)
.map( r -> "@TransactionManagement(value=javax.ejb.TransactionManagementType." + r.toUpperCase() + ")")
.map( r -> "@TransactionManagement(javax.ejb.TransactionManagementType." + r.toUpperCase() + ")")
.ifPresent( a -> type.addAnnotation(a,"javax.ejb.TransactionManagement"));

} else {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,23 @@ class MigrateEjbDeploymentDescriptorTest {
public static final String EJB_CLASS_FQNAME = "com.example.jee.ejb.stateless.local.deploymentdescriptor.NoInterfaceViewBean";
public static final String EJB_TYPE = "Stateless";
private static final String EJB_NAME = "noInterfaceView";
private static final String EJB_WITH_MAPPED_NAME = "MappedNameView";
private static final String EJB_WITH_MAPPED_CLASS_FQNAME = "com.example.jee.ejb.stateless.local.deploymentdescriptor.MappedNameView";
private static final String MAPPED_NAME = "java:comp/env/ejb/MappedNameViewBean";
private static final String EJB_WITH_REMOTE_INTERFACE_NAME = "RemoteInterfaceView";
public static final String EJB_WITH_REMOTE_INTERFACE_FQDN = "com.example.jee.ejb.stateless.local.deploymentdescriptor.RemoteInterfaceView";
private static final String REMOTE_EJB_INTERFACE = "com.example.jee.ejb.stateless.local.deploymentdescriptor.RemoteInterface";
private static final String EJB_WITH_LOCAL_INTERFACE_NAME = "LocalInterfaceView";
public static final String EJB_WITH_LOCAL_INTERFACE_FQDN = "com.example.jee.ejb.stateless.local.deploymentdescriptor.LocalInterfaceView";
private static final String LOCAL_EJB_INTERFACE = "com.example.jee.ejb.stateless.local.deploymentdescriptor.LocalInterface";

@Test
void givenDeploymentDescriptorContainsEjbWhenMatchingClassIsFoundThenStatelessAnnotationShouldBeOverwritten() {
// setup fixture
String javaSource =
"package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"import javax.ejb.Stateless;\n" +
"@Stateless(name=\"banana\")\n" +
"public class NoInterfaceViewBean {}";
String javaSource = "package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"import javax.ejb.Stateless;\n" +
"@Stateless(name=\"banana\")\n" +
"public class NoInterfaceViewBean {}";

String expected = "package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"\n" +
Expand Down Expand Up @@ -71,6 +79,156 @@ void givenDeploymentDescriptorContainsEjbWhenMatchingClassIsFoundThenStatelessAn
.build();


// call SUT
MigrateEjbDeploymentDescriptor sut = new MigrateEjbDeploymentDescriptor();
sut.apply(projectContext);

// verify...
assertThat(projectContext.getProjectJavaSources().list().size()).isEqualTo(1);
assertThat(projectContext.getProjectJavaSources().list().get(0).print()).isEqualTo(expected);
List<EjbJarXml> deploymentDescriptors = projectContext.search(new GenericTypeListFilter<>(EjbJarXml.class));
assertThat(deploymentDescriptors).isEmpty();
}

@Test
void givenDeploymentDescriptorContainsEjbWithMappedName_whenMatchingClassIsFound_thenStatelessAnnotationShouldBeOverwritten() {
// setup fixture
String javaSource =
"package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"import javax.ejb.Stateless;\n" +
"@Stateless(name=\"banana\")\n" +
"public class MappedNameView {}";

String expected = "package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"\n" +
"import javax.ejb.Stateless;\n" +
"\n" +
"@Stateless(name = \"" + EJB_WITH_MAPPED_NAME + "\", mappedName = \"" + MAPPED_NAME + "\")\n" +
"public class MappedNameView {}";

String deploymentDescriptorXml = "<ejb-jar xmlns=\"http://xmlns.jcp.org/xml/ns/javaee\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
" xsi:schemaLocation=\"http://xmlns.jcp.org/xml/ns/javaee\n" +
" http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd\"\n" +
" version=\"3.2\">\n" +
" <enterprise-beans>\n" +
" <session>\n" +
" <ejb-name>" + EJB_WITH_MAPPED_NAME + "</ejb-name>\n" +
" <ejb-class>" + EJB_WITH_MAPPED_CLASS_FQNAME + "</ejb-class>\n" +
" <mapped-name>" + MAPPED_NAME + "</mapped-name>\n" +
" <session-type>" + EJB_TYPE + "</session-type>\n" +
" </session>\n" +
" </enterprise-beans>\n" +
"</ejb-jar>";

ProjectContext projectContext = TestProjectContext.buildProjectContext()
.addProjectResource(Path.of("./src/main/resources/META-INF/ejb-jar.xml"), deploymentDescriptorXml)
.withJavaSources(javaSource)
.withBuildFileHavingDependencies("javax.ejb:javax.ejb-api:3.2")
.addRegistrar(new JeeEjbJarXmlProjectResourceRegistrar())
.build();


// call SUT
MigrateEjbDeploymentDescriptor sut = new MigrateEjbDeploymentDescriptor();
sut.apply(projectContext);

// verify...
assertThat(projectContext.getProjectJavaSources().list().size()).isEqualTo(1);
assertThat(projectContext.getProjectJavaSources().list().get(0).print()).isEqualTo(expected);
List<EjbJarXml> deploymentDescriptors = projectContext.search(new GenericTypeListFilter<>(EjbJarXml.class));
assertThat(deploymentDescriptors).isEmpty();
}

@Test
void givenDeploymentDescriptorContainsEjbWithRemoteInterface_whenMatchingClassIsFound_thenStatelessRemoteAnnotationShouldBeGenerated() {
// setup fixture
String javaSource =
"package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"import javax.ejb.Stateless;\n" +
"public class RemoteInterfaceView implements RemoteInterface{}";

String expected = "package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"import javax.ejb.Remote;\n" +
"import javax.ejb.Stateless;\n" +
"\n" +
"@Stateless(name = \"" + EJB_WITH_REMOTE_INTERFACE_NAME + "\")\n" +
"@Remote(" + REMOTE_EJB_INTERFACE + ".class)\n" +
"public class RemoteInterfaceView implements RemoteInterface {}";

String deploymentDescriptorXml = "<ejb-jar xmlns=\"http://xmlns.jcp.org/xml/ns/javaee\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
" xsi:schemaLocation=\"http://xmlns.jcp.org/xml/ns/javaee\n" +
" http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd\"\n" +
" version=\"3.2\">\n" +
" <enterprise-beans>\n" +
" <session>\n" +
" <ejb-name>" + EJB_WITH_REMOTE_INTERFACE_NAME + "</ejb-name>\n" +
" <ejb-class>" + EJB_WITH_REMOTE_INTERFACE_FQDN + "</ejb-class>\n" +
" <remote>" + REMOTE_EJB_INTERFACE + "</remote>\n" +
" <session-type>" + EJB_TYPE + "</session-type>\n" +
" </session>\n" +
" </enterprise-beans>\n" +
"</ejb-jar>";

ProjectContext projectContext = TestProjectContext.buildProjectContext()
.addProjectResource(Path.of("./src/main/resources/META-INF/ejb-jar.xml"), deploymentDescriptorXml)
.withJavaSources(javaSource)
.withBuildFileHavingDependencies("javax.ejb:javax.ejb-api:3.2")
.addRegistrar(new JeeEjbJarXmlProjectResourceRegistrar())
.build();


// call SUT
MigrateEjbDeploymentDescriptor sut = new MigrateEjbDeploymentDescriptor();
sut.apply(projectContext);

// verify...
assertThat(projectContext.getProjectJavaSources().list().size()).isEqualTo(1);
assertThat(projectContext.getProjectJavaSources().list().get(0).print()).isEqualTo(expected);
List<EjbJarXml> deploymentDescriptors = projectContext.search(new GenericTypeListFilter<>(EjbJarXml.class));
assertThat(deploymentDescriptors).isEmpty();
}

@Test
void givenDeploymentDescriptorContainsEjbWithLocalInterface_whenMatchingClassIsFound_thenStatelessLocalAnnotationShouldBeGenerated() {
// setup fixture
String javaSource =
"package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"import javax.ejb.Stateless;\n" +
"public class LocalInterfaceView implements LocalInterface{}";

String expected = "package com.example.jee.ejb.stateless.local.deploymentdescriptor;\n" +
"import javax.ejb.Local;\n" +
"import javax.ejb.Stateless;\n" +
"\n" +
"@Stateless(name = \"" + EJB_WITH_LOCAL_INTERFACE_NAME + "\")\n" +
"@Local(" + LOCAL_EJB_INTERFACE + ".class)\n" +
"public class LocalInterfaceView implements LocalInterface {}";

String deploymentDescriptorXml = "<ejb-jar xmlns=\"http://xmlns.jcp.org/xml/ns/javaee\"\n" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
" xsi:schemaLocation=\"http://xmlns.jcp.org/xml/ns/javaee\n" +
" http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd\"\n" +
" version=\"3.2\">\n" +
" <enterprise-beans>\n" +
" <session>\n" +
" <ejb-name>" + EJB_WITH_LOCAL_INTERFACE_NAME + "</ejb-name>\n" +
" <ejb-class>" + EJB_WITH_LOCAL_INTERFACE_FQDN + "</ejb-class>\n" +
" <local>" + LOCAL_EJB_INTERFACE + "</local>\n" +
" <session-type>" + EJB_TYPE + "</session-type>\n" +
" </session>\n" +
" </enterprise-beans>\n" +
"</ejb-jar>";

ProjectContext projectContext = TestProjectContext.buildProjectContext()
.addProjectResource(Path.of("./src/main/resources/META-INF/ejb-jar.xml"), deploymentDescriptorXml)
.withJavaSources(javaSource)
.withBuildFileHavingDependencies("javax.ejb:javax.ejb-api:3.2")
.addRegistrar(new JeeEjbJarXmlProjectResourceRegistrar())
.build();


// call SUT
MigrateEjbDeploymentDescriptor sut = new MigrateEjbDeploymentDescriptor();
sut.apply(projectContext);
Expand Down

0 comments on commit 4e5c331

Please sign in to comment.