From d1dd07c62095b987e6c623cdde607f57743e7075 Mon Sep 17 00:00:00 2001 From: Richard Kennard Date: Thu, 2 Feb 2012 11:21:51 +1100 Subject: [PATCH] Unit tests Change-Id: I371b6b834e44a3e0c92b88ac7a26a8f059b86204 --- .../widgetbuilder/EntityWidgetBuilder.java | 13 ++++++ .../resources/scaffold/faces/BackingBean.jv | 34 +++++++++------ .../resources/scaffold/faces/create.xhtml | 2 +- .../resources/scaffold/faces/forge-style.css | 2 +- .../resources/scaffold/faces/search.xhtml | 1 - .../scaffold/faces/FacesScaffoldTest.java | 15 +++---- .../EntityWidgetBuilderTest.java | 5 ++- .../shopping/FacesScaffoldShoppingClient.java | 43 ++++++++++++++++++- 8 files changed, 87 insertions(+), 28 deletions(-) diff --git a/scaffold-faces/src/main/java/org/jboss/forge/scaffold/faces/metawidget/widgetbuilder/EntityWidgetBuilder.java b/scaffold-faces/src/main/java/org/jboss/forge/scaffold/faces/metawidget/widgetbuilder/EntityWidgetBuilder.java index 3fdef0359c..a45da115d9 100644 --- a/scaffold-faces/src/main/java/org/jboss/forge/scaffold/faces/metawidget/widgetbuilder/EntityWidgetBuilder.java +++ b/scaffold-faces/src/main/java/org/jboss/forge/scaffold/faces/metawidget/widgetbuilder/EntityWidgetBuilder.java @@ -38,6 +38,7 @@ import org.metawidget.statically.faces.component.StaticUIMetawidget; import org.metawidget.statically.faces.component.ValueHolder; import org.metawidget.statically.faces.component.html.StaticHtmlMetawidget; +import org.metawidget.statically.faces.component.html.layout.HtmlMessage; import org.metawidget.statically.faces.component.html.layout.HtmlPanelGrid; import org.metawidget.statically.faces.component.html.layout.HtmlPanelGroup; import org.metawidget.statically.faces.component.html.widgetbuilder.FaceletsParam; @@ -545,6 +546,18 @@ protected void addColumnComponent(HtmlDataTable dataTable, Map t Facet footerFacet = new Facet(); footerFacet.putAttribute("name", "footer"); footerFacet.getChildren().add(footerMetawidget); + + ReadableIdProcessor readableIdProcessor = metawidget.getWidgetProcessor(ReadableIdProcessor.class); + + if (readableIdProcessor != null) + { + readableIdProcessor.processWidget(footerMetawidget, elementName, columnAttributes, metawidget); + } + + HtmlMessage message = new HtmlMessage(); + message.putAttribute("for", footerMetawidget.getAttribute("id")); + message.putAttribute("styleClass", "error"); + footerFacet.getChildren().add(message); column.getChildren().add(footerFacet); } } diff --git a/scaffold-faces/src/main/resources/scaffold/faces/BackingBean.jv b/scaffold-faces/src/main/resources/scaffold/faces/BackingBean.jv index 5c1ba6a177..30c24043da 100644 --- a/scaffold-faces/src/main/resources/scaffold/faces/BackingBean.jv +++ b/scaffold-faces/src/main/resources/scaffold/faces/BackingBean.jv @@ -7,6 +7,7 @@ import java.util.List; import javax.ejb.Stateful; import javax.enterprise.context.Conversation; import javax.enterprise.context.ConversationScoped; +import javax.faces.application.FacesMessage; import javax.faces.component.UIComponent; import javax.faces.context.FacesContext; import javax.faces.convert.Converter; @@ -96,25 +97,32 @@ public class @{entity.getName()}Bean implements Serializable { public String update() { this.conversation.end(); - if (this.id == null) { - this.entityManager.persist(this.@{ccEntity}); - return "search?faces-redirect=true"; - } else { - this.entityManager.merge(this.@{ccEntity}); - return "view?faces-redirect=true&id=" + this.@{ccEntity}.getId(); + try { + if (this.id == null) { + this.entityManager.persist(this.@{ccEntity}); + return "search?faces-redirect=true"; + } else { + this.entityManager.merge(this.@{ccEntity}); + return "view?faces-redirect=true&id=" + this.@{ccEntity}.getId(); + } + } catch( Exception e ) { + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage( e.getMessage() )); + return null; } } public String delete() { this.conversation.end(); - this.entityManager.remove(this.entityManager.find(@{entity.getName()}.class, - getId())); - return "search?faces-redirect=true"; - } - public String cancel() { - this.conversation.end(); - return "search?faces-redirect=true"; + try { + this.entityManager.remove(this.entityManager.find(@{entity.getName()}.class, + getId())); + this.entityManager.flush(); + return "search?faces-redirect=true"; + } catch( Exception e ) { + FacesContext.getCurrentInstance().addMessage(null, new FacesMessage( e.getMessage() )); + return null; + } } /* diff --git a/scaffold-faces/src/main/resources/scaffold/faces/create.xhtml b/scaffold-faces/src/main/resources/scaffold/faces/create.xhtml index 5dc405b0ea..3f098d6531 100644 --- a/scaffold-faces/src/main/resources/scaffold/faces/create.xhtml +++ b/scaffold-faces/src/main/resources/scaffold/faces/create.xhtml @@ -33,7 +33,7 @@ - + @{metawidget} diff --git a/scaffold-faces/src/main/resources/scaffold/faces/forge-style.css b/scaffold-faces/src/main/resources/scaffold/faces/forge-style.css index 4c9df22004..3f0b153bc6 100644 --- a/scaffold-faces/src/main/resources/scaffold/faces/forge-style.css +++ b/scaffold-faces/src/main/resources/scaffold/faces/forge-style.css @@ -162,7 +162,7 @@ h1 { margin: auto; } -#content table .component .error { +#content .error { color: red; font-size: 10pt; } diff --git a/scaffold-faces/src/main/resources/scaffold/faces/search.xhtml b/scaffold-faces/src/main/resources/scaffold/faces/search.xhtml index b2ecd7ab29..10156776d4 100644 --- a/scaffold-faces/src/main/resources/scaffold/faces/search.xhtml +++ b/scaffold-faces/src/main/resources/scaffold/faces/search.xhtml @@ -26,7 +26,6 @@ - @{searchMetawidget} diff --git a/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/FacesScaffoldTest.java b/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/FacesScaffoldTest.java index c52b0446d1..2698f40f2f 100644 --- a/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/FacesScaffoldTest.java +++ b/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/FacesScaffoldTest.java @@ -153,7 +153,7 @@ public void testGenerateFromEntity() throws Exception "template=\"/resources/scaffold/page.xhtml")); metawidget = new StringBuilder("\n"); - metawidget.append("\t\t\t\n\n"); + metawidget.append("\t\t\t\n\n"); metawidget.append("\t\t\t\r\n"); metawidget.append("\t\t\t\t\r\n"); metawidget.append("\t\t\t\t\r\n"); @@ -182,8 +182,7 @@ public void testGenerateFromEntity() throws Exception "template=\"/resources/scaffold/page.xhtml")); StringBuilder searchMetawidget = new StringBuilder("\r\n"); - searchMetawidget.append("\t\t\t\r\n"); - searchMetawidget.append("\t\t\t\t\r\n\r\n"); + searchMetawidget.append("\t\t\t\r\n\r\n"); searchMetawidget.append("\t\t\t\t\r\n"); searchMetawidget .append("\t\t\t\t\t\r\n"); @@ -279,7 +278,7 @@ public void testGenerateFromEntity() throws Exception FileResource css = web.getWebResource("resources/forge-style.css"); Assert.assertTrue(css.exists()); contents = Streams.toString(css.getResourceInputStream()); - Assert.assertTrue(contents.contains("#content table .component .error {")); + Assert.assertTrue(contents.contains("#content .error {")); Assert.assertTrue(web.getWebResource("resources/jboss-community.png").exists()); Assert.assertTrue(web.getWebResource("resources/remove.png").exists()); @@ -466,7 +465,7 @@ public void testGenerateFromNestedEntity() throws Exception Assert.assertTrue(contents.contains( "template=\"/resources/scaffold/page.xhtml")); StringBuilder metawidget = new StringBuilder("\t\t\n"); - metawidget.append("\t\t\t\n\n"); + metawidget.append("\t\t\t\n\n"); metawidget.append("\t\t\t\r\n"); metawidget.append("\t\t\t\t\r\n"); metawidget.append("\t\t\t\t\r\n"); @@ -789,8 +788,7 @@ public void testGenerateOneToManyEntity() throws Exception "template=\"/resources/scaffold/page.xhtml")); StringBuilder searchMetawidget = new StringBuilder("\r\n"); - searchMetawidget.append("\t\t\t\r\n"); - searchMetawidget.append("\t\t\t\t\r\n\r\n"); + searchMetawidget.append("\t\t\t\r\n\r\n"); searchMetawidget.append("\t\t\t\t\r\n"); searchMetawidget .append("\t\t\t\t\t\r\n"); @@ -951,8 +949,7 @@ public void testGenerateEntityWithManyFields() throws Exception "template=\"/resources/scaffold/page.xhtml")); StringBuilder searchMetawidget = new StringBuilder("\r\n"); - searchMetawidget.append("\t\t\t\r\n"); - searchMetawidget.append("\t\t\t\t\r\n\r\n"); + searchMetawidget.append("\t\t\t\r\n\r\n"); searchMetawidget.append("\t\t\t\t\r\n"); searchMetawidget.append("\t\t\t\t\t\r\n"); searchMetawidget.append("\t\t\t\t\t\r\n"); diff --git a/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/metawidget/widgetbuilder/EntityWidgetBuilderTest.java b/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/metawidget/widgetbuilder/EntityWidgetBuilderTest.java index a91b7a08e4..d87879b0b5 100644 --- a/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/metawidget/widgetbuilder/EntityWidgetBuilderTest.java +++ b/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/metawidget/widgetbuilder/EntityWidgetBuilderTest.java @@ -271,7 +271,10 @@ public void testEmbeddedSet() result += ""; result += ""; result += ""; - result += ""; + result += ""; + result += ""; + result += ""; + result += ""; result += ""; result += ""; result += ""; diff --git a/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/scenario/shopping/FacesScaffoldShoppingClient.java b/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/scenario/shopping/FacesScaffoldShoppingClient.java index b8ea7f9e66..64e3d923b7 100644 --- a/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/scenario/shopping/FacesScaffoldShoppingClient.java +++ b/scaffold-faces/src/test/java/org/jboss/forge/scaffold/faces/scenario/shopping/FacesScaffoldShoppingClient.java @@ -80,6 +80,14 @@ public void testAll() throws Exception assertEquals("Address City #2", form.getInputByName("create:addressBeanAddressCity").getValueAttribute()); page = page.getAnchorByText("Save").click(); + // Create yet another Address + + page = page.getAnchorByText("Create New").click(); + form = page.getFormByName("create"); + form.getInputByName("create:addressBeanAddressStreet").setValueAttribute("Address Street #3"); + form.getInputByName("create:addressBeanAddressCity").setValueAttribute("Address City #3"); + page = page.getAnchorByText("Save").click(); + // Create a Customer page = page.getAnchorByText("Customer").click(); @@ -96,6 +104,8 @@ public void testAll() throws Exception form.getSelectByName("create:customerBeanCustomerAddressesSelect") .setSelectedAttribute("1", true); page = page.getHtmlElementById("create:customerBeanCustomerAddressesAdd").click(); + HtmlTable table = (HtmlTable) page.getHtmlElementById("create:customerBeanCustomerAddresses"); + assertEquals("Address Street #1", table.getCellAt(1, 0).getTextContent()); // Test OneToMany (mappedBy) @@ -103,12 +113,26 @@ public void testAll() throws Exception form.getSelectByName("create:customerBeanCustomerOrders:submittedOrderBeanAddAddress") .setSelectedAttribute("2", true); page = page.getHtmlElementById("create:customerBeanCustomerOrders:customerBeanCustomerOrdersAdd").click(); + table = (HtmlTable) page.getHtmlElementById("create:customerBeanCustomerOrders"); + assertEquals("Address Street #2 Address City #2 0", table.getCellAt(2, 0).getTextContent()); + + // Test adding multiple OneToMany (mappedBy) before clicking Save + + form = page.getFormByName("create"); + form.getSelectByName("create:customerBeanCustomerOrders:submittedOrderBeanAddAddress") + .setSelectedAttribute("3", true); + page = page.getHtmlElementById("create:customerBeanCustomerOrders:customerBeanCustomerOrdersAdd").click(); + table = (HtmlTable) page.getHtmlElementById("create:customerBeanCustomerOrders"); + assertTrue( "Address Street #2 Address City #2 0".equals(table.getCellAt(2, 0).getTextContent()) || "Address Street #3 Address City #3 0".equals(table.getCellAt(2, 0).getTextContent() )); + assertTrue( "Address Street #2 Address City #2 0".equals(table.getCellAt(3, 0).getTextContent()) || "Address Street #3 Address City #3 0".equals(table.getCellAt(3, 0).getTextContent() )); + assertTrue(!table.getCellAt(2, 0).getTextContent().equals(table.getCellAt(3, 0).getTextContent())); + page = page.getAnchorByText("Save").click(); // Test it all saved assertTrue(page.asText().contains("Search Customer entities")); - HtmlTable table = (HtmlTable) page.getHtmlElementById("search:customerBeanPageItems"); + table = (HtmlTable) page.getHtmlElementById("search:customerBeanPageItems"); assertEquals("Customer Firstname #1", table.getCellAt(1, 0).getTextContent()); page = page.getAnchorByText("Customer Firstname #1").click(); @@ -118,10 +142,23 @@ public void testAll() throws Exception table = (HtmlTable) page.getHtmlElementById("customerBeanCustomerAddresses"); assertEquals("Address Street #1", table.getCellAt(1, 0).getTextContent()); table = (HtmlTable) page.getHtmlElementById("customerBeanCustomerOrders"); - assertEquals("Address Street #2 Address City #2 0", table.getCellAt(1, 0).getTextContent()); + assertTrue( "Address Street #2 Address City #2 0".equals(table.getCellAt(1, 0).getTextContent()) || "Address Street #3 Address City #3 0".equals(table.getCellAt(1, 0).getTextContent() )); + assertTrue( "Address Street #2 Address City #2 0".equals(table.getCellAt(2, 0).getTextContent()) || "Address Street #3 Address City #3 0".equals(table.getCellAt(2, 0).getTextContent() )); + assertTrue(!table.getCellAt(1, 0).getTextContent().equals(table.getCellAt(2, 0).getTextContent())); + + // Test foreign key constraints + + page = page.getAnchorByText("Address").click(); + page = page.getAnchorByText("Address Street #1").click(); + page = page.getAnchorByText("Edit").click(); + assertTrue(!page.asXml().contains("
    ")); + page = page.getAnchorByText("Delete").click(); + assertTrue(page.asXml().contains("
      ")); // Test deleting the relationships + page = page.getAnchorByText("Customer").click(); + page = page.getAnchorByText("Customer Firstname #1").click(); page = page.getAnchorByText("Edit").click(); assertTrue(page.asText().contains("Edit existing Customer")); table = (HtmlTable) page.getHtmlElementById("create:customerBeanCustomerAddresses"); @@ -131,6 +168,8 @@ public void testAll() throws Exception table = (HtmlTable) page.getHtmlElementById("create:customerBeanCustomerOrders"); page = table.getCellAt(2, 1).getHtmlElementsByTagName("a").get(0).click(); table = (HtmlTable) page.getHtmlElementById("create:customerBeanCustomerOrders"); + page = table.getCellAt(2, 1).getHtmlElementsByTagName("a").get(0).click(); + table = (HtmlTable) page.getHtmlElementById("create:customerBeanCustomerOrders"); assertEquals("", table.getCellAt(2, 0).getTextContent()); page = page.getAnchorByText("Save").click();