<?xml version="1.0" encoding="UTF-8"?>
<!--

    JBoss, Home of Professional Open Source.
    Copyright 2014-2022 Red Hat, Inc., and individual contributors
    as indicated by the @author tags.

    Licensed 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/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <artifactId>parent</artifactId>
    <groupId>org.jboss.pnc</groupId>
    <version>3.5.3</version>
  </parent>

  <artifactId>integration-test-rex</artifactId>
  <name>integration-test-rex</name>
  <packaging>jar</packaging>

  <description>Tests for REST endpoints. REST to DB related tests run against im memory database. REST to executor related tests use mocked executor to avoid using remote services.</description>

  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>rest-client</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>rest-client-internal</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.resteasy</groupId>
      <artifactId>resteasy-client-microprofile</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>moduleconfig</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>test-common</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>ear-package</artifactId>
      <scope>test</scope>
      <type>ear</type>
    </dependency>
    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>ear-package</artifactId>
      <scope>test</scope>
      <type>pom</type>
      <exclusions>
        <!-- Avoid using private apis -->
        <exclusion>
          <groupId>org.jboss.pnc</groupId>
          <artifactId>datastore</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.keycloak</groupId>
      <artifactId>keycloak-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>rest</artifactId>
      <scope>test</scope>
      <classifier>classes</classifier>
    </dependency>
    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>auth</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>jakarta.enterprise</groupId>
      <artifactId>jakarta.enterprise.cdi-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>jakarta.persistence</groupId>
      <artifactId>jakarta.persistence-api</artifactId>
    </dependency>
    <dependency>
      <groupId>io.rest-assured</groupId>
      <artifactId>rest-assured</artifactId>
    </dependency>
    <!-- only here as lombok is too eager to do everything-->
    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.jboss.pnc</groupId>
      <artifactId>pnc-mock</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.jboss.pnc.metrics</groupId>
      <artifactId>pncmetrics</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.github.tomakehurst</groupId>
      <artifactId>wiremock-jre8</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.wiremock</groupId>
      <artifactId>wiremock-webhooks-extension</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>commons-validator</groupId>
      <artifactId>commons-validator</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.arquillian.junit</groupId>
      <artifactId>arquillian-junit-container</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.wildfly.arquillian</groupId>
      <artifactId>wildfly-arquillian-container-managed</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.arquillian.extension</groupId>
      <artifactId>arquillian-transaction-jta</artifactId>
    </dependency>
    <dependency>
      <artifactId>jboss-transaction-api_1.3_spec</artifactId>
      <groupId>org.jboss.spec.javax.transaction</groupId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.jboss.spec.javax.websocket</groupId>
      <artifactId>jboss-websocket-api_1.1_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.shrinkwrap</groupId>
      <artifactId>shrinkwrap-api</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.shrinkwrap.resolver</groupId>
      <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jboss.shrinkwrap.descriptors</groupId>
      <artifactId>shrinkwrap-descriptors-impl-javaee</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency> <!--Required to add lib to Arquillian deployment. -->
      <groupId>org.jboss</groupId>
      <artifactId>jboss-common-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
    </dependency>
    <dependency>
      <groupId>com.github.java-json-tools</groupId>
      <artifactId>json-patch</artifactId>
      <exclusions>
        <exclusion>
          <groupId>com.google.code.findbugs</groupId>
          <artifactId>jsr305</artifactId>
        </exclusion>
      </exclusions>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.testcontainers</groupId>
      <artifactId>testcontainers</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.github.dasniko</groupId>
      <artifactId>testcontainers-keycloak</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>org.jboss.shrinkwrap</groupId>
          <artifactId>shrinkwrap-api</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.jboss.shrinkwrap</groupId>
          <artifactId>shrinkwrap-impl-base</artifactId>
        </exclusion>
        <exclusion>
          <groupId>io.quarkus</groupId>
          <artifactId>quarkus-junit4-mock</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-failsafe-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>integration-test</goal>
              <goal>verify</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <additionalClasspathElements>
            <additionalClasspathElement>${project.basedir}/ear-package/target/ear-package-${project.version}.ear</additionalClasspathElement>
          </additionalClasspathElements>
          <includes>
            <include>**/*.java</include> <!--TODO rename tests to follow the convention. (*IT.java, IT*.java) -->
          </includes>
          <groups>org.jboss.pnc.test.category.ContainerTest</groups>
          <excludedGroups>org.jboss.pnc.test.category.DebugTest</excludedGroups>
          <redirectTestOutputToFile>true</redirectTestOutputToFile>
          <systemPropertyVariables>
            <pnc-config-path>${test.server.build.dir}/pnc-config.json</pnc-config-path>
          </systemPropertyVariables>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>auth</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-resources-plugin</artifactId>
            <executions>
              <execution>
                <id>copy-auth-properties</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>copy-resources</goal>
                </goals>
                <configuration>
                  <overwrite>true</overwrite>
                  <outputDirectory>${project.build.testOutputDirectory}/</outputDirectory>
                  <resources>
                    <resource>
                      <directory>${project.basedir}/src/main/auth/</directory>
                      <includes>
                        <include>auth.properties</include>
                      </includes>
                    </resource>
                  </resources>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>

    <profile>
      <id>provision-test-eap</id>
      <activation>
        <property><name>!skipTests</name></property>
      </activation>
      <build>
        <plugins>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>3.6.3</version>
            <configuration>
              <mainClass>org.jboss.pnc.integrationrex.GetFreePort</mainClass>
              <arguments>${project.build.directory}</arguments>
            </configuration>
            <executions>
              <execution>
                <id>prepare-properties</id>
                <phase>pre-integration-test</phase>
                <goals>
                  <goal>java</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>properties-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
              <execution>
                <phase>pre-integration-test</phase>
                <goals>
                  <goal>read-project-properties</goal>
                </goals>
                <configuration>
                  <files>
                    <file>${basedir}/target/test.properties</file>
                  </files>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.jboss.eap.plugins</groupId>
            <artifactId>eap-maven-plugin</artifactId>
            <executions>
              <execution>
                <phase>pre-integration-test</phase>
                <goals>
                  <goal>package</goal>
                </goals>
              </execution>
            </executions>
            <!-- Layers, excluded layers and scripts are inherited from parent's plugin config -->
            <configuration>
              <layers combine.children="append">
                <layer>h2-driver</layer>
                <layer>elytron-oidc-client</layer>
                <layer>keycloak-client-oidc</layer>
              </layers>
              <packaging-scripts>
                <packaging-script>
                  <scripts combine.children="append">
                    <script>../eap-scripts/inmemory-h2db.cli</script>
                  </scripts>
                </packaging-script>
                <packaging-script>
                  <scripts>
                    <script>../eap-scripts/configure-keycloak-auth.cli</script>
                  </scripts>
                  <properties-files>
                    <property-file>${basedir}/target/test.properties</property-file>
                  </properties-files>
                  <resolve-expressions>true</resolve-expressions>
                </packaging-script>
              </packaging-scripts>
              <skipDeployment>true</skipDeployment>
            </configuration>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>add-pnc-config</id>
                <goals>
                  <goal>run</goal>
                </goals>
                <phase>pre-integration-test</phase>
                <configuration>
                  <target>
                    <copy file="src/test/resources/pnc-config.json" tofile="${test.server.build.dir}/pnc-config.json" />
                    <replace file="${test.server.build.dir}/pnc-config.json" propertyFile="${basedir}/target/test.properties">
                      <replaceFilter token="@keycloakPort@" property="keycloakPort" />
                    </replace>
                  </target>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
