<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>

  <parent>
    <groupId>com.atlassian.bamboo</groupId>
    <artifactId>atlassian-bamboo</artifactId>
    <version>5.12.0-m401</version>
  </parent>

  <artifactId>atlassian-bamboo-ui-test</artifactId>
  <packaging>atlassian-plugin</packaging>

  <name>Atlassian Bamboo UI Test Module</name>

  <properties>
    <license.scope>test</license.scope>
    <acceptanceTestSettings />

    <testGroups>
      bamboo-setup,bamboo-applinks-tests,bamboo-integration-tests,bamboo-deployment-tests
    </testGroups>

    <serverJvmArgs>
      ${bambooServerJvmArgs}
      -Dbamboo.enable.chains=true
      -DhideDashboard=false
      -DacceptanceTestSettings=${acceptanceTestSettings}
      -Datlassian.darkfeature.bamboo.experimental.rest.admin.enabled=true
      -Datlassian.darkfeature.bamboo.sox.compliance.configurable=true
    </serverJvmArgs>

    <test.host>localhost</test.host>

    <db.host>${test.host}</db.host>
    <db.username>bamboo_functest</db.username>
    <db.password>bamboo_functest</db.password>

    <db.instance>bamboo_functest</db.instance>

    <!--To keep IDEA happy, these will be overridden in specific profiles-->
    <db.admin.username />
    <db.admin.password />
    <db.admin.url />
    <jdbc.driver />
  </properties>

  <profiles>
    <!-- profile for restore-upgrade tests -->
    <profile>
      <id>restore-upgrade-test</id>
      <properties>
        <bamboo.test.data.directory />
        <testGroups>
          restore-upgrade-430-tests,restore-upgrade-500-tests,restore-upgrade-520-tests
        </testGroups>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-bamboo-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.data.directory>${bamboo.test.data.directory}</acceptance.test.data.directory>
              </systemPropertyVariables>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

    <!-- profile for emulated hosted tests -->
    <profile>
      <id>hosted-test</id>
      <properties>
        <testGroups>hosted-tests</testGroups>
      </properties>
    </profile>

    <!-- profile for Atlassian Agents tests -->
    <profile>
      <id>atlassian-agents</id>
      <properties>
        <testGroups>atlassian-agents-tests</testGroups>
      </properties>
    </profile>

    <!-- DB profiles -->
    <profile>
      <id>mssql</id>
      <properties>
        <db.admin.username>sa</db.admin.username>
        <db.admin.password>sa</db.admin.password>
        <db.host>SQL_SERVER_IP_PLACEHOLDER</db.host> <!-- This SQL_SERVER_IP_PLACEHOLDER line will be substituted in build time. Do not touch.-->
        <db.port>1433</db.port>
        <db.admin.url>jdbc:jtds:sqlserver://${db.host}:${db.port}</db.admin.url>
        <jdbc.driver>net.sourceforge.jtds.jdbc.Driver</jdbc.driver>

        <db.password>Ighu0jie</db.password> <!-- Windows policy requirements  -->
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-bamboo-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>mssql</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.driverClassName>${jdbc.driver}</acceptance.test.db.jdbc.driverClassName>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>jdbc:jtds:sqlserver://${db.host}:${db.port}/${db.instance}</acceptance.test.db.jdbc.databaseUrl>
                <acceptance.test.db.dataOverwrite>true</acceptance.test.db.dataOverwrite>
              </systemPropertyVariables>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    DROP DATABASE "${db.instance}";
                  </sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>
              <execution>
                <id>create-database</id>
                <phase>clean</phase> <!--when binding it with process-test-resources we're getting SQLServer errors-->
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    CREATE DATABASE "${db.instance}" CONTAINMENT = PARTIAL COLLATE Latin1_General_CS_AS;
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
              <execution>
                <id>add-user-to-database</id>
                <phase>clean</phase> <!--when binding it with process-test-resources we're getting SQLServer errors-->
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    ALTER DATABASE "${db.instance}" SET READ_COMMITTED_SNAPSHOT ON WITH ROLLBACK IMMEDIATE;
                    USE "${db.instance}";
                    CREATE USER ${db.username} WITH PASSWORD = '${db.password}';
                    EXEC sp_addrolemember 'db_owner', '${db.username}';
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>mysql</id>
      <properties>
        <db.admin.username>root</db.admin.username>
        <db.admin.password />
        <db.host>localhost</db.host>
        <db.port>3306</db.port>
        <db.admin.url>jdbc:mysql://${db.host}:${db.port}</db.admin.url>
        <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-bamboo-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>mysql</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.driverClassName>${jdbc.driver}</acceptance.test.db.jdbc.driverClassName>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>jdbc:mysql://${db.host}:${db.port}/${db.instance}?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=utf8&amp;sessionVariables=storage_engine=InnoDB</acceptance.test.db.jdbc.databaseUrl>
                <acceptance.test.db.dataOverwrite>true</acceptance.test.db.dataOverwrite>
              </systemPropertyVariables>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    DROP DATABASE `${db.instance}`;
                    DROP USER '${db.username}'@'${db.host}';
                  </sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>
              <execution>
                <id>create-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    CREATE DATABASE `${db.instance}` CHARACTER SET UTF8 COLLATE utf8_bin;
                    GRANT ALL ON `${db.instance}`.* TO '${db.username}'@'${db.host}' IDENTIFIED BY '${db.password}';
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>mysql-ec2</id>
      <properties>
        <maven.test.it.skip>true</maven.test.it.skip>
      </properties>
    </profile>

    <profile>
      <id>oracle</id>
      <properties>
        <db.admin.username>oracle</db.admin.username>
        <db.admin.password>oracle</db.admin.password>
        <db.host>localhost</db.host>
        <db.port>1521</db.port>
        <db.instance>XE</db.instance>
        <db.admin.url>jdbc:oracle:thin:@${db.host}:${db.port}:${db.instance}</db.admin.url>
        <jdbc.driver>oracle.jdbc.OracleDriver</jdbc.driver>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-bamboo-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>oracle10and11g</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.driverClassName>${jdbc.driver}</acceptance.test.db.jdbc.driverClassName>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>jdbc:oracle:thin:@${db.host}:${db.port}:${db.instance}</acceptance.test.db.jdbc.databaseUrl>
                <acceptance.test.db.dataOverwrite>true</acceptance.test.db.dataOverwrite>
              </systemPropertyVariables>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    DROP USER ${db.username} CASCADE;
                  </sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>
              <execution>
                <id>create-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    CREATE USER ${db.username} identified by ${db.password};
                    GRANT ALL PRIVILEGES TO ${db.username} WITH ADMIN OPTION;
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>pgsql</id>
      <properties>
        <db.admin.username>postgres</db.admin.username>
        <db.admin.password />
        <db.host>localhost</db.host>
        <db.port>5432</db.port>
        <db.admin.url>jdbc:postgresql://${db.host}:${db.port}/postgres</db.admin.url>
        <jdbc.driver>org.postgresql.Driver</jdbc.driver>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>com.atlassian.maven.plugins</groupId>
            <artifactId>maven-bamboo-plugin</artifactId>
            <configuration>
              <systemPropertyVariables>
                <acceptance.test.db.engine>postgresql</acceptance.test.db.engine>
                <acceptance.test.db.connection.type>jdbc</acceptance.test.db.connection.type>
                <acceptance.test.db.jdbc.driverClassName>${jdbc.driver}</acceptance.test.db.jdbc.driverClassName>
                <acceptance.test.db.jdbc.userName>${db.username}</acceptance.test.db.jdbc.userName>
                <acceptance.test.db.jdbc.password>${db.password}</acceptance.test.db.jdbc.password>
                <acceptance.test.db.jdbc.databaseUrl>jdbc:postgresql://${db.host}:${db.port}/${db.instance}</acceptance.test.db.jdbc.databaseUrl>
                <acceptance.test.db.dataOverwrite>true</acceptance.test.db.dataOverwrite>
              </systemPropertyVariables>
            </configuration>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>drop-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    DROP DATABASE IF EXISTS "${db.instance}";
                    DROP ROLE IF EXISTS "${db.username}";
                  </sqlCommand>
                  <onError>continue</onError>
                </configuration>
              </execution>
              <execution>
                <id>create-database</id>
                <phase>clean</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <autocommit>true</autocommit>
                  <sqlCommand>
                    CREATE ROLE "${db.username}" NOSUPERUSER NOCREATEDB NOCREATEROLE LOGIN ENCRYPTED PASSWORD '${db.password}';
                    CREATE DATABASE "${db.instance}" WITH OWNER "${db.username}" ENCODING 'UTF8';
                  </sqlCommand>
                  <onError>abort</onError>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>release-profile</id>
      <properties>
        <skipTests>true</skipTests>
      </properties>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <skip>true</skip>
              <skipTests>true</skipTests>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>

  </profiles>

  <build>
    <plugins>
      <plugin>
        <groupId>com.atlassian.maven.plugins</groupId>
        <artifactId>maven-bamboo-plugin</artifactId>
        <extensions>true</extensions>
        <configuration>
          <!-- default configuration that AMPS will propagate to defined products -->
          <productVersion>${atlassian.product.version}</productVersion>
          <jvmArgs>${serverJvmArgs}</jvmArgs>

          <products>
            <product>
              <id>bamboo</id>
              <instanceId>bamboo-no-setup</instanceId>
              <productDataPath>${basedir}/src/test/resources/bamboo-test-resources-no-setup.zip</productDataPath>
              <output>${project.build.directory}/bamboo-no-setup.log</output>
            </product>
            <product>
              <id>bamboo</id>
              <instanceId>bamboo</instanceId>
              <productDataVersion>${atlassian.product.data.version}</productDataVersion>
              <output>${project.build.directory}/bamboo.log</output>
              <pluginArtifacts>
                <pluginArtifact>
                  <groupId>com.atlassian.bamboo.plugins</groupId>
                  <artifactId>atlassian-bamboo-plugin-test-utils</artifactId>
                </pluginArtifact>
              </pluginArtifacts>
            </product>
            <product>
              <id>bamboo</id>
              <instanceId>bamboo-hosted</instanceId>
              <productDataPath>${basedir}/src/test/resources/bamboo-test-resources-no-setup.zip</productDataPath>
              <!--<productDataVersion>${atlassian.product.data.version}</productDataVersion>-->
              <output>${project.build.directory}/bamboo-hosted.log</output>
              <systemProperties>
                <bamboo.hosted.mode>true</bamboo.hosted.mode>
                <bamboo.hosted.test.mode>true</bamboo.hosted.test.mode>
              </systemProperties>
              <pluginArtifacts>
                <pluginArtifact>
                  <groupId>com.atlassian.bamboo.plugins</groupId>
                  <artifactId>atlassian-bamboo-plugin-test-utils</artifactId>
                </pluginArtifact>
              </pluginArtifacts>
            </product>

            <product>
              <id>bamboo</id>
              <instanceId>bamboo-restore-upgrade-430</instanceId>
              <productDataPath>${basedir}/src/test/resources/bamboo-test-resources-no-setup.zip</productDataPath>
              <output>${project.build.directory}/bamboo-restore-upgrade-430.log</output>
              <pluginArtifacts>
                <pluginArtifact>
                  <groupId>com.atlassian.bamboo.plugins</groupId>
                  <artifactId>atlassian-bamboo-plugin-test-utils</artifactId>
                </pluginArtifact>
              </pluginArtifacts>
            </product>
            <product>
              <id>bamboo</id>
              <instanceId>bamboo-restore-upgrade-500</instanceId>
              <productDataPath>${basedir}/src/test/resources/bamboo-test-resources-no-setup.zip</productDataPath>
              <output>${project.build.directory}/bamboo-restore-upgrade-500.log</output>
              <pluginArtifacts>
                <pluginArtifact>
                  <groupId>com.atlassian.bamboo.plugins</groupId>
                  <artifactId>atlassian-bamboo-plugin-test-utils</artifactId>
                </pluginArtifact>
              </pluginArtifacts>
            </product>
            <product>
              <id>bamboo</id>
              <instanceId>bamboo-restore-upgrade-520</instanceId>
              <productDataPath>${basedir}/src/test/resources/bamboo-test-resources-no-setup.zip</productDataPath>
              <output>${project.build.directory}/bamboo-restore-upgrade-520.log</output>
              <pluginArtifacts>
                <pluginArtifact>
                  <groupId>com.atlassian.bamboo.plugins</groupId>
                  <artifactId>atlassian-bamboo-plugin-test-utils</artifactId>
                </pluginArtifact>
              </pluginArtifacts>
            </product>

            <product>
              <id>refapp</id>
              <instanceId>refapp</instanceId>
              <version>${refapp.version}</version>
              <output>${project.build.directory}/refapp.log</output>
              <containerId>tomcat7x</containerId>
              <jvmArgs />
            </product>
          </products>

          <systemPropertyVariables>
            <webdriver.firefox.logfile>${project.build.directory}/webdriverTmp/firefox.log</webdriver.firefox.logfile>
          </systemPropertyVariables>

          <testGroups>
            <testGroup>
              <id>bamboo-setup</id>
              <productIds>
                <productId>bamboo-no-setup</productId>
              </productIds>
              <includes>
                <include>**/tests/setup/SetupBambooTest.java</include>
              </includes>
            </testGroup>
            <testGroup>
              <id>bamboo-applinks-tests</id>
              <productIds>
                <productId>bamboo</productId>
                <productId>refapp</productId>
              </productIds>
              <includes>
                <include>**/suite/ApplicationLinksTestSuite.java</include>
              </includes>
            </testGroup>
            <!-- TODO provide test suite -->
            <testGroup>
              <id>bamboo-integration-tests</id>
              <productIds>
                <productId>bamboo</productId>
              </productIds>
              <includes>
                <include>**/tests/*Test.java</include>
                <include>**/tests/tests/*Test.java</include>
                <include>**/tests/admin/*Test.java</include>
                <include>**/tests/author/*Test.java</include>
                <include>**/tests/storage/*Test.java</include>
                <include>**/tests/user/*Test.java</include>
                <include>**/plans/configuration/**/*Test.java</include>
                <include>**/plans/branches/**/*Test.java</include>
              </includes>
            </testGroup>
            <testGroup>
              <id>bamboo-deployments-tests</id>
              <productIds>
                <productId>bamboo</productId>
              </productIds>
              <includes>
                <include>**/deployments/*Test.java</include>
              </includes>
            </testGroup>

            <!-- test group for emulated hosted mode -->
            <testGroup>
              <id>hosted-tests</id>
              <productIds>
                <productId>bamboo-hosted</productId>
              </productIds>
              <includes>
                <include>**/suite/HostedTestSuite.java</include>
              </includes>
            </testGroup>

            <!-- test group for Atlassian Agents -->
            <testGroup>
              <id>atlassian-agents-tests</id>
              <productIds>
                <productId>bamboo</productId>
              </productIds>
              <includes>
                <include>**/suite/AtlassianAgentsTestSuite.java</include>
              </includes>
            </testGroup>

            <!-- test groups for upgrade testing -->
            <testGroup>
              <id>restore-upgrade-430-tests</id>
              <productIds>
                <productId>bamboo-restore-upgrade-430</productId>
              </productIds>
              <includes>
                <include>**/suite/RestoreUpgradeFrom430TestSuite.java</include>
              </includes>
            </testGroup>
            <testGroup>
              <id>restore-upgrade-500-tests</id>
              <productIds>
                <productId>bamboo-restore-upgrade-500</productId>
              </productIds>
              <includes>
                <include>**/suite/RestoreUpgradeFrom500TestSuite.java</include>
              </includes>
            </testGroup>
            <testGroup>
              <id>restore-upgrade-520-tests</id>
              <productIds>
                <productId>bamboo-restore-upgrade-520</productId>
              </productIds>
              <includes>
                <include>**/suite/RestoreUpgradeFrom520TestSuite.java</include>
              </includes>
            </testGroup>

          </testGroups>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>sql-maven-plugin</artifactId>
        <configuration>
          <username>${db.admin.username}</username>
          <password>${db.admin.password}</password>
          <url>${db.admin.url}</url>
          <driver>${jdbc.driver}</driver>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>

    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-api</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- Module dependencies -->
    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-test-utils</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.atlassian.bamboo.plugins</groupId>
      <artifactId>atlassian-bamboo-plugin-test-utils</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-pageobjects</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.atlassian.refapp</groupId>
      <artifactId>atlassian-refapp-pageobjects</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.atlassian.browsers</groupId>
      <artifactId>atlassian-browsers-auto</artifactId>
      <scope>test</scope>
    </dependency>

    <!-- For the tests to be able to assert resource keys-->
    <dependency>
      <groupId>com.atlassian.bamboo</groupId>
      <artifactId>atlassian-bamboo-language</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.jayway.restassured</groupId>
      <artifactId>rest-assured</artifactId>
      <scope>test</scope>
    </dependency>

  </dependencies>
</project>
