Author: rsmeral
Date: 2013-06-03 12:41:11 -0400 (Mon, 03 Jun 2013)
New Revision: 15525
Added:
branches/enterprise/WFK-2_1/build/build.properties
branches/enterprise/WFK-2_1/examples/blog/README.md
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/seam/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/seam/example/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/seam/example/blog/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/seam/example/blog/test/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/seam/example/blog/test/BlogTest.java
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/accessible.properties
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/arquillian.xml
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/components.xml
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/default.properties
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/infinispan.xml
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/jboss-deployment-structure.xml
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/jgroupsConfig.xml
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/messages.properties
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/pages.xml
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/printable.properties
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/web.xml
branches/enterprise/WFK-2_1/examples/blog/blog-web/src/main/java/
branches/enterprise/WFK-2_1/examples/blog/blog-web/src/test/
branches/enterprise/WFK-2_1/examples/blog/blog-web/src/test/java/
branches/enterprise/WFK-2_1/examples/booking/README.md
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/Deployments.java
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/arquillian.xml
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/components.xml
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/jboss-deployment-structure.xml
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/persistence.xml
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/web.xml
branches/enterprise/WFK-2_1/examples/groovybooking/README.md
branches/enterprise/WFK-2_1/examples/groovybooking/groovybooking-web/src/main/groovy/action/
branches/enterprise/WFK-2_1/examples/hibernate/README.md
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/BookingTest.java
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/ChangePasswordTest.java
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/Deployments.java
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/LoginTest.java
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/resources/
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/resources/arquillian.xml
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/resources/web.xml
branches/enterprise/WFK-2_1/examples/jee6/README.md
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/Deployments.java
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/arquillian.xml
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/components.xml
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/persistence.xml
Log:
blog, booking, groovybooking, hibernate, jee6 converted, more files
Added: branches/enterprise/WFK-2_1/build/build.properties
===================================================================
--- branches/enterprise/WFK-2_1/build/build.properties (rev 0)
+++ branches/enterprise/WFK-2_1/build/build.properties 2013-06-03 16:41:11 UTC (rev
15525)
@@ -0,0 +1,2 @@
+complete.version=2.3.1.Final-redhat-1
+version=2.3
\ No newline at end of file
Added: branches/enterprise/WFK-2_1/examples/blog/README.md
===================================================================
--- branches/enterprise/WFK-2_1/examples/blog/README.md (rev 0)
+++ branches/enterprise/WFK-2_1/examples/blog/README.md 2013-06-03 16:41:11 UTC (rev
15525)
@@ -0,0 +1,60 @@
+Seam Blog Example
+=================
+
+This example demonstrates the use of Seam in a Java EE environment.
+Transaction and persistence context management is handled by the EJB container.
+
+Running the example
+-------------------
+
+To deploy the example to a running JBoss AS instance, follow these steps:
+
+1. In the example root directory run:
+
+ mvn clean install
+
+2. Set JBOSS_HOME environment property.
+
+3. In the blog-ear directory run:
+
+ mvn jboss-as:deploy
+
+4. Open this URL in a web browser:
http://localhost:8080/seam-blog
+
+
+Testing the example
+-------------------
+
+This example is covered by integration tests. All tests use the following technologies:
+
+* __Arquillian__ - as the framework for EE testing, for managing of container lifecycle
and deployment of test archive,
+* __ShrinkWrap__ - to create the test archive (WAR).
+
+
+### Integration tests
+
+Integration tests cover core application logic and reside in the EJB module. In addition
to Arquillian and ShrinkWrap, the integration tests also use:
+
+* __JUnitSeamTest__ - to hook into the JSF lifecycle and assert server-side state,
+* __ShrinkWrap Resolver__ - to resolve dependencies of the project for packaging in the
test archive.
+
+The tests are executed in Maven's test phase. By default they are skipped and can be
executed on JBoss AS with:
+
+ mvn clean test -Darquillian=jbossas-managed-7
+
+The `JBOSS_HOME` environment variable must be set and point to a JBoss AS instance
directory.
+
+To test on a running server, use
+
+ mvn clean test -Darquillian=jbossas-remote-7
+
+
+Testing in JBDS
+---------------
+### Integration tests
+
+1. Open JBDS and start a configured instance of JBoss AS
+2. Import the example project and its submodules
+3. In the _Project Explorer_, select the EJB module project, then
+ 1. Type `Ctrl+Alt+P` (_Select Maven Profiles_) and check `integration-tests` and
`arq-jbossas-7-remote`
+ 2. Right-click the module and select _Run As_ - _JUnit Test_
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/seam/example/blog/test/BlogTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/seam/example/blog/test/BlogTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/java/org/jboss/seam/example/blog/test/BlogTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,290 @@
+package org.jboss.seam.example.blog.test;
+
+import java.io.File;
+import java.util.List;
+import java.util.Map;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import javax.faces.model.SelectItem;
+import javax.persistence.EntityManager;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.mock.JUnitSeamTest;
+import org.jboss.seam.security.Identity;
+import org.jboss.seam.theme.Theme;
+import org.jboss.seam.theme.ThemeSelector;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import actions.BlogService;
+import actions.SearchService;
+import domain.Blog;
+import domain.BlogEntry;
+import org.jboss.arquillian.junit.InSequence;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+
+(a)RunWith(Arquillian.class)
+public class BlogTest extends JUnitSeamTest {
+
+ @Deployment(name = "BestSellersTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment() {
+
+ File[] libs = Maven.resolver().loadPomFromFile("pom.xml")
+ .importCompileAndRuntimeDependencies()
+ // force resolve jboss-seam, because it is provided-scoped in the pom,
but we need it bundled in the WAR
+ .resolve("org.jboss.seam:jboss-seam")
+ .withTransitivity().asFile();
+
+ WebArchive war = ShrinkWrap.create(WebArchive.class, "seam-blog.war")
+ .addPackages(true, "actions", "domain")
+ // already in EJB module
+ .addAsWebInfResource("import.sql",
"classes/import.sql")
+ .addAsWebInfResource("seam.properties",
"classes/seam.properties")
+ .addAsWebInfResource("META-INF/persistence.xml",
"classes/META-INF/persistence.xml")
+
+ // manually copied from Web module
+ .addAsWebInfResource("pages.xml", "pages.xml")
+ .addAsWebInfResource("accessible.properties",
"classes/accessible.properties")
+ .addAsWebInfResource("default.properties",
"classes/default.properties")
+ .addAsWebInfResource("printable.properties",
"classes/printable.properties")
+ .addAsWebInfResource("infinispan.xml",
"classes/infinispan.xml")
+ .addAsWebInfResource("jgroupsConfig.xml",
"classes/jgroupsConfig.xml")
+
+ // manually copied from Web module, modified
+ .addAsWebInfResource("web.xml", "web.xml") // only
contains MockSeamListener definition
+ .addAsWebInfResource("components.xml",
"components.xml") // corrected ejb component jndi-name references from
java:app/jboss-seam to java:app/seam-blog
+
+ // manually copied from EAR module
+ .addAsWebInfResource("jboss-deployment-structure.xml",
"jboss-deployment-structure.xml")
+ .addAsLibraries(libs);
+
+ war.addClasses(BlogTest.class);
+
+ return war;
+ }
+
+ @Test
+ @InSequence(1)
+ public void testPost() throws Exception {
+ new FacesRequest() {
+ @Override
+ protected void updateModelValues() throws Exception {
+ Identity.instance().setPassword("tokyo");
+ }
+
+ @Override
+ protected void invokeApplication() throws Exception {
+ Identity.instance().authenticate();
+ }
+ }.run();
+
+ new FacesRequest("/post.xhtml") {
+ @Override
+ protected void updateModelValues() throws Exception {
+ BlogEntry entry = (BlogEntry) getInstance("blogEntry");
+ entry.setId("testing");
+ entry.setTitle("Integration testing Seam applications is
easy!");
+ entry.setBody("This post is about SeamTest...");
+ }
+
+ @Override
+ protected void invokeApplication() throws Exception {
+ // post now returns void
+ // assert
invokeMethod("#{postAction.post}").equals("/index.xhtml");
+ invokeMethod("#{postAction.post}");
+ setOutcome("/index.xhtml");
+ }
+
+ @Override
+ protected void afterRequest() {
+ assert isInvokeApplicationComplete();
+ assert !isRenderResponseBegun();
+ }
+ }.run();
+
+ new NonFacesRequest("/index.xhtml") {
+ @Override
+ protected void renderResponse() throws Exception {
+ List<BlogEntry> blogEntries = ((Blog)
getInstance(BlogService.class)).getBlogEntries();
+ assert blogEntries.size() == 4;
+ BlogEntry blogEntry = blogEntries.get(0);
+ assert blogEntry.getId().equals("testing");
+ assert blogEntry.getBody().equals("This post is about
SeamTest...");
+ assert blogEntry.getTitle().equals("Integration testing Seam
applications is easy!");
+ }
+ }.run();
+
+ new FacesRequest() {
+ @Override
+ protected void invokeApplication() throws Exception {
+ ((EntityManager)
getInstance("entityManager")).createQuery("delete from BlogEntry where
id='testing'").executeUpdate();
+ }
+ }.run();
+
+ }
+
+ @Test
+ @InSequence(2)
+ public void testLatest() throws Exception {
+ new NonFacesRequest("/index.xhtml") {
+ @Override
+ protected void renderResponse() throws Exception {
+ assert ((Blog) getInstance(BlogService.class)).getBlogEntries().size() ==
3;
+ }
+ }.run();
+ }
+
+ @Test
+ @InSequence(3)
+ public void testEntry() throws Exception {
+ new NonFacesRequest("/entry.xhtml") {
+ @Override
+ protected void beforeRequest() {
+ setParameter("blogEntryId", "seamtext");
+ }
+
+ @Override
+ protected void renderResponse() throws Exception {
+ BlogEntry blogEntry = (BlogEntry)
Contexts.getEventContext().get("blogEntry");
+ assert blogEntry != null;
+ assert blogEntry.getId().equals("seamtext");
+
+ // make sure the entry is really there
+ assert blogEntry.getBody().length() > 0;
+ assert blogEntry.getTitle().equals("Introducing Seam Text");
+ }
+ }.run();
+ }
+
+ @Test
+ @InSequence(4)
+ public void testSearch() throws Exception {
+ // Some time to allow indexing in the background
+ Thread.sleep(1000);
+
+ String id = new FacesRequest() {
+ @Override
+ protected void updateModelValues() throws Exception {
+ ((SearchService)
getInstance(SearchService.class)).setSearchPattern("seam");
+ }
+
+ @Override
+ protected String getInvokeApplicationOutcome() {
+ return "/search.xhtml";
+ }
+
+ @Override
+ protected void afterRequest() {
+ assert !isRenderResponseBegun();
+ }
+ }.run();
+
+ new NonFacesRequest("/search.xhtml", id) {
+ @Override
+ protected void beforeRequest() {
+ setParameter("searchPattern", "\"seam
text\"");
+ }
+
+ @Override
+ protected void renderResponse() throws Exception {
+ List<BlogEntry> results = (List<BlogEntry>)
getInstance("searchResults");
+ // The hibernate search returns non-precise matches since version 4, so
we only check that the expected result is first
+ assert !results.isEmpty();
+ assert "seamtext".equals(results.get(0).getId());
+ }
+ }.run();
+ }
+
+ @Test
+ @InSequence(5)
+ public void testSelectTheme() throws Exception {
+ String id = new NonFacesRequest("/index.xhtml") {
+ @Override
+ protected void renderResponse() throws Exception {
+ List<SelectItem> themes = (List<SelectItem>)
getValue("#{themeSelector.themes}");
+ assert themes.size() == 3;
+ assert themes.get(0).getLabel().equals("default");
+ assert themes.get(0).getLabel().equals("default");
+ assert
"default".equals(getValue("#{themeSelector.theme}"));
+
+ assert
"template.xhtml".equals(getValue("#{theme.template}"));
+ // we can't do interpolate the value correctly in these tests
+ // assert
"/screen.css".equals(getValue("#{theme.css}"));
+ assert "foo".equals(getValue("#{theme.foo}"));
+ }
+ }.run();
+
+ new FacesRequest("/index.xhtml", id) {
+ @Override
+ protected void updateModelValues() throws Exception {
+ setValue("#{themeSelector.theme}", "accessible");
+ }
+
+ @Override
+ protected void invokeApplication() throws Exception {
+ invokeAction("#{themeSelector.select}");
+ }
+
+ @Override
+ protected void renderResponse() throws Exception {
+ assert
"accessible".equals(getValue("#{themeSelector.theme}"));
+ //assert
"/accessible.css".equals(getValue("#{theme.css}"));
+ assert
"template.xhtml".equals(getValue("#{theme.template}"));
+ }
+ }.run();
+
+ new FacesRequest("/index.xhtml", id) {
+ @Override
+ protected void invokeApplication() throws Exception {
+
invokeAction("#{themeSelector.selectTheme('printable')}");
+ }
+
+ @Override
+ protected void renderResponse() throws Exception {
+ assert
"printable".equals(getValue("#{themeSelector.theme}"));
+ //assert
"/printable.css".equals(getValue("#{theme.css}"));
+ assert
"print.xhtml".equals(getValue("#{theme.template}"));
+ Map<String, String> theme = Theme.instance();
+ assert theme.entrySet().size() == 2;
+ }
+ }.run();
+
+ new FacesRequest("/index.xhtml", id) {
+ @Override
+ protected void updateModelValues() throws Exception {
+ setValue("#{themeSelector.theme}", "foo");
+ }
+
+ @Override
+ protected void invokeApplication() throws Exception {
+ invokeAction("#{themeSelector.select}");
+ }
+
+ @Override
+ protected void renderResponse() throws Exception {
+ assert
"foo".equals(getValue("#{themeSelector.theme}"));
+ Map<String, String> theme = Theme.instance();
+ ResourceBundle themeResources =
ThemeSelector.instance().getThemeResourceBundle();
+ assert !themeResources.getKeys().hasMoreElements();
+ assert theme.entrySet().size() == 0;
+ boolean exception = false;
+ try {
+ themeResources.getObject("bar");
+ } catch (MissingResourceException e) {
+ exception = true;
+ }
+ assert exception;
+ assert theme.get("bar").equals("bar");
+ }
+ }.run();
+ }
+}
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/accessible.properties
===================================================================
---
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/accessible.properties
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/accessible.properties 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,2 @@
+css #{request.contextPath}/accessible.css
+template template.xhtml
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/arquillian.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/arquillian.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/components.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/components.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/default.properties
===================================================================
---
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/default.properties
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/default.properties 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,2 @@
+css #{request.contextPath}/screen.css
+template template.xhtml
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/infinispan.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/infinispan.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/jboss-deployment-structure.xml
===================================================================
---
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/jboss-deployment-structure.xml
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/jboss-deployment-structure.xml 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,14 @@
+<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
+ <deployment>
+ <dependencies>
+ <module name="org.antlr" export="true"/>
+ <module name="org.apache.log4j" export="true"/>
+ <module name="org.dom4j" export="true"/>
+ <module name="org.apache.commons.logging"
export="true"/>
+ <module name="org.apache.commons.collections"
export="true"/>
+ <module name="javax.faces.api" export="true"/>
+ <module name="com.sun.jsf-impl" export="true"/>
+ <module name="org.jgroups" export="true"/>
+ </dependencies>
+ </deployment>
+</jboss-deployment-structure>
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/jgroupsConfig.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/jgroupsConfig.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/messages.properties
===================================================================
---
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/messages.properties
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/messages.properties 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,2 @@
+javax.faces.component.UIInput.REQUIRED=value is required
+org.jboss.seam.loginSuccessful=
Added: branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/pages.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/pages.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/printable.properties
===================================================================
---
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/printable.properties
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/printable.properties 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,2 @@
+css #{request.contextPath}/printable.css
+template print.xhtml
Added: branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/web.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/blog/blog-ejb/src/test/resources/web.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added: branches/enterprise/WFK-2_1/examples/booking/README.md
===================================================================
--- branches/enterprise/WFK-2_1/examples/booking/README.md (rev
0)
+++ branches/enterprise/WFK-2_1/examples/booking/README.md 2013-06-03 16:41:11 UTC (rev
15525)
@@ -0,0 +1,74 @@
+Seam Booking Example
+=================
+
+This example demonstrates the use of Seam in a Java EE 6 environment.
+Transaction and persistence context management is handled by the EJB container. This
example runs on JBoss AS as an EAR.
+
+Running the example
+-------------------
+
+### Using Maven
+
+To deploy the example to a running JBoss AS instance, follow these steps:
+
+1. In the example root directory run:
+
+ mvn clean install
+
+2. Set JBOSS_HOME environment property.
+
+3. In the booking-ear directory run:
+
+ mvn jboss-as:deploy
+
+4. Open this URL in a web browser:
http://localhost:8080/seam-booking
+
+### Using Ant
+
+1. In the example root directory run:
+
+ ant clean package
+
+2. Copy seam-booking.ear from directory booking-ear/target to the deployment directory of
JBoss AS ($JBOSS_HOME/standalone/deployments by default)
+
+3. Open this URL in a web browser:
http://localhost:8080/seam-booking
+
+
+Testing the example
+-------------------
+
+This example is covered by integration tests. All tests use the following technologies:
+
+* __Arquillian__ - as the framework for EE testing, for managing of container lifecycle
and deployment of test archive,
+* __ShrinkWrap__ - to create the test archive (WAR).
+
+
+### Integration tests
+
+Integration tests cover core application logic and reside in the EJB module. In addition
to Arquillian and ShrinkWrap, the integration tests also use:
+
+* __JUnitSeamTest__ - to hook into the JSF lifecycle and assert server-side state,
+* __ShrinkWrap Resolver__ - to resolve dependencies of the project for packaging in the
test archive.
+
+The tests are executed in Maven's test phase. By default they are skipped and can be
executed on JBoss AS with:
+
+ mvn clean test -Darquillian=jbossas-managed-7
+
+The `JBOSS_HOME` environment variable must be set and point to a JBoss AS instance
directory.
+
+To test on a running server, use
+
+ mvn clean test -Darquillian=jbossas-remote-7
+
+
+Testing in JBDS
+---------------
+### Integration tests
+
+1. Open JBDS and start a configured instance of JBoss AS
+
+2. Import the example project and its submodules
+
+3. In the _Project Explorer_, select the EJB module project, then
+ 1. Type `Ctrl+Alt+P` (_Select Maven Profiles_) and check `integration-tests` and
`arq-jbossas-7-remote`
+ 2. Right-click the module and select _Run As_ - _JUnit Test_
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,143 @@
+//$Id: BookingTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.contexts.Lifecycle;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.booking.Booking;
+import org.jboss.seam.example.booking.BookingList;
+import org.jboss.seam.example.booking.Hotel;
+import org.jboss.seam.example.booking.HotelBooking;
+import org.jboss.seam.example.booking.HotelSearching;
+import org.jboss.seam.example.booking.User;
+import org.jboss.seam.security.Identity;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class BookingTest
+{
+ @Deployment(name="BookingTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment()
+ {
+ WebArchive war = Deployments.bookingDeployment();
+
+ war.addClasses(BookingTest.class);
+
+ return war;
+ }
+
+ @Before
+ public void before() {
+ Lifecycle.beginCall();
+ }
+
+ @After
+ public void after() {
+ Lifecycle.endCall();
+ }
+
+ @Test
+ public void testBookHotel() throws Exception
+ {
+ Manager manager = Manager.instance();
+ Identity identity = Identity.instance();
+ HotelSearching hotelSearch =
(HotelSearching)Component.getInstance("hotelSearch");
+ HotelBooking hotelBooking =
(HotelBooking)Component.getInstance("hotelBooking");
+ BookingList bookingList =
(BookingList)Component.getInstance("bookingList");
+
+ manager.initializeTemporaryConversation();
+ Contexts.getSessionContext().set("user", new User("Gavin King",
"foobar", "gavin"));
+
+ identity.setUsername("gavin");
+ identity.setPassword("foobar");
+ identity.login();
+
+ hotelSearch.setSearchString("Union Square");
+ hotelSearch.find();
+
+ DataModel hotels = (DataModel)
Contexts.getSessionContext().get("hotels");
+
+ assertEquals(1, hotels.getRowCount());
+ assertEquals("NY", ((Hotel) hotels.getRowData() ).getCity());
+ assertEquals("Union Square", hotelSearch.getSearchString());
+ assertFalse(manager.isLongRunningConversation());
+
+ hotels = (DataModel) Contexts.getSessionContext().get("hotels");
+ assertEquals(1, hotels.getRowCount());
+ hotelBooking.selectHotel( (Hotel) hotels.getRowData() );
+
+ Hotel hotel = (Hotel) Contexts.getConversationContext().get("hotel");
+ assertEquals("NY", hotel.getCity());
+ assertEquals("10011", hotel.getZip());
+ assertTrue(manager.isLongRunningConversation());
+
+ hotelBooking.bookHotel();
+
+ Booking booking = (Booking)
Contexts.getConversationContext().get("booking");
+ assertNotNull(booking.getUser());
+ assertNotNull(booking.getHotel());
+ assertNull(booking.getCreditCard());
+ assertNull(booking.getCreditCardName());
+
+ assertEquals(Contexts.getConversationContext().get("hotel"),
booking.getHotel());
+ assertEquals(Contexts.getSessionContext().get("user"),
booking.getUser());
+ assertTrue(Manager.instance().isLongRunningConversation());
+
+ booking.setCreditCard("1234567891021234");
+ booking.setCreditCardName("GAVIN KING");
+ booking.setBeds(2);
+ Date now = new Date();
+ booking.setCheckinDate(now);
+ booking.setCheckoutDate(now);
+
+ hotelBooking.setBookingDetails();
+ assertFalse(hotelBooking.isBookingValid());
+
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, 2);
+ booking.setCheckoutDate(cal.getTime());
+
+ hotelBooking.setBookingDetails();
+ assertTrue(hotelBooking.isBookingValid());
+ assertTrue(manager.isLongRunningConversation());
+
+ hotelBooking.confirm();
+
+ ListDataModel bookings = (ListDataModel)
Component.getInstance("bookings");
+ assertEquals(1, bookings.getRowCount());
+ bookings.setRowIndex(0);
+ booking = (Booking) bookings.getRowData();
+ assertEquals("NY", booking.getHotel().getCity());
+ assertEquals("gavin", booking.getUser().getUsername());
+ assertFalse(manager.isLongRunningConversation());
+
+ bookings = (ListDataModel) Contexts.getSessionContext().get("bookings");
+ bookings.setRowIndex(0);
+ bookingList.cancel();
+
+ bookings = (ListDataModel) Contexts.getSessionContext().get("bookings");
+ assertEquals(0, bookings.getRowCount());
+ assertFalse(manager.isLongRunningConversation());
+ }
+
+}
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,106 @@
+//$Id: ChangePasswordTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.contexts.Lifecycle;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.booking.ChangePassword;
+import org.jboss.seam.example.booking.User;
+import org.jboss.seam.security.Identity;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class ChangePasswordTest
+{
+ @Deployment(name="ChangePasswordTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment()
+ {
+ WebArchive war = Deployments.bookingDeployment();
+
+ war.addClasses(ChangePasswordTest.class);
+
+ return war;
+ }
+
+ @Before
+ public void before() {
+ Lifecycle.beginCall();
+ }
+
+ @After
+ public void after() {
+ Lifecycle.endCall();
+ }
+
+ @Test
+ public void testChangePassword() throws Exception
+ {
+ Identity identity = Identity.instance();
+
+ Contexts.getSessionContext().set("user", new User("Gavin King",
"foobar", "gavin"));
+ identity.setUsername("gavin");
+ identity.setPassword("foobar");
+ identity.login();
+
+ User user = (User)Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+
+ user.setPassword("xxxyyy");
+ ChangePassword changePassword =
(ChangePassword)Component.getInstance("changePassword");
+ changePassword.setVerify("xxyyyx");
+ changePassword.changePassword();
+
+ user = (User)Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+
+ user = (User)Component.getInstance("user");
+ user.setPassword("xxxyyy");
+ changePassword =
(ChangePassword)Component.getInstance("changePassword");
+ changePassword.setVerify("xxxyyy");
+ changePassword.changePassword();
+
+ user = (User)Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("xxxyyy", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+
+ user = (User)Component.getInstance("user");
+ assertEquals("xxxyyy", user.getPassword());
+ user.setPassword("foobar");
+ changePassword =
(ChangePassword)Component.getInstance("changePassword");
+ changePassword.setVerify("foobar");
+ changePassword.changePassword();
+
+ user = (User)Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+ }
+
+}
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/Deployments.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/Deployments.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/Deployments.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,30 @@
+package org.jboss.seam.example.booking.test;
+
+import java.io.File;
+import org.jboss.seam.example.booking.Booking;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+
+public class Deployments {
+
+ public static WebArchive bookingDeployment() {
+
+ File[] libs = Maven.resolver().loadPomFromFile("pom.xml")
+ .importCompileAndRuntimeDependencies()
+ // force resolve jboss-seam, because it is provided-scoped in the pom,
but we need it bundled in the WAR
+ .resolve("org.jboss.seam:jboss-seam")
+ .withTransitivity().asFile();
+
+ return ShrinkWrap.create(WebArchive.class, "seam-booking.war")
+ .addPackage(Booking.class.getPackage())
+ .addAsWebInfResource("META-INF/ejb-jar.xml",
"ejb-jar.xml")
+ .addAsWebInfResource("import.sql",
"classes/import.sql")
+ .addAsWebInfResource("persistence.xml",
"classes/META-INF/persistence.xml")
+ .addAsWebInfResource("components.xml",
"components.xml")
+ .addAsWebInfResource("jboss-deployment-structure.xml",
"jboss-deployment-structure.xml")
+ .addAsWebInfResource("seam.properties",
"classes/seam.properties")
+ .addAsWebInfResource("web.xml", "web.xml")
+ .addAsLibraries(libs);
+ }
+}
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,94 @@
+//$Id: LoginTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Lifecycle;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.booking.User;
+import org.jboss.seam.security.Identity;
+import org.jboss.seam.web.Session;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class LoginTest
+{
+ @Deployment(name="LoginTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment()
+ {
+ WebArchive war = Deployments.bookingDeployment();
+
+ war.addClasses(LoginTest.class);
+
+ return war;
+ }
+
+ @Before
+ public void before() {
+ Lifecycle.beginCall();
+ }
+
+ @After
+ public void after() {
+ Lifecycle.endCall();
+ }
+
+ @Test
+ public void testLoginComponent() throws Exception
+ {
+ Identity identity = Identity.instance();
+
+ assertFalse(identity.isLoggedIn());
+ identity.setUsername("gavin");
+ identity.setPassword("foobar");
+ identity.login();
+
+ User user = (User)Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertTrue(identity.isLoggedIn());
+ identity.logout();
+ assertFalse(identity.isLoggedIn());
+ identity.setUsername("gavin");
+ identity.setPassword("tiger");
+ identity.login();
+ assertFalse(identity.isLoggedIn());
+ }
+
+ @Test
+ public void testLogin() throws Exception
+ {
+ Identity identity = Identity.instance();
+
+ assertFalse(identity.isLoggedIn());
+
+ identity.setUsername("gavin");
+ identity.setPassword("foobar");
+ identity.login();
+
+ User user = (User)Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+
+ identity.logout();
+ assertTrue(Session.instance().isInvalid());
+
+ assertFalse(identity.isLoggedIn());
+ }
+
+}
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/arquillian.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/arquillian.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/components.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/components.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/jboss-deployment-structure.xml
===================================================================
---
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/jboss-deployment-structure.xml
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/jboss-deployment-structure.xml 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,12 @@
+<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
+ <deployment>
+ <dependencies>
+ <module name="org.apache.log4j" export="true"/>
+ <module name="org.dom4j" export="true"/>
+ <module name="org.apache.commons.logging"
export="true"/>
+ <module name="org.apache.commons.collections"
export="true"/>
+ <module name="javax.faces.api" export="true"/>
+ <module name="com.sun.jsf-impl" export="true"/>
+ </dependencies>
+ </deployment>
+</jboss-deployment-structure>
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/persistence.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/persistence.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/web.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/booking/booking-ejb/src/test/resources/web.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added: branches/enterprise/WFK-2_1/examples/groovybooking/README.md
===================================================================
--- branches/enterprise/WFK-2_1/examples/groovybooking/README.md
(rev 0)
+++ branches/enterprise/WFK-2_1/examples/groovybooking/README.md 2013-06-03 16:41:11 UTC
(rev 15525)
@@ -0,0 +1,22 @@
+Seam GroovyBooking Example
+=================
+
+This is the Hotel Booking example implemented in Groovy Beans and Hibernate JPA.
+The application is deployed as a WAR rather than an EAR.
+
+Running the example
+-------------------
+
+To deploy the example to a running JBoss AS instance, follow these steps:
+
+1. In the example root directory run:
+
+ mvn clean install
+
+2. Set JBOSS_HOME environment property.
+
+3. In the groovybooking-web directory run:
+
+ mvn jboss-as:deploy
+
+4. Open this URL in a web browser:
http://localhost:8080/groovybooking-web
Added: branches/enterprise/WFK-2_1/examples/hibernate/README.md
===================================================================
--- branches/enterprise/WFK-2_1/examples/hibernate/README.md (rev
0)
+++ branches/enterprise/WFK-2_1/examples/hibernate/README.md 2013-06-03 16:41:11 UTC (rev
15525)
@@ -0,0 +1,60 @@
+Seam Hibernate Example
+=================
+
+This is the Hotel Booking example implemented in Seam and Hibernate POJOs.
+
+Running the example
+-------------------
+
+To deploy the example to a running JBoss AS instance, follow these steps:
+
+1. In the example root directory run:
+
+ mvn clean install
+
+2. Set JBOSS_HOME environment property.
+
+3. In the hibernate-web directory run:
+
+ mvn jboss-as:deploy
+
+4. Open this URL in a web browser:
http://localhost:8080/hibernate-web
+
+
+Testing the example
+-------------------
+
+This example is covered by integration tests. All tests use the following technologies:
+
+* __Arquillian__ - as the framework for EE testing, for managing of container lifecycle
and deployment of test archive,
+* __ShrinkWrap__ - to create the test archive (WAR).
+
+
+### Integration tests
+
+Integration tests cover core application logic and reside in the EJB module. In addition
to Arquillian and ShrinkWrap, the integration tests also use:
+
+* __JUnitSeamTest__ - to hook into the JSF lifecycle and assert server-side state,
+* __ShrinkWrap Resolver__ - to resolve dependencies of the project for packaging in the
test archive.
+
+_Note: For this test to function properly, it is necessary to run the JBoss AS instance
with the **-ea** JVM argument (Enable Assertions)._
+
+The tests are executed in Maven's test phase. By default they are skipped and can be
executed on JBoss AS with:
+
+ mvn clean test -Darquillian=jbossas-managed-7
+
+The `JBOSS_HOME` environment variable must be set and point to a JBoss AS instance
directory.
+
+To test on a running server, use
+
+ mvn clean test -Darquillian=jbossas-remote-7
+
+Testing in JBDS
+---------------
+### Integration tests
+
+1. Open JBDS and start a configured instance of JBoss AS
+2. Import the example project and its submodules
+3. In the _Project Explorer_, select the Web module project, then
+ 1. Type `Ctrl+Alt+P` (_Select Maven Profiles_) and check `integration-tests` and
`arq-jbossas-7-remote`
+ 2. Right-click the module and select _Run As_ - _JUnit Test_
Added:
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/BookingTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/BookingTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/BookingTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,300 @@
+//$Id: BookingTest.java 6987 2007-12-23 19:53:07Z pmuir $
+package org.jboss.seam.example.hibernate.test;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Iterator;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.hibernate.Booking;
+import org.jboss.seam.example.hibernate.Hotel;
+import org.jboss.seam.example.hibernate.HotelBookingAction;
+import org.jboss.seam.example.hibernate.User;
+import org.jboss.seam.mock.JUnitSeamTest;
+import org.jboss.shrinkwrap.api.Archive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class BookingTest extends JUnitSeamTest
+{
+ @Deployment(name="BookingTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment()
+ {
+ return Deployments.hibernateDeployment();
+ }
+
+ @Test
+ public void testBookHotel() throws Exception
+ {
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication() throws Exception
+ {
+ Contexts.getSessionContext().set("user", new User("Gavin
King", "foobar", "gavin"));
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "foobar");
+ invokeAction("#{identity.login}");
+ }
+
+ }.run();
+
+ new FacesRequest("/main.xhtml") {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ setValue("#{hotelSearch.searchString}", "Union Square");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert invokeAction("#{hotelSearch.find}")==null;
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ DataModel hotels = (DataModel)
Contexts.getSessionContext().get("hotels");
+ assert hotels.getRowCount()==1;
+ assert ( (Hotel) hotels.getRowData() ).getCity().equals("NY");
+ assert getValue("#{hotelSearch.searchString}").equals("Union
Square");
+ assert !Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ String id = new FacesRequest("/main.xhtml") {
+
+ @Override
+ protected void invokeApplication() throws Exception {
+ HotelBookingAction hotelBooking = (HotelBookingAction)
getInstance("hotelBooking");
+ DataModel hotels = (DataModel)
Contexts.getSessionContext().get("hotels");
+ assert hotels.getRowCount()==1;
+ hotelBooking.selectHotel( (Hotel) hotels.getRowData() );
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ Hotel hotel = (Hotel)
Contexts.getConversationContext().get("hotel");
+ assert hotel.getCity().equals("NY");
+ assert hotel.getZip().equals("10011");
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ id = new FacesRequest("/hotel.xhtml", id) {
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeAction("#{hotelBooking.bookHotel}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{booking.user}")!=null;
+ assert getValue("#{booking.hotel}")!=null;
+ assert getValue("#{booking.creditCard}")==null;
+ assert getValue("#{booking.creditCardName}")==null;
+ Booking booking = (Booking)
Contexts.getConversationContext().get("booking");
+ assert
booking.getHotel()==Contexts.getConversationContext().get("hotel");
+ assert
booking.getUser()==Contexts.getSessionContext().get("user");
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ new FacesRequest("/book.xhtml", id) {
+
+ @Override
+ protected void processValidations() throws Exception
+ {
+ validateValue("#{booking.creditCard}", "123");
+ assert isValidationFailure();
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ Iterator messages = FacesContext.getCurrentInstance().getMessages();
+ assert messages.hasNext();
+ assert ( (FacesMessage) messages.next() ).getSummary().equals("Credit
card number must 16 digits long");
+ assert !messages.hasNext();
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert !isInvokeApplicationBegun();
+ }
+
+ }.run();
+
+ new FacesRequest("/book.xhtml", id) {
+
+ @Override
+ protected void processValidations() throws Exception
+ {
+ validateValue("#{booking.creditCardName}", "");
+ assert isValidationFailure();
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ Iterator messages = FacesContext.getCurrentInstance().getMessages();
+ assert messages.hasNext();
+ assert ( (FacesMessage) messages.next() ).getSummary().equals("Credit
card name is required");
+ assert !messages.hasNext();
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert !isInvokeApplicationBegun();
+ }
+
+ }.run();
+
+ new FacesRequest("/book.xhtml", id) {
+
+ @Override @SuppressWarnings("deprecation")
+ protected void updateModelValues() throws Exception
+ {
+ setValue("#{booking.creditCard}", "1234567891021234");
+ setValue("#{booking.creditCardName}", "GAVIN KING");
+ setValue("#{booking.beds}", 2);
+ Date now = new Date();
+ setValue("#{booking.checkinDate}", now);
+ setValue("#{booking.checkoutDate}", now);
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert invokeAction("#{hotelBooking.setBookingDetails}")==null;
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ Iterator messages = FacesContext.getCurrentInstance().getMessages();
+ assert messages.hasNext();
+ FacesMessage message = (FacesMessage) messages.next();
+ assert message.getSummary().equals("Check out date must be later than
check in date");
+ assert !messages.hasNext();
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert isInvokeApplicationComplete();
+ }
+
+ }.run();
+
+ new FacesRequest("/book.xhtml", id) {
+
+ @Override @SuppressWarnings("deprecation")
+ protected void updateModelValues() throws Exception
+ {
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, 2);
+ setValue("#{booking.checkoutDate}", cal.getTime() );
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeAction("#{hotelBooking.setBookingDetails}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert Manager.instance().isLongRunningConversation();
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert isInvokeApplicationComplete();
+ }
+
+ }.run();
+
+ new FacesRequest("/confirm.xhtml", id) {
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeAction("#{hotelBooking.confirm}");
+ }
+
+ @Override
+ protected void afterRequest()
+ {
+ assert isInvokeApplicationComplete();
+ }
+
+ }.run();
+
+ new NonFacesRequest("/main.xhtml") {
+
+ @Override
+ protected void renderResponse()
+ {
+ ListDataModel bookings = (ListDataModel) getInstance("bookings");
+ assert bookings.getRowCount()==1;
+ bookings.setRowIndex(0);
+ Booking booking = (Booking) bookings.getRowData();
+ assert booking.getHotel().getCity().equals("NY");
+ assert booking.getUser().getUsername().equals("gavin");
+ assert !Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ new FacesRequest("/main.xhtml") {
+
+ @Override
+ protected void invokeApplication()
+ {
+ ListDataModel bookings = (ListDataModel)
Contexts.getSessionContext().get("bookings");
+ bookings.setRowIndex(0);
+ invokeAction("#{bookingList.cancel}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ ListDataModel bookings = (ListDataModel)
Contexts.getSessionContext().get("bookings");
+ assert bookings.getRowCount()==0;
+ assert !Manager.instance().isLongRunningConversation();
+ }
+
+ }.run();
+
+ }
+
+}
Added:
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/ChangePasswordTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/ChangePasswordTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/ChangePasswordTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,150 @@
+//$Id: ChangePasswordTest.java 6987 2007-12-23 19:53:07Z pmuir $
+package org.jboss.seam.example.hibernate.test;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.hibernate.User;
+import org.jboss.seam.mock.JUnitSeamTest;
+import org.jboss.shrinkwrap.api.Archive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class ChangePasswordTest extends JUnitSeamTest
+{
+ @Deployment(name="ChangePasswordTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment()
+ {
+ return Deployments.hibernateDeployment();
+ }
+
+ @Test
+ public void testChangePassword() throws Exception
+ {
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication() throws Exception
+ {
+ Contexts.getSessionContext().set("user", new User("Gavin
King", "foobar", "gavin"));
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "foobar");
+ invokeMethod("#{identity.login}");
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void processValidations() throws Exception
+ {
+ validateValue("#{user.password}", "xxx");
+ assert isValidationFailure();
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ setValue("#{user.password}", "xxxyyy");
+ setValue("#{changePassword.verify}", "xxyyyx");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert invokeAction("#{changePassword.changePassword}")==null;
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ setValue("#{user.password}", "xxxyyy");
+ setValue("#{changePassword.verify}", "xxxyyy");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeMethod("#{changePassword.changePassword}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("xxxyyy");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ assert getValue("#{user.password}").equals("xxxyyy");
+ setValue("#{user.password}", "foobar");
+ setValue("#{changePassword.verify}", "foobar");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeMethod("#{changePassword.changePassword}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+
+ }
+
+ }.run();
+
+ }
+
+}
Added:
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/Deployments.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/Deployments.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/Deployments.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,38 @@
+package org.jboss.seam.example.hibernate.test;
+
+import java.io.File;
+import org.jboss.seam.example.hibernate.Booking;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+
+public class Deployments {
+
+ public static WebArchive hibernateDeployment() {
+
+ File[] libs = Maven.resolver().loadPomFromFile("pom.xml")
+ .importCompileAndRuntimeDependencies()
+ .resolve().withTransitivity().asFile();
+
+ // Get File reference to src/main/webapp/WEB-INF, to avoid duplication of
resources for the test archive
+ // Depends on shrinkwrap-resolver-maven-plugin to set the property
+ File webInf = new File(new File("pom.xml").getParentFile(),
"src/main/webapp/WEB-INF");
+
+ return ShrinkWrap.create(WebArchive.class, "hibernate-web.war")
+ .addPackage(Booking.class.getPackage())
+
+ // copy classpath resources to WAR classpath
+ .addAsWebInfResource("import.sql",
"classes/import.sql")
+ .addAsWebInfResource("seam.properties",
"classes/seam.properties")
+ .addAsWebInfResource("hibernate.cfg.xml",
"classes/hibernate.cfg.xml")
+
+ // copy files from src/main/webapp to test-archive's WEB-INF
+ .addAsWebInfResource(new File(webInf, "components.xml"))
+ .addAsWebInfResource(new File(webInf,
"jboss-deployment-structure.xml"))
+ .addAsWebInfResource(new File(webInf, "pages.xml"))
+
+ // modified web.xml, defines only MockSeamListener
+ .addAsWebInfResource("web.xml")
+ .addAsLibraries(libs);
+ }
+}
Added:
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/LoginTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/LoginTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/java/org/jboss/seam/example/hibernate/test/LoginTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,127 @@
+//$Id: LoginTest.java 6987 2007-12-23 19:53:07Z pmuir $
+package org.jboss.seam.example.hibernate.test;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.web.Session;
+import org.jboss.seam.mock.JUnitSeamTest;
+import org.jboss.shrinkwrap.api.Archive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class LoginTest extends JUnitSeamTest
+{
+ @Deployment(name="LoginTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment()
+ {
+ return Deployments.hibernateDeployment();
+ }
+
+ @Test
+ public void testLoginComponent() throws Exception
+ {
+ new ComponentTest() {
+
+ @Override
+ protected void testComponents() throws Exception
+ {
+ assert getValue("#{identity.loggedIn}").equals(false);
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "foobar");
+ invokeMethod("#{identity.login}");
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert getValue("#{identity.loggedIn}").equals(true);
+ invokeMethod("#{identity.logout}");
+ assert getValue("#{identity.loggedIn}").equals(false);
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "tiger");
+ invokeMethod("#{identity.login}");
+ assert getValue("#{identity.loggedIn}").equals(false);
+ }
+
+ }.run();
+ }
+
+ @Test
+ public void testLogin() throws Exception
+ {
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert !isSessionInvalid();
+ assert getValue("#{identity.loggedIn}").equals(false);
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void updateModelValues() throws Exception
+ {
+ assert !isSessionInvalid();
+ setValue("#{identity.username}", "gavin");
+ setValue("#{identity.password}", "foobar");
+ }
+
+ @Override
+ protected void invokeApplication()
+ {
+ invokeAction("#{identity.login}");
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{user.name}").equals("Gavin King");
+ assert getValue("#{user.username}").equals("gavin");
+ assert getValue("#{user.password}").equals("foobar");
+ assert !Manager.instance().isLongRunningConversation();
+ assert getValue("#{identity.loggedIn}").equals(true);
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert !isSessionInvalid();
+ assert getValue("#{identity.loggedIn}").equals(true);
+ }
+
+ }.run();
+
+ new FacesRequest() {
+
+ @Override
+ protected void invokeApplication()
+ {
+ assert !Manager.instance().isLongRunningConversation();
+ assert !isSessionInvalid();
+ invokeMethod("#{identity.logout}");
+ assert Session.instance().isInvalid();
+ }
+
+ @Override
+ protected void renderResponse()
+ {
+ assert getValue("#{identity.loggedIn}").equals(false);
+ assert Session.instance().isInvalid();
+ }
+
+ }.run();
+
+ }
+
+}
Added:
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/resources/arquillian.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/resources/arquillian.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/resources/web.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/hibernate/hibernate-web/src/test/resources/web.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added: branches/enterprise/WFK-2_1/examples/jee6/README.md
===================================================================
--- branches/enterprise/WFK-2_1/examples/jee6/README.md (rev 0)
+++ branches/enterprise/WFK-2_1/examples/jee6/README.md 2013-06-03 16:41:11 UTC (rev
15525)
@@ -0,0 +1,60 @@
+Seam Booking Example
+====================
+
+This example demonstrates the use of Seam in a Java EE 6 environment.
+Transaction and persistence context management is handled by the
+EJB container. This example runs on JBoss AS as a WAR
+
+Running the example
+-------------------
+
+To deploy the example to a running JBoss AS instance, follow these steps:
+
+1. In the example root directory run:
+
+ mvn clean install
+
+2. Set JBOSS_HOME environment property.
+
+3. In the jee6-web directory run:
+
+ mvn jboss-as:deploy
+
+* Open this URL in a web browser:
http://localhost:8080/jee6-web
+
+
+Testing the example
+-------------------
+
+This example is covered by integration tests. All tests use the following technologies:
+
+* __Arquillian__ - as the framework for EE testing, for managing of container lifecycle
and deployment of test archive,
+* __ShrinkWrap__ - to create the test archive (WAR).
+
+
+### Integration tests
+
+Integration tests cover core application logic and reside in the EJB module. In addition
to Arquillian and ShrinkWrap, the integration tests also use:
+
+* __JUnitSeamTest__ - to hook into the JSF lifecycle and assert server-side state,
+* __ShrinkWrap Resolver__ - to resolve dependencies of the project for packaging in the
test archive.
+
+The tests are executed in Maven's test phase. By default they are skipped and can be
executed on JBoss AS with:
+
+ mvn clean test -Darquillian=jbossas-managed-7
+
+The `JBOSS_HOME` environment variable must be set and point to a JBoss AS instance
directory.
+
+To test on a running server, use
+
+ mvn clean test -Darquillian=jbossas-remote-7
+
+Testing in JBDS
+---------------
+### Integration tests
+
+1. Open JBDS and start a configured instance of JBoss AS
+2. Import the example project and its submodules
+3. In the _Project Explorer_, select the Web module project, then
+ 1. Type `Ctrl+Alt+P` (_Select Maven Profiles_) and check `integration-tests` and
`arq-jbossas-7-remote`
+ 2. Right-click the module and select _Run As_ - _JUnit Test_
Added:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/BookingTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,142 @@
+//$Id: BookingTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import javax.faces.model.DataModel;
+import javax.faces.model.ListDataModel;
+
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.contexts.Lifecycle;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.booking.Booking;
+import org.jboss.seam.example.booking.BookingListAction;
+import org.jboss.seam.example.booking.Hotel;
+import org.jboss.seam.example.booking.HotelBookingAction;
+import org.jboss.seam.example.booking.HotelSearchingAction;
+import org.jboss.seam.example.booking.RecentBookingsAction;
+import org.jboss.seam.example.booking.User;
+import org.jboss.seam.security.Identity;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class BookingTest {
+
+ @Deployment(name = "BookingTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment() {
+ return Deployments.bookingDeployment();
+ }
+
+ @Before
+ public void before() {
+ Lifecycle.beginCall();
+ }
+
+ @After
+ public void after() {
+ Lifecycle.endCall();
+ }
+
+ @Test
+ public void testBookHotel() throws Exception {
+ Manager manager = Manager.instance();
+ Identity identity = Identity.instance();
+ HotelSearchingAction hotelSearch = (HotelSearchingAction)
Component.getInstance("hotelSearch");
+ HotelBookingAction hotelBooking = (HotelBookingAction)
Component.getInstance("hotelBooking");
+ BookingListAction bookingList = (BookingListAction)
Component.getInstance("bookingList");
+
+ manager.initializeTemporaryConversation();
+ Contexts.getSessionContext().set("user", new User("Gavin
King", "foobar", "gavin"));
+
+ identity.setUsername("gavin");
+ identity.setPassword("foobar");
+ identity.login();
+
+ hotelSearch.setSearchString("Union Square");
+ hotelSearch.find();
+
+ DataModel hotels = (DataModel)
Contexts.getSessionContext().get("hotels");
+
+ assertEquals(1, hotels.getRowCount());
+ assertEquals("NY", ((Hotel) hotels.getRowData()).getCity());
+ assertEquals("Union Square", hotelSearch.getSearchString());
+ assertFalse(manager.isLongRunningConversation());
+
+ long hotelId = ((Hotel) hotels.getRowData()).getId();
+ RecentBookingsAction recentBookings = (RecentBookingsAction)
Component.getInstance("recentBookings");
+ assertNull(recentBookings.getMostRecentBookingDate(hotelId));
+
+ hotels = (DataModel) Contexts.getSessionContext().get("hotels");
+ assertEquals(1, hotels.getRowCount());
+ hotelBooking.selectHotel((Hotel) hotels.getRowData());
+
+ Hotel hotel = (Hotel) Contexts.getConversationContext().get("hotel");
+ assertEquals("NY", hotel.getCity());
+ assertEquals("10011", hotel.getZip());
+ assertTrue(manager.isLongRunningConversation());
+
+ hotelBooking.bookHotel();
+
+ Booking booking = (Booking)
Contexts.getConversationContext().get("booking");
+ assertNotNull(booking.getUser());
+ assertNotNull(booking.getHotel());
+ assertNull(booking.getCreditCard());
+ assertNull(booking.getCreditCardName());
+
+ assertEquals(Contexts.getConversationContext().get("hotel"),
booking.getHotel());
+ assertEquals(Contexts.getSessionContext().get("user"),
booking.getUser());
+ assertTrue(Manager.instance().isLongRunningConversation());
+
+ booking.setCreditCard("1234567891021234");
+ booking.setCreditCardName("GAVIN KING");
+ booking.setBeds(2);
+ Date now = new Date();
+ booking.setCheckinDate(now);
+ booking.setCheckoutDate(now);
+
+ hotelBooking.setBookingDetails();
+ assertFalse(hotelBooking.isBookingValid());
+
+ Calendar cal = Calendar.getInstance();
+ cal.add(Calendar.DAY_OF_MONTH, 2);
+ booking.setCheckoutDate(cal.getTime());
+
+ hotelBooking.setBookingDetails();
+ assertTrue(hotelBooking.isBookingValid());
+ assertTrue(manager.isLongRunningConversation());
+
+ hotelBooking.confirm();
+
+ ListDataModel bookings = (ListDataModel)
Component.getInstance("bookings");
+ assertEquals(1, bookings.getRowCount());
+ bookings.setRowIndex(0);
+ booking = (Booking) bookings.getRowData();
+ assertEquals("NY", booking.getHotel().getCity());
+ assertEquals("gavin", booking.getUser().getUsername());
+ assertFalse(manager.isLongRunningConversation());
+
+ recentBookings = (RecentBookingsAction)
Component.getInstance("recentBookings");
+ assertNotNull(recentBookings.getMostRecentBookingDate(hotelId));
+
+ bookings = (ListDataModel)
Contexts.getSessionContext().get("bookings");
+ bookings.setRowIndex(0);
+ bookingList.cancel();
+
+ bookings = (ListDataModel)
Contexts.getSessionContext().get("bookings");
+ assertEquals(0, bookings.getRowCount());
+ assertFalse(manager.isLongRunningConversation());
+ }
+}
Added:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/ChangePasswordTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,97 @@
+//$Id: ChangePasswordTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Contexts;
+import org.jboss.seam.contexts.Lifecycle;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.booking.ChangePasswordAction;
+import org.jboss.seam.example.booking.User;
+import org.jboss.seam.security.Identity;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class ChangePasswordTest {
+
+ @Deployment(name = "ChangePasswordTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment() {
+ return Deployments.bookingDeployment();
+ }
+
+ @Before
+ public void before() {
+ Lifecycle.beginCall();
+ }
+
+ @After
+ public void after() {
+ Lifecycle.endCall();
+ }
+
+ @Test
+ public void testChangePassword() throws Exception {
+ Identity identity = Identity.instance();
+
+ Contexts.getSessionContext().set("user", new User("Gavin
King", "foobar", "gavin"));
+ identity.setUsername("gavin");
+ identity.setPassword("foobar");
+ identity.login();
+
+ User user = (User) Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+
+ user.setPassword("xxxyyy");
+ ChangePasswordAction changePassword = (ChangePasswordAction)
Component.getInstance("changePassword");
+ changePassword.setVerify("xxyyyx");
+ changePassword.changePassword();
+
+ user = (User) Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+
+ user = (User) Component.getInstance("user");
+ user.setPassword("xxxyyy");
+ changePassword = (ChangePasswordAction)
Component.getInstance("changePassword");
+ changePassword.setVerify("xxxyyy");
+ changePassword.changePassword();
+
+ user = (User) Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("xxxyyy", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+
+ user = (User) Component.getInstance("user");
+ assertEquals("xxxyyy", user.getPassword());
+ user.setPassword("foobar");
+ changePassword = (ChangePasswordAction)
Component.getInstance("changePassword");
+ changePassword.setVerify("foobar");
+ changePassword.changePassword();
+
+ user = (User) Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+ }
+}
Added:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/Deployments.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/Deployments.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/Deployments.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,39 @@
+package org.jboss.seam.example.booking.test;
+
+import java.io.File;
+import org.jboss.seam.example.booking.Booking;
+
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.jboss.shrinkwrap.resolver.api.maven.Maven;
+
+public class Deployments {
+
+ public static WebArchive bookingDeployment() {
+
+ File[] libs = Maven.resolver().loadPomFromFile("pom.xml")
+ .importCompileAndRuntimeDependencies()
+ .resolve().withTransitivity().asFile();
+
+ // Get File reference to src/main/webapp/WEB-INF, to avoid duplication of
resources for the test archive
+ // Depends on shrinkwrap-resolver-maven-plugin to set the property
+ File webInf = new File(new File("pom.xml").getParentFile(),
"src/main/webapp/WEB-INF");
+
+ return ShrinkWrap.create(WebArchive.class, "jee6-web.war")
+ .addPackage(Booking.class.getPackage())
+
+ // copy classpath resources to WAR classpath
+ .addAsWebInfResource("import.sql",
"classes/import.sql")
+ .addAsWebInfResource("seam.properties",
"classes/seam.properties")
+ .addAsWebInfResource("persistence.xml",
"classes/META-INF/persistence.xml")
+ .addAsWebInfResource("components.xml")
+
+ // copy files from src/main/webapp to test-archive's WEB-INF
+ .addAsWebInfResource(new File(webInf,
"jboss-deployment-structure.xml"))
+ .addAsWebInfResource(new File(webInf, "pages.xml"))
+ .addAsWebInfResource(new File(webInf, "ejb-jar.xml"))
+ .addAsWebInfResource(new File(webInf, "web.xml"))
+
+ .addAsLibraries(libs);
+ }
+}
Added:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java
===================================================================
---
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java
(rev 0)
+++
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/java/org/jboss/seam/example/booking/test/LoginTest.java 2013-06-03
16:41:11 UTC (rev 15525)
@@ -0,0 +1,85 @@
+//$Id: LoginTest.java 5810 2007-07-16 06:46:47Z gavin $
+package org.jboss.seam.example.booking.test;
+
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.container.test.api.OverProtocol;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.seam.Component;
+import org.jboss.seam.contexts.Lifecycle;
+import org.jboss.seam.core.Manager;
+import org.jboss.seam.example.booking.User;
+import org.jboss.seam.security.Identity;
+import org.jboss.seam.web.Session;
+
+import static org.junit.Assert.*;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+(a)RunWith(Arquillian.class)
+public class LoginTest {
+
+ @Deployment(name = "LoginTest")
+ @OverProtocol("Servlet 3.0")
+ public static Archive<?> createDeployment() {
+ return Deployments.bookingDeployment();
+ }
+
+ @Before
+ public void before() {
+ Lifecycle.beginCall();
+ }
+
+ @After
+ public void after() {
+ Lifecycle.endCall();
+ }
+
+ @Test
+ public void testLoginComponent() throws Exception {
+ Identity identity = Identity.instance();
+
+ assertFalse(identity.isLoggedIn());
+ identity.setUsername("gavin");
+ identity.setPassword("foobar");
+ identity.login();
+
+ User user = (User) Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertTrue(identity.isLoggedIn());
+ identity.logout();
+ assertFalse(identity.isLoggedIn());
+ identity.setUsername("gavin");
+ identity.setPassword("tiger");
+ identity.login();
+ assertFalse(identity.isLoggedIn());
+ }
+
+ @Test
+ public void testLogin() throws Exception {
+ Identity identity = Identity.instance();
+
+ assertFalse(identity.isLoggedIn());
+
+ identity.setUsername("gavin");
+ identity.setPassword("foobar");
+ identity.login();
+
+ User user = (User) Component.getInstance("user");
+ assertEquals("Gavin King", user.getName());
+ assertEquals("gavin", user.getUsername());
+ assertEquals("foobar", user.getPassword());
+ assertFalse(Manager.instance().isLongRunningConversation());
+ assertTrue(identity.isLoggedIn());
+
+ identity.logout();
+ assertTrue(Session.instance().isInvalid());
+
+ assertFalse(identity.isLoggedIn());
+ }
+}
Added:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/arquillian.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/arquillian.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/components.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/components.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml
Added:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/persistence.xml
===================================================================
(Binary files differ)
Property changes on:
branches/enterprise/WFK-2_1/examples/jee6/jee6-web/src/test/resources/persistence.xml
___________________________________________________________________
Added: svn:mime-type
+ application/xml