plugins {
	id 'java'
	id 'org.springframework.boot' version '3.5.6'
	id 'io.spring.dependency-management' version '1.1.7'
    id 'jacoco'
}

group = 'io.github.js0ny'
version = '0.0.1-SNAPSHOT'
description = 'Demo project for Spring Boot'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(21)
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
	implementation 'org.springframework.boot:spring-boot-starter-actuator'

}

jacoco {
    toolVersion = "0.8.12"
}

tasks.named('test') {
	useJUnitPlatform()
    finalizedBy jacocoTestReport
}

jacocoTestReport {
    dependsOn test
    
    reports {
        xml.required = true  
        html.required = true
    }

    afterEvaluate {
            classDirectories.setFrom(files(classDirectories.files.collect {
                fileTree(dir: it, exclude: [
                    '**/IlpCourseworkApplication.class', 
                    '**/config/*',
                    '**/data/*',
                    '**/util/*'
                ])
            }))
        }
}

jacocoTestCoverageVerification {
    violationRules {
        rule {
            element = 'CLASS'
            
            excludes = [
                'io.github.js0ny.IlpCourseworkApplication',
                '**.config.**',
                '**.data.**',
                '**.util.**'
            ]

            limit {
                counter = 'BRANCH'
                value = 'COVEREDRATIO'

                // minimum = 0.50 
            }
        }
    }
}


check.dependsOn jacocoTestCoverageVerification
