plugins {
    id 'java'
}

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    testImplementation project(":cassandra40")

    implementation('ch.qos.logback:logback-core:1.2.3')
    implementation('ch.qos.logback:logback-classic:1.2.3')
    implementation('com.datastax.cassandra:cassandra-driver-core:3.9.0+')

    testImplementation("io.kubernetes:client-java:${project.kubernetesClientVersion}")
    testImplementation("io.kubernetes:client-java-extended:${project.kubernetesClientVersion}")

    testImplementation("org.junit.jupiter:junit-jupiter-api:${project.junitVersion}")
    testImplementation("org.junit.jupiter:junit-jupiter-params:${project.junitVersion}")
    testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:${project.junitVersion}")

    testImplementation("org.assertj:assertj-core:3.16.0")
}

// we don't want to run the integration tests by default - they're heavy weight and won't run correctly
// if kubernetes isn't present
// we don't want the lack of local k8 to impede development
// for the most part, the C* integrations should be simple, and non-integration tests should use mocks
test {
    useJUnitPlatform() {
        excludeTags "integrationTest"
    }
}

tasks.register("integrationTest", Test) {
    jacoco {
        enabled = false
    }
    useJUnitPlatform() {
        includeTags "integrationTest"
    }
    systemProperty "sidecar.dockerRegistry", configureKubernetes.ext.dockerRegistry.toString()
    systemProperty "sidecar.kubernetesNamespace", configureKubernetes.ext.kubernetesNamespace.toString()
    systemProperty "sidecar.dockerGroup", configureKubernetes.ext.dockerGroup.toString()
    group = "verification"
}