You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2016/09/05 10:02:14 UTC

syncope git commit: [SYNCOPE-853] Using protractor and phantomjs

Repository: syncope
Updated Branches:
  refs/heads/master bbc7e1d63 -> a99618d94


[SYNCOPE-853] Using protractor and phantomjs


Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/a99618d9
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/a99618d9
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/a99618d9

Branch: refs/heads/master
Commit: a99618d944d27e22b6ee57fd41807613aee0563e
Parents: bbc7e1d
Author: giacomolm <gi...@hotmail.it>
Authored: Mon Aug 29 12:46:12 2016 +0200
Committer: Francesco Chicchiricc� <il...@apache.org>
Committed: Mon Sep 5 12:01:53 2016 +0200

----------------------------------------------------------------------
 .../META-INF/resources/app/views/editUser.html  |   2 +-
 .../META-INF/resources/app/views/self.html      |   2 +-
 .../META-INF/resources/app/views/success.html   |   2 +-
 .../client/enduser/protractor/tests/edituser.js |  61 ++++++++
 fit/enduser-reference/pom.xml                   | 156 ++++++++++++++++++-
 .../src/test/resources/enduser.properties       |  34 ++++
 .../enduser/protractor/protractor-conf.js       |  34 ++++
 .../client/enduser/protractor/tests/abstract.js |  75 +++++++++
 .../client/enduser/protractor/tests/create.js   |  30 ++++
 .../client/enduser/protractor/tests/login.js    |  23 +++
 pom.xml                                         |  31 +++-
 11 files changed, 444 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html b/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html
index 41c05fb..e020c660 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/editUser.html
@@ -32,7 +32,7 @@ under the License.
             <div growl reference="2" inline="true"></div>              
             <div id="status-buttons" class="btn-group btn-breadcrumb">
               <a href="#/self" class="btn btn-default" ng-show="createMode"><i class="glyphicon glyphicon-home"></i></a>
-              <a class="btn btn-default" ng-show="!createMode" ng-click="logout()"><i class="glyphicon glyphicon-off"style="color:red"></i></a>
+              <a id="logout" class="btn btn-default" ng-show="!createMode" ng-click="logout()"><i class="glyphicon glyphicon-off"style="color:red"></i></a>
               <!--add class breadcrumb-disabled-link to buttons to prevent click-->              
               <a ng-repeat="(key, value) in wizard" ui-sref-active="active" ui-sref=".{{key}}" class="btn btn-default" 
                  ng-class="createMode ? 'disable-link' : ''">{{key | translate}}</a>       

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/client/enduser/src/main/resources/META-INF/resources/app/views/self.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/self.html b/client/enduser/src/main/resources/META-INF/resources/app/views/self.html
index e48d10b..12835d2 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/self.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/self.html
@@ -55,7 +55,7 @@ under the License.
           </div>
         </div>
         <div class="text-center" ng-show="$root.isSelfRegAllowed()">
-          <a href="javascript:void(0);" class="btn btn-link" ng-click="selfCreate()">
+          <a href="javascript:void(0);" class="btn btn-link" ng-click="selfCreate()" id="register">
             {{ 'SELFREGISTRATION' | translate}}
           </a>
         </div>

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/client/enduser/src/main/resources/META-INF/resources/app/views/success.html
----------------------------------------------------------------------
diff --git a/client/enduser/src/main/resources/META-INF/resources/app/views/success.html b/client/enduser/src/main/resources/META-INF/resources/app/views/success.html
index bcb2331..994ad1b 100644
--- a/client/enduser/src/main/resources/META-INF/resources/app/views/success.html
+++ b/client/enduser/src/main/resources/META-INF/resources/app/views/success.html
@@ -25,7 +25,7 @@ under the License.
           <span>{{'USER'| translate}} <b> {{currentUser}}</b> {{currentOp| translate}}</span>
         </div>
         <span>
-          <a href="javascript:void(0);" class="btn btn-link" ng-click="redirect()">{{'GOBACKHOME'| translate}}</a>
+          <a id="redirect" href="javascript:void(0);" class="btn btn-link" ng-click="redirect()">{{'GOBACKHOME'| translate}}</a>
         </span> 
       </div>
     </div>

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/client/enduser/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/edituser.js
----------------------------------------------------------------------
diff --git a/client/enduser/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/edituser.js b/client/enduser/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/edituser.js
new file mode 100644
index 0000000..7096736
--- /dev/null
+++ b/client/enduser/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/edituser.js
@@ -0,0 +1,61 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+describe('syncope enduser user edit', function () {
+
+  function next() {
+    element.all(by.id('next')).last().click();
+  };
+
+
+  function fillDropDownMenu(modelId, option) {
+    this.item = element(by.model(modelId));
+    this.item.click();
+    element.all(by.id(option)).first().click();
+    browser.driver.sleep(1500);
+  }
+  ;
+
+
+  it('should edit user credentials', function () {
+    browser.get('http://localhost:9080/syncope-enduser/app/');
+
+    //login
+    element(by.model('credentials.username')).sendKeys('bellini');
+    element(by.model('credentials.password')).sendKeys('password');
+    element.all(by.options('language.name for language in languages.availableLanguages track by language.id')).then(function (language) {
+      expect(language.length).toBe(3);
+    });
+    element.all(by.options('language.name for language in languages.availableLanguages track by language.id')).get(0).click();
+    element(by.id('login-btn')).click();
+
+//    credential
+//    element(by.model('user.username')).sendKeys('bellini123');
+//    element(by.model('user.password')).sendKeys('password123');
+//    element(by.model('confirmPassword.value')).sendKeys('password123');
+    next();
+
+
+    fillDropDownMenu('dynamicForm.selectedGroups', 'additional');
+//    fillDropDownMenu('dynamicForm.selectedAuxClasses','csv');
+
+  });
+});
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/fit/enduser-reference/pom.xml
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/pom.xml b/fit/enduser-reference/pom.xml
index 8372385..dabc4c3 100644
--- a/fit/enduser-reference/pom.xml
+++ b/fit/enduser-reference/pom.xml
@@ -35,6 +35,7 @@ under the License.
   
   <properties>
     <rootpom.basedir>${basedir}/../..</rootpom.basedir>
+    <enduser-test.dir>${project.build.directory}/enduser-test</enduser-test.dir>
   </properties>
 
   <dependencies>
@@ -126,11 +127,147 @@ under the License.
       <type>war</type>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>com.github.detro</groupId>
+      <artifactId>phantomjsdriver</artifactId>       
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
     <plugins>
       <plugin>
+        <groupId>com.github.klieber</groupId>
+        <artifactId>phantomjs-maven-plugin</artifactId>        
+        <executions>
+          <execution>
+            <goals>
+              <goal>install</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <version>${phantomjs.version}</version>
+          <checkSystemPath>false</checkSystemPath>          
+        </configuration>
+      </plugin>
+           
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-antrun-plugin</artifactId>
+        <inherited>true</inherited>
+        <executions>
+          <execution>
+            <id>setup-enduser-it</id>
+            <phase>pre-integration-test</phase>
+            <configuration>
+              <target>               
+                <mkdir dir="${enduser-test.dir}" />
+                <copy todir="${enduser-test.dir}" overwrite="true">
+                  <fileset 
+                    dir="${basedir}/src/test/resources/org/apache/syncope/client/enduser/protractor/" 
+                    includes="**/*" />                  
+                </copy>
+                <replace file="${enduser-test.dir}/protractor-conf.js" 
+                         token="@phantomjs.binary.path@" value="${phantomjs.binary}"/>
+                <delete file="${basedir}/../core-reference/target/syncope-fit-core-reference-${project.version}/WEB-INF/classes/userWorkflow.bpmn20.xml"/>
+              </target>
+            </configuration>
+            <goals>
+              <goal>run</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>     
+                                                                        
+      <plugin>
+        <groupId>com.github.eirslett</groupId>
+        <artifactId>frontend-maven-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>install node and npm</id>
+            <phase>pre-integration-test</phase>            
+            <goals>
+              <goal>install-node-and-npm</goal>
+            </goals>
+            <configuration>
+              <workingDirectory>${enduser-test.dir}/nodejs</workingDirectory>
+              <nodeVersion>${nodejs.version}</nodeVersion>
+              <npmVersion>${npm.version}</npmVersion>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+           
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <executions>
+          <execution>            
+            <id>Install Protractor</id>
+            <phase>pre-integration-test</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <workingDirectory>${enduser-test.dir}/nodejs/node/node_modules</workingDirectory>
+              <executable>${enduser-test.dir}/nodejs/node/node</executable>
+              <arguments>
+                <argument>npm/bin/npm-cli.js</argument>
+                <argument>install</argument>
+                <argument>-g</argument>
+                <argument>protractor</argument>                
+              </arguments>
+            </configuration>
+          </execution>
+          <execution>            
+            <id>Install Agent</id>
+            <phase>pre-integration-test</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <workingDirectory>${enduser-test.dir}/nodejs/lib</workingDirectory>
+              <executable>${enduser-test.dir}/nodejs/node/node</executable>
+              <arguments>
+                <argument>node_modules/protractor/bin/webdriver-manager</argument>
+                <argument>update</argument>                             
+              </arguments>
+            </configuration>
+          </execution>
+          <execution>            
+            <id>Execute Tests</id>
+            <phase>integration-test</phase>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <configuration>
+              <skip>${skipTests}</skip>           
+              <executable>${enduser-test.dir}/nodejs/node/node</executable>
+              <arguments>
+                <argument>${enduser-test.dir}/nodejs/bin/protractor</argument>
+                <argument>${enduser-test.dir}/protractor-conf.js</argument>                             
+              </arguments>
+            </configuration>
+          </execution>                          
+        </executions>
+      </plugin>
+            
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-failsafe-plugin</artifactId>
+        <inherited>true</inherited>
+        <executions>
+          <execution>
+            <id>verify</id>
+            <goals>
+              <goal>verify</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      
+      <plugin>
         <groupId>org.codehaus.cargo</groupId>
         <artifactId>cargo-maven2-plugin</artifactId>
         <inherited>true</inherited>
@@ -199,6 +336,22 @@ under the License.
             </deployable>
           </deployables>
         </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>
       
       <plugin>
@@ -323,7 +476,8 @@ under the License.
       <id>jrebel</id>
       
       <properties>
-        <tomcat.version>8.0.36</tomcat.version>
+        <tomcat.version>8.0.36</tomcat.version>              
+        <skipTests>true</skipTests>
       </properties>      
 
       <build>

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/fit/enduser-reference/src/test/resources/enduser.properties
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/enduser.properties b/fit/enduser-reference/src/test/resources/enduser.properties
new file mode 100644
index 0000000..d0c1db8
--- /dev/null
+++ b/fit/enduser-reference/src/test/resources/enduser.properties
@@ -0,0 +1,34 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+enduser.directory=${conf.directory}
+
+version=${syncope.version}
+site=${project.parent.url}
+license=${licenseUrl}
+
+anonymousUser=${anonymousUser}
+anonymousKey=${anonymousKey}
+adminUser=${adminUser}
+useGZIPCompression=true
+
+scheme=http
+host=localhost
+port=9080
+rootPath=/syncope/rest/
+
+captcha=false
+xsrf=false

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/protractor-conf.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/protractor-conf.js b/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/protractor-conf.js
new file mode 100644
index 0000000..1a063c7
--- /dev/null
+++ b/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/protractor-conf.js
@@ -0,0 +1,34 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+exports.config = {
+        directConnect: false,
+
+        capabilities: {
+          'browserName': 'phantomjs',
+          'phantomjs.binary.path': '@phantomjs.binary.path@',
+          'phantomjs.ghostdriver.cli.args': ['--loglevel=DEBUG']
+        },
+        
+        allScriptsTimeout: 241000,
+
+        // Spec patterns are relative to the current working directly when protractor is called.
+        specs: ['tests/*.js'],
+        
+        exclude: ['tests/abstract.js'],
+};

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/abstract.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/abstract.js b/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/abstract.js
new file mode 100644
index 0000000..0a952af
--- /dev/null
+++ b/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/abstract.js
@@ -0,0 +1,75 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var home = 'http://localhost:9080/syncope-enduser/app/';
+
+exports.doCreate = function () {
+  describe('doCreate', function () {
+
+    it('create donizetti', function () {
+      browser.get(home);
+
+      browser.wait(element(by.id('register')).isPresent());
+      element(by.id('register')).click();
+
+      element(by.model('user.username')).sendKeys('donizetti');
+      element(by.model('user.password')).sendKeys('Password123');
+      element(by.model('confirmPassword.value')).sendKeys('Password123');
+
+      element.all(by.id('next')).first().click();
+
+      element.all(by.id('next')).first().click();
+
+      element.all(by.name('fullname')).first().sendKeys('Gaetano Donizetti');
+      element.all(by.name('userId')).first().sendKeys('donizetti@apache.org');
+      element.all(by.name('firstname')).first().sendKeys('Gaetano');
+      element.all(by.name('surname')).first().sendKeys('Donizetti');
+
+      element.all(by.id('next')).first().click();
+
+      element.all(by.id('next')).first().click();
+
+      element.all(by.id('next')).first().click();
+
+      element.all(by.id('next')).first().click();
+
+      element(by.id('save')).click();
+     
+    });
+  });
+}
+
+exports.doLogin = function (username, password) {
+  describe('doLogin', function () {
+
+    it('login user ', function () {
+      browser.get(home);
+
+      element(by.model('credentials.username')).sendKeys(username);
+      element(by.model('credentials.password')).sendKeys(password);
+      element(by.id('login-btn')).click();
+
+      expect(element(by.model('user.username')).getAttribute('value')).toEqual(username);
+
+      element(by.id('logout')).click();
+    });
+  });
+}
+
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/create.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/create.js b/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/create.js
new file mode 100644
index 0000000..a88f148
--- /dev/null
+++ b/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/create.js
@@ -0,0 +1,30 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var abstract = require('./abstract.js');
+
+abstract.doCreate();
+
+describe('waitSuccess', function () {
+  it('wait redirect link', function () {     
+    browser.wait(element(by.id('redirect')).isPresent());      
+  });
+});
+
+abstract.doLogin("donizetti", "Password123");

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/login.js
----------------------------------------------------------------------
diff --git a/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/login.js b/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/login.js
new file mode 100644
index 0000000..0b4fc3e
--- /dev/null
+++ b/fit/enduser-reference/src/test/resources/org/apache/syncope/client/enduser/protractor/tests/login.js
@@ -0,0 +1,23 @@
+/* 
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+var abstract = require('./abstract.js');
+
+abstract.doLogin("bellini", "password");
+

http://git-wip-us.apache.org/repos/asf/syncope/blob/a99618d9/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index a59691d..4978f52 100644
--- a/pom.xml
+++ b/pom.xml
@@ -454,6 +454,12 @@ under the License.
 
     <tomcat.version>8.5.4</tomcat.version>
 
+    <phantomjs.driver.version>1.2.0</phantomjs.driver.version>
+    <phantomjs.version>2.1.1</phantomjs.version>
+    
+    <nodejs.version>v5.3.0</nodejs.version>    
+    <npm.version>3.3.12</npm.version>    
+
     <adminUser>admin</adminUser>
     <anonymousUser>anonymous</anonymousUser>
     <!-- static keys, only used for build: generated overlays will override during archetype:generate -->
@@ -463,7 +469,6 @@ under the License.
     <targetJdk>1.7</targetJdk>
     <rootpom.basedir>${basedir}</rootpom.basedir>
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-
   </properties>
 
   <dependencyManagement>
@@ -1328,6 +1333,12 @@ under the License.
       
       <!-- TEST -->
       <dependency>
+        <groupId>com.github.detro</groupId>
+        <artifactId>phantomjsdriver</artifactId>
+        <version>${phantomjs.driver.version}</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
         <groupId>net.tirasa.connid.bundles.soap</groupId>
         <artifactId>wssample</artifactId>
         <version>${connid.soap.version}</version>
@@ -1602,7 +1613,23 @@ under the License.
           <groupId>org.eclipse.tycho</groupId>
           <artifactId>tycho-surefire-plugin</artifactId>
           <version>${tycho-version}</version>
-        </plugin>             
+        </plugin>
+        
+        <plugin>
+          <groupId>com.github.klieber</groupId>
+          <artifactId>phantomjs-maven-plugin</artifactId>
+          <version>0.7</version>
+        </plugin>      
+        <plugin>
+          <groupId>com.github.eirslett</groupId>
+          <artifactId>frontend-maven-plugin</artifactId>
+          <version>1.0</version>
+        </plugin>
+        <plugin>
+          <groupId>org.codehaus.mojo</groupId>
+          <artifactId>exec-maven-plugin</artifactId>
+          <version>1.5.0</version>
+        </plugin>
       </plugins>
     </pluginManagement>