/**
 * 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.
 */

plugins {
    id 'java'
}

repositories {
    mavenCentral()
}

dependencies {
    testImplementation(project(':fineract-avro-schemas'))
    testImplementation(project(':fineract-client'))

    testImplementation 'org.springframework:spring-context'
    implementation 'org.springframework:spring-test'
    testImplementation 'org.springframework:spring-jms'

    testImplementation 'com.github.spotbugs:spotbugs-annotations'

    testImplementation 'com.squareup.retrofit2:retrofit:2.9.0'
    testImplementation 'commons-httpclient:commons-httpclient:3.1'
    testImplementation 'org.apache.commons:commons-lang3:3.14.0'
    testImplementation 'com.googlecode.json-simple:json-simple:1.1.1'
    testImplementation 'com.google.code.gson:gson:2.10.1'

    testImplementation 'io.cucumber:cucumber-java:7.15.0'
    testImplementation 'io.cucumber:cucumber-junit:7.15.0'
    testImplementation 'io.cucumber:cucumber-spring:7.15.0'

    testImplementation 'io.qameta.allure:allure-cucumber7-jvm:2.25.0'

    testImplementation 'org.assertj:assertj-core:3.25.3'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.10.2'
    testImplementation 'org.junit.jupiter:junit-jupiter:5.10.2'

    testCompileOnly 'org.projectlombok:lombok:1.18.30'
    testAnnotationProcessor 'org.projectlombok:lombok:1.18.30'

    testImplementation "ch.qos.logback:logback-core:1.5.3"
    testImplementation "ch.qos.logback:logback-classic:1.5.3"

    testImplementation 'org.apache.activemq:activemq-client:6.0.1'
    testImplementation "org.apache.avro:avro:1.11.3"
    testImplementation "org.awaitility:awaitility:4.2.0"
    testImplementation 'io.github.classgraph:classgraph:4.8.168'

    testImplementation 'org.apache.commons:commons-collections4:4.4'
}

tasks.withType(JavaCompile).configureEach {
    options.compilerArgs.add("-parameters")
}
