Revision: 1317
          http://stripes.svn.sourceforge.net/stripes/?rev=1317&view=rev
Author:   bengunter
Date:     2010-11-10 18:06:51 +0000 (Wed, 10 Nov 2010)

Log Message:
-----------
Rolled up Remi's webtests patches from 1.5.x branch and applied to trunk.

Modified Paths:
--------------
    trunk/examples/pom.xml
    trunk/pom.xml

Added Paths:
-----------
    trunk/webtests/
    trunk/webtests/pom.xml
    trunk/webtests/src/
    trunk/webtests/src/test/
    trunk/webtests/src/test/groovy/
    trunk/webtests/src/test/groovy/net/
    trunk/webtests/src/test/groovy/net/sourceforge/
    trunk/webtests/src/test/groovy/net/sourceforge/stripes/
    trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/
    trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/bugzooky/
    
trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/bugzooky/BugzookyTest.groovy
    trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/calc/
    
trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/calc/CalcTest.groovy

Property Changed:
----------------
    trunk/examples/


Property changes on: trunk/examples
___________________________________________________________________
Modified: svn:ignore
   - dist
docs

   + dist
docs
target


Modified: trunk/examples/pom.xml
===================================================================
--- trunk/examples/pom.xml      2010-11-10 16:55:54 UTC (rev 1316)
+++ trunk/examples/pom.xml      2010-11-10 18:06:51 UTC (rev 1317)
@@ -48,10 +48,33 @@
             <artifactId>standard</artifactId>
             <version>1.1.2</version>
         </dependency>
+        <dependency>
+            <groupId>commons-fileupload</groupId>
+            <artifactId>commons-fileupload</artifactId>
+            <version>1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-io</groupId>
+            <artifactId>commons-io</artifactId>
+            <version>1.2</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.mail</groupId>
+            <artifactId>mail</artifactId>
+            <version>1.4</version>
+        </dependency>
     </dependencies>
     <build>
         <finalName>stripes-examples</finalName>
         <sourceDirectory>src</sourceDirectory>
+        <resources>
+            <resource>
+                <directory>src</directory>
+                <excludes>
+                    <exclude>**/*.java</exclude>
+                </excludes>
+            </resource>
+        </resources>
         <plugins>
             <!-- use antrun to copy the sources into the webapp -->
             <plugin>
@@ -90,22 +113,6 @@
                 </configuration>
             </plugin>
             <plugin>
-                <groupId>org.codehaus.cargo</groupId>
-                <artifactId>cargo-maven2-plugin</artifactId>
-                <configuration>
-                    <wait>true</wait>
-                    <!-- Container configuration -->
-                    <container>
-                        <containerId>tomcat6x</containerId>
-                        <home>${tomcat6.home}</home>
-                    </container>
-                    <!-- Configuration to use with the container -->
-                    <configuration>
-                        <home>${project.build.directory}/tomcat6x</home>
-                    </configuration>
-                </configuration>
-            </plugin>
-            <plugin>
                 <artifactId>maven-deploy-plugin</artifactId>
                 <configuration>
                     <skip>true</skip>

Modified: trunk/pom.xml
===================================================================
--- trunk/pom.xml       2010-11-10 16:55:54 UTC (rev 1316)
+++ trunk/pom.xml       2010-11-10 18:06:51 UTC (rev 1317)
@@ -35,6 +35,7 @@
     <modules>
         <module>stripes</module>
         <module>tests</module>
+        <module>examples</module>
     </modules>
     <dependencies>
         <!--
@@ -163,9 +164,10 @@
     </build>
     <profiles>
         <profile>
-            <id>examples</id>
+            <id>webtests</id>
             <modules>
                 <module>examples</module>
+                <module>webtests</module>                
             </modules>
         </profile>
         <profile>


Property changes on: trunk/webtests
___________________________________________________________________
Added: svn:ignore
   + target


Added: trunk/webtests/pom.xml
===================================================================
--- trunk/webtests/pom.xml                              (rev 0)
+++ trunk/webtests/pom.xml      2010-11-10 18:06:51 UTC (rev 1317)
@@ -0,0 +1,122 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>net.sourceforge.stripes</groupId>
+    <version>1.5.4-SNAPSHOT</version>
+    <artifactId>webtests</artifactId>
+    <packaging>war</packaging>
+    <name>webtests</name>
+    <dependencies>
+        <dependency>
+            <groupId>net.sourceforge.stripes</groupId>
+            <artifactId>examples</artifactId>
+            <version>${project.version}</version>
+            <type>war</type>
+        </dependency>
+        <dependency>
+            <groupId>com.canoo.webtest</groupId>
+            <artifactId>webtest</artifactId>
+            <version>3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.codehaus.groovy</groupId>
+            <artifactId>groovy-all</artifactId>
+            <version>1.6-RC-3</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.5</version>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+    <build>
+        <finalName>webtests</finalName>
+        <plugins>
+            <!-- don't deploy test artifacts in the mvn repo -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-deploy-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+            </plugin>
+            <!-- Use Groovy plugin for compilation of .groovy files -->
+            <plugin>
+                <groupId>org.codehaus.groovy.maven</groupId>
+                <artifactId>gmaven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>generateStubs</goal>
+                            <goal>compile</goal>
+                            <goal>generateTestStubs</goal>
+                            <goal>testCompile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+            <!-- skip unit test run, tests to be executed during 
integration-test -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-surefire-plugin</artifactId>
+                <configuration>
+                    <skip>true</skip>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>surefire-it</id>
+                        <phase>integration-test</phase>
+                        <goals>
+                            <goal>test</goal>
+                        </goals>
+                        <configuration>
+                            <skip>false</skip>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+            <!--
+                Use Cargo plugin to start/stop tomcat and deploy examples
+                for integration tests
+            -->
+            <plugin>
+                <groupId>org.codehaus.cargo</groupId>
+                <artifactId>cargo-maven2-plugin</artifactId>
+                <configuration>
+                    <wait>false</wait>
+                  <container>
+                    <containerId>tomcat6x</containerId>
+                    <zipUrlInstaller>
+                      
<url>http://mirror.ibcp.fr/pub/apache//tomcat/tomcat-6/v6.0.29/bin/apache-tomcat-6.0.29.zip</url>
+                      
<installDir>${basedir}/target/tomcat6-install</installDir>
+                    </zipUrlInstaller>
+                  </container>
+                  <configuration>
+                    <home>${project.build.directory}/tomcat6x/container</home>
+                    <properties>
+                        <cargo.servlet.port>9999</cargo.servlet.port>
+                    </properties>
+                  </configuration>
+                </configuration>
+                <executions>
+                    <execution>
+                        <id>start-container</id>
+                        <phase>pre-integration-test</phase>
+                        <goals>
+                            <goal>start</goal>
+                        </goals>
+                    </execution>
+                    <execution>
+                        <id>stop-container</id>
+                        <phase>post-integration-test</phase>
+                        <goals>
+                            <goal>stop</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+</project>

Added: 
trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/bugzooky/BugzookyTest.groovy
===================================================================
--- 
trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/bugzooky/BugzookyTest.groovy
                                (rev 0)
+++ 
trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/bugzooky/BugzookyTest.groovy
        2010-11-10 18:06:51 UTC (rev 1317)
@@ -0,0 +1,213 @@
+package net.sourceforge.stripes.webtests.bugzooky
+
+import com.canoo.webtest.WebtestCase
+
+class BugzookyTest extends WebtestCase {
+
+  def homeUrl = 'http://localhost:9999/webtests/bugzooky'
+
+  static int count = 10 //System.currentTimeMillis()
+
+  void testAuthenticationIsRequired() {
+    webtest('testAuthenticationIsRequired') {
+      [
+        'BugList.jsp',
+        'AddEditBug.jsp',
+        'BulkAddEditBugs.jsp',
+        'AdministerBugzooky.jsp'
+      ].each { p ->
+        invoke "$homeUrl/$p"
+        verifyTitle 'Bugzooky - Login'
+        verifyText 'Login'
+      }
+    }
+  }
+
+  private String register() {
+    count++
+    def username = "foobar$count"
+    ant.invoke "$homeUrl/Register.jsp"
+
+    ant.setInputField name:'user.firstName', value:username
+    ant.clickButton name:'gotoStep2'
+
+    ant.verifyText 'Last Name is a required field'
+    ant.verifyText 'Username is a required field'
+    ant.setInputField name:'user.lastName', value:username
+    ant.setInputField name:'user.username', value:'a'
+    ant.clickButton name:'gotoStep2'
+
+    ant.verifyText 'Username must be at least 5 characters long'
+    ant.setInputField name:'user.username', value:username
+    ant.clickButton name:'gotoStep2'
+
+    ant.verifyText "Welcome $username, please pick a password"
+    ant.setInputField name:'user.password', value:username
+    ant.setInputField name:'confirmPassword', value:'bazbazbaz'
+    ant.clickButton name:'register'
+
+    ant.verifyText 'The Passwords entered did not match'
+    ant.setInputField name:'user.password', value:username
+    ant.setInputField name:'confirmPassword', value:username
+    ant.clickButton name:'register'
+
+    ant.verifyText "Thank you for registering ${username}, your account has 
been created with username '${username}'"      
+    return username
+  }
+  
+  void testBugListSingleEdit() {
+    webtest('testBugListSingleEdit') {
+      register()
+
+      // list bugs
+      invoke "$homeUrl/BugList.jsp"
+
+      verifyTitle 'Bugzooky - Bug List'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[2]/td[4]',
+              text:'First ever bug in the system.'
+      clickLink xpath:'/html/body/div/div[2]/form/table/tbody/tr[2]/td[9]/a'
+
+      // bug edition
+      setSelectField name:'bug.component.id', value:'2'
+      clickButton name:'saveAndAgain'
+
+      // fill in new bug
+      setSelectField name:'bug.component.id', value:'3'
+      setSelectField name:'bug.owner.id', value:'4'
+      setSelectField name:'bug.priority', value:'Blocker'
+      setInputField name:'bug.longDescription',
+              value:'This is a long decription for this new bug blah blah 
blah...'
+      clickButton name:'save'
+
+      verifyXPath xpath:'/html/body/div/div[2]/ol/li',
+              text:'Short Description is a required field'
+      setInputField name:'bug.shortDescription', value:'brand new bug'
+      clickButton name:'save'
+
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[7]/td[4]',
+              text:'brand new bug'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[7]/td[5]',
+              text:'Component 3'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[7]/td[6]',
+              text:'Blocker'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[7]/td[8]',
+              text:'velma'
+    }
+  }
+
+  void testBulkAdd() {
+    webtest('testBulkAdd') {
+      register()
+
+      clickLink xpath:'/html/body/div/div/div/a[3]'
+
+      verifyXPath xpath:'/html/body/div/div[2]/div',
+              text:'Bulk Add/Edit Bugs'
+      setSelectField name:'bugs[0].component.id', value:'1'
+      setSelectField name:'bugs[1].component.id', value:'2'
+      setSelectField name:'bugs[0].owner.id', value:'1'
+      setSelectField name:'bugs[1].owner.id', value:'2'
+      setSelectField name:'bugs[0].priority', value:'Critical'
+      setSelectField name:'bugs[1].priority', value:'Blocker'
+      setInputField name:'bugs[0].shortDescription', value:'Short desc 1'
+      setInputField name:'bugs[0].longDescription',
+              value:'This is looooooooooooooooooooooooooooooooooooooooong !'
+      setInputField name:'bugs[1].longDescription',
+              value:'This is looooooooooooooooooooooooooooooooooooooooong too 
!'
+      clickButton name:'save'
+
+      verifyText 'Short Description is a required field'
+      setInputField name:'bugs[1].shortDescription',
+              value:'Short desc 2'
+      clickButton name:'save'
+
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[8]/td[4]',
+              text:'Short desc 1'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[8]/td[5]',
+              text:'Component 1'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[8]/td[6]',
+              text:'Critical'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[8]/td[8]',
+              text:'shaggy'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[9]/td[4]',
+              text:'Short desc 2'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[9]/td[5]',
+              text:'Component 2'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[9]/td[6]',
+              text:'Blocker'
+      verifyXPath xpath:'/html/body/div/div[2]/form/table/tbody/tr[9]/td[8]',
+              text:'scrappy'
+    }
+  }
+
+  void testBugListBulkEdit() {
+    webtest('testBugListBulkEdit') {
+      register()
+
+      // list bugs
+      invoke "$homeUrl/BugList.jsp"
+
+      // check the two first bugs and bulk edit
+      setCheckbox xpath:'/html/body/div/div[2]/form/table/tbody/tr[2]/td/input'
+      setCheckbox xpath:'/html/body/div/div[2]/form/table/tbody/tr[3]/td/input'
+      clickButton xpath:'/html/body/div/div[2]/form/div/input'
+
+      verifyXPath 
xpath:'/html/body/div/div[2]/form/table/tbody/tr[2]/td[5]/textarea',
+              text:'First ever bug in the system.',
+              regex:true
+      verifyXPath xpath: 
'/html/body/div/div[2]/form/table/tbody/tr[3]/td[5]/textarea',
+              text:'Another bug!  Oh no!.',
+              regex:true
+      // don't test more : it's already done in testBulkAdd
+    }
+  }
+
+  void testAdminister() {
+    webtest('testAdminister') {
+      register()
+
+      invoke "$homeUrl/AdministerBugzooky.jsp"
+
+      // change email for first user
+      setInputField 
xpath:'/html/body/div/div[2]/form/table/tbody/tr[2]/td[6]/input',
+              value:'f...@bar.com'
+      clickButton xpath:'/html/body/div/div[2]/form/div/input'
+
+      // check email change, remove first user
+      verifyXPath 
xpath:"/html/body/div/div[2]/form/table/tbody/tr[2]/td[6]/inp...@value='f...@bar.com']"
+      setCheckbox xpath:'/html/body/div/div[2]/form/table/tbody/tr[2]/td/input'
+      clickButton xpath:'/html/body/div/div[2]/form/div/input'
+
+      // check email is not f...@bar.com for the first user
+      not {
+        verifyXPath 
xpath:"/html/body/div/div[2]/form/table/tbody/tr[2]/td[6]/inp...@value='f...@bar.com']"
+      }
+
+      // change the value of component 3
+      setInputField 
xpath:'/html/body/div/div[2]/form[2]/table/tbody/tr[5]/td[3]/input',
+              value:'Component X'
+      clickButton xpath:'/html/body/div/div[2]/form[2]/div/input'
+
+      // verify component name change, and create new component
+      verifyXPath 
xpath:"/html/body/div/div[2]/form[2]/table/tbody/tr[5]/td[3]/inp...@value='Component
 X']"
+      setInputField 
xpath:'/html/body/div/div[2]/form[2]/table/tbody/tr[7]/td[3]/input',
+              value:'My Component'
+      clickButton xpath:'/html/body/div/div[2]/form[2]/div/input'
+
+      // assert component creation, and remove component
+      verifyXPath 
xpath:"/html/body/div/div[2]/form[2]/table/tbody/tr[7]/td[3]/inp...@value='My 
Component']"
+      setCheckbox 
xpath:'/html/body/div/div[2]/form[2]/table/tbody/tr[7]/td/input'
+      clickButton xpath:'/html/body/div/div[2]/form[2]/div/input'
+
+      // assert component removal
+      not {
+        verifyXPath 
xpath:"/html/body/div/div[2]/form[2]/table/tbody/tr[7]/td[3]/inp...@value='My 
Component']"
+      }
+    }
+  }
+
+  
+
+  
+
+}

Added: 
trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/calc/CalcTest.groovy
===================================================================
--- 
trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/calc/CalcTest.groovy
                                (rev 0)
+++ 
trunk/webtests/src/test/groovy/net/sourceforge/stripes/webtests/calc/CalcTest.groovy
        2010-11-10 18:06:51 UTC (rev 1317)
@@ -0,0 +1,66 @@
+package net.sourceforge.stripes.webtests.calc
+
+import com.canoo.webtest.WebtestCase
+
+class CalcTest extends WebtestCase {
+
+  def homeUrl = 'http://localhost:9999/webtests/quickstart/index.jsp'
+
+  void testCalcHome() {
+    webtest('testCalcHome') {
+      invoke homeUrl
+      verifyTitle 'My First Stripe'
+      verifyText 'Stripes Calculator'
+    }
+  }
+
+  void testAdd() {
+    webtest('testAdd') {
+      invoke homeUrl
+      setInputField(name:'numberOne', value: '2')
+      setInputField(name:'numberTwo', value: '2')
+      clickButton(name:'addition')
+      verifyText 'Result:'
+      verifyText '4.0'      
+    }
+  }
+
+  void testDivide() {
+    webtest('testDivide') {
+      invoke homeUrl
+      setInputField(name:'numberOne', value: '2')
+      setInputField(name:'numberTwo', value: '2')
+      clickButton(name:'division')
+      verifyText 'Result:'
+      verifyText '1.0'      
+    }
+  }
+
+  void testValidationErrors() {
+    webtest('testValidationErrors') {
+      invoke homeUrl
+      clickButton(name:'division')
+      verifyText 'Number One is a required field'
+      verifyText 'Number Two is a required field'
+
+      invoke homeUrl
+      setInputField(name:'numberOne', value: 'abc')
+      clickButton(name:'division')
+      verifyText 'The value (abc) entered in field Number One must be a valid 
number'
+      verifyText 'Number Two is a required field'
+
+      invoke homeUrl
+      setInputField(name:'numberOne', value: '2')
+      clickButton(name:'division')
+      verifyText 'Number Two is a required field'
+
+      invoke homeUrl
+      setInputField(name:'numberOne', value: '2')
+      setInputField(name:'numberTwo', value: '0')
+      clickButton(name:'division')
+      verifyText 'Dividing by zero is not allowed.'
+    }
+  }
+
+
+}


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a 
Billion" shares his insights and actions to help propel your 
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Stripes-development mailing list
Stripes-development@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to