<?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>
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.photark</groupId>
		<artifactId>photark-parent</artifactId>
		<version>1.0-incubating-SNAPSHOT</version>
		<relativePath>../pom.xml</relativePath>
	</parent>
	<artifactId>photark-ui-tests</artifactId>
	<name>Apache PhotArk UI Integration Test</name>
    
    
    <properties>
        <http.port>8080</http.port>
        <http.base>http://localhost:${http.port}/photark</http.base>
        <tomcat.home>${env.CATALINA_HOME}</tomcat.home>
    </properties>

    <dependencies>
    	<dependency>
    		<groupId>org.apache.photark</groupId>
    		<artifactId>photark-webapp</artifactId>
    		<version>1.0-incubating-SNAPSHOT</version>
    		<type>war</type>
    	</dependency>
							
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.8.1</version>
			<scope>test</scope>
		</dependency>
		
		<dependency>
            <groupId>net.sourceforge.htmlunit</groupId>
            <artifactId>htmlunit</artifactId>
            <version>2.7</version>
           	<scope>test</scope>
		</dependency>
    </dependencies>


	<build>
		<plugins>
			<plugin>
				<groupId>org.codehaus.cargo</groupId>
				<artifactId>cargo-maven2-plugin</artifactId>
				<version>1.0.1-beta-1</version>
                
				<configuration>
                    <wait>false</wait>

					<container>
						<containerId>tomcat6x</containerId>
                        <type>installed</type>
                        <home>${tomcat.home}</home>
                        <systemProperties>
                            <org.apache.commons.logging.Log>
                                org.apache.commons.logging.impl.SimpleLog
                            </org.apache.commons.logging.Log>
                        </systemProperties>
					</container>

                    <configuration>
                        <properties>
                            <cargo.servlet.port>${http.port}</cargo.servlet.port>
                        </properties>
                        <type>existing</type>
                        <home>${tomcat.home}</home>
                                            
						<deployables>
							<deployable>
								<groupId>org.apache.photark</groupId>
								<artifactId>photark-webapp</artifactId>
								<type>war</type>
								<properties>
									<context>photark</context>
								</properties>
							</deployable>
						</deployables>
                    </configuration>
					
                    
					<!-- Deployer configuration -->
					<!--deployer>
                        <type>installed</type>
						<type>embedded</type>
						<deployables>
							<deployable>
								<groupId>org.apache.photark</groupId>
								<artifactId>photark-webapp</artifactId>
								<type>war</type>
								<properties>
									<context>photark</context>
								</properties>
							</deployable>
						</deployables>
					</deployer-->
				</configuration>
                
				<executions>
					<execution>
						<id>start-container</id>
						<phase>pre-integration-test</phase>
						<goals>
                            <goal>deployer-deploy</goal>
							<goal>start</goal>
						</goals>
					</execution>
					<execution>
						<id>stop-container</id>
						<phase>post-integration-test</phase>
						<goals>
							<goal>stop</goal>
						</goals>
					</execution>
				</executions>				
                
                
   			</plugin>

			<!--
				NOTE: This horrible looking configuration sets up the surefire
				plugin to not run tests during the 'test' phase, but instead during
				the 'integration-test' phase.
			-->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
				<executions>
					<execution>
						<id>test</id>
						<phase>test</phase>
						<goals>
							<goal>test</goal>
						</goals>
						<configuration>
							<skip>true</skip>
						</configuration>
					</execution>
					<execution>
						<id>integration</id>
						<phase>integration-test</phase>
						<goals>
							<goal>test</goal>
						</goals>
						<configuration>
							<skip>false</skip>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

</project>
