<?xml version="1.0" encoding="UTF-8"?>
<!--
    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.
-->
<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">
	<parent>
		<relativePath>../pom.xml</relativePath>
		<groupId>org.apache.portals.pluto</groupId>
		<artifactId>pluto</artifactId>
		<version>3.1.2</version>
	</parent>
	<modelVersion>4.0.0</modelVersion>
	<groupId>javax.portlet</groupId>
	<artifactId>demo-integration-tests</artifactId>
	<description>Integration Tests for the Pluto Demos</description>
	<packaging>jar</packaging>
	<licenses>
		<license>
			<name>apache_v2</name>
			<url>http://www.apache.org/licenses/LICENSE-2.0.html</url>
		</license>
	</licenses>
	<scm>
		<connection>scm:git:https://git-wip-us.apache.org/repos/asf/portals-pluto.git</connection>
		<developerConnection>scm:git:https://git-wip-us.apache.org/repos/asf/portals-pluto.git</developerConnection>
		<url>https://github.com/apache/portals-pluto</url>
		<tag>pluto-3.1.2</tag>
	</scm>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<test.portal.name>Pluto</test.portal.name>
		<!-- test.context.base context string used when addressing test pages. Used by module stylesheet -->
		<test.context.base>pluto/portal/</test.context.base>
		<test.dependency.portlet.default.jquery.version>1.12.3</test.dependency.portlet.default.jquery.version>
		<!-- This variable is used by the test driver to determine how test
      page links are to be found. Values: generateURLs the driver generates URLs
      based on config information. followLinks the driver looks for links containing
      the page name and clicks them in order to access the test pages. In this
      case, the portal must produce navigation links to each of the test pages.
      If configured to generate URLs, the driver generates URLs of the form: http://<test.server.host>:<test.server.port>/<test.context.base><test.page.name>
      where <test.page.name> is the name of the test page generated by the individual
      modules -->
		<test.url.strategy>followLinks</test.url.strategy>
		<!-- Configuration of portlet container under test for generated URLs -->
		<!-- (only needed if test.url.strategy=generateURLs) -->
		<test.server.host>localhost</test.server.host>
		<test.server.port>8080</test.server.port>
		<!-- Configuration of URL to login page -->
		<test.server.login.url>http://${test.server.host}:${test.server.port}/pluto/portal/About Apache Pluto</test.server.login.url>
		<!-- HTML field IDs and values for username & password to enable automatic  login -->
		<!-- User specified must be in 'tckuser' role. Please configure 'tckuser' role for the specified user in tomcat-users.xml -->
		<test.server.username.id>j_username</test.server.username.id>
		<test.server.username>pluto</test.server.username>
		<test.server.password.id>j_password</test.server.password.id>
		<test.server.password>pluto</test.server.password>
		<!-- Specifies the browser to be used by selenium WebDriver for running the tests. -->
		<!-- Can be used with firefox or HTMLUnit without setting the test.browser.webDriver property. -->
		<!-- Use of Chrome or IE requires the webDriver to be downloaded and available. Set the -->
		<!-- test.browser.webDriver property to point to the appropriate WebDriver server. -->
		<test.browser>firefox</test.browser>
		<test.browser>HTMLUnit</test.browser>
		<!-- Lines commented out below illustrate how the chromedriver web driver can be configured -->
		<test.browser>chrome</test.browser>
		<test.browser.webDriver>c:/ntutil/chromedriver.exe</test.browser.webDriver>
		<!-- commented outline below shows configuration for the Internet Explorer driver -->
		<!-- test.browser.webDriver>C:\ntutil\IEDriverServer_x64_2.42.0\IEDriverServer.exe</test.browser.webDriver -->
		<!-- Configuration for phantomJS driver -->
		<!-- To use phantomJS, remove the comment marks around the following two lines.
      <test.browser>phantomjs</test.browser>
      <test.browser.webDriver>${phantomjs.binary}</test.browser.webDriver>
      -->
		<!-- Specify timeout in seconds for the driver to wait for page load. must be an integer. -->
		<test.timeout>3</test.timeout>
	</properties>
	<dependencies>
		<!-- For creating and executing tests -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.portals.pluto</groupId>
			<artifactId>test-base</artifactId>
			<version>${project.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-api</artifactId>
		</dependency>
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
		</dependency>
		<dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>htmlunit-driver</artifactId>
		</dependency>
		<dependency>
			<groupId>com.codeborne</groupId>
			<artifactId>phantomjsdriver</artifactId>
		</dependency>
	</dependencies>
	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
			<!-- skip legal file checking for now -->
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>ianal-maven-plugin</artifactId>
				<executions>
					<execution>
						<goals>
							<goal>verify-legal-files</goal>
						</goals>
						<configuration>
							<skip>true</skip>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<configuration>
					<skipIfEmpty>true</skipIfEmpty>
				</configuration>
			</plugin>
			<!-- Don't attach source or javadoc archive (for release plugin)-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<configuration>
					<attach>false</attach>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-deploy-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-gpg-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-install-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-release-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
		</plugins>
	</build>
	<reporting>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-report-plugin</artifactId>
				<version>2.17</version>
				<configuration>
					<aggregate>true</aggregate>
					<reportsDirectories>
						<reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
						<reportsDirectory>${project.build.directory}/jasmine</reportsDirectory>
					</reportsDirectories>
				</configuration>
			</plugin>
		</plugins>
	</reporting>
	<!-- To build the tests, use "mvn clean install" from the parent directory. -->
	<!-- To run all of the tests, use "mvn verify -Prun-demo-tests" from the demo-integration-tests directory. -->
	<!-- To run a subset of the tests, use "mvn verify -Prun-demo-tests -Dit.test=\*<match string>\*" from the -->
	<!-- demo-integration-tests directory. The driver will then execute all tests whose test case name contains the -->
	<!-- specified string. -->
	<!-- Example: "mvn verify -Prun-demo-tests -Dit.test=\*PortleHubDemo\*" will execute all PortletHubDemo tests. -->
	<profiles>
		<profile>
			<id>liferay</id>
			<properties>
				<test.portal.name>Liferay</test.portal.name>
				<test.server.login.url>http://${test.server.host}:${test.server.port}/group/pluto-demos</test.server.login.url>
				<test.context.base>web/guest/</test.context.base>
			</properties>
		</profile>
		<profile>
			<id>run-demo-tests</id>
			<build>
				<plugins>
					<!-- For running the tests. -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-failsafe-plugin</artifactId>
						<version>2.22.0</version>
						<executions>
							<execution>
								<goals>
									<goal>integration-test</goal>
								</goals>
								<configuration>
									<useFile>true</useFile>
									<argLine>-Xms512m -Xmx512m</argLine>
									<trimStackTrace>false</trimStackTrace>
									<systemProperties>
										<property>
											<name>test.portal.name</name>
											<value>${test.portal.name}</value>
										</property>
										<property>
											<name>test.server.login.url</name>
											<value>${test.server.login.url}</value>
										</property>
										<property>
											<name>test.context.base</name>
											<value>${test.context.base}</value>
										</property>
										<property>
											<name>test.url.strategy</name>
											<value>${test.url.strategy}</value>
										</property>
										<property>
											<name>test.server.host</name>
											<value>${test.server.host}</value>
										</property>
										<property>
											<name>test.server.port</name>
											<value>${test.server.port}</value>
										</property>
										<property>
											<name>test.server.username.id</name>
											<value>${test.server.username.id}</value>
										</property>
										<property>
											<name>test.server.username</name>
											<value>${test.server.username}</value>
										</property>
										<property>
											<name>test.server.password.id</name>
											<value>${test.server.password.id}</value>
										</property>
										<property>
											<name>test.server.password</name>
											<value>${test.server.password}</value>
										</property>
										<property>
											<name>test.browser</name>
											<value>${test.browser}</value>
										</property>
										<property>
											<name>test.browser.webDriver</name>
											<value>${test.browser.webDriver}</value>
										</property>
										<property>
											<name>test.browser.binary</name>
											<value>${test.browser.binary}</value>
										</property>
										<property>
											<name>test.browser.headless</name>
											<value>${test.browser.headless}</value>
										</property>
										<property>
											<name>test.browser.maximized</name>
											<value>true</value>
										</property>
										<property>
											<name>test.module</name>
											<value>${test.module}</value>
										</property>
										<property>
											<name>test.debug</name>
											<value>false</value>
										</property>
										<property>
											<name>test.timeout</name>
											<value>${test.timeout}</value>
										</property>
										<property>
											<name>test.dependency.portlet.default.jquery.version</name>
											<value>${test.dependency.portlet.default.jquery.version}</value>
										</property>
									</systemProperties>
								</configuration>
							</execution>
						</executions>
					</plugin>
				</plugins>
			</build>
		</profile>
	</profiles>
</project>
