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


def corePaths = ["gobblin-binary-management", "gobblin-compaction", "gobblin-core", "gobblin-data-management",
                 "gobblin-hive-registration", "gobblin-runtime", "gobblin-yarn", "gobblin-metrics-libs", "gobblin-runtime-hadoop"]
def servicePaths = ["gobblin-api", "gobblin-rest-service", "gobblin-restli", "gobblin-service"]
def modulePaths = ["gobblin-modules"]

task getGroupedTests {
    doLast {
        def taskNames = subprojects.findAll {
            subproject -> subproject.tasks.hasProperty('test')
        }
        def includedGroups
        switch(groupName) {
            case "Core Tests":
                includedGroups = taskNames.findAll {task ->
                    corePaths.any {
                        task.path.contains(it)
                    }
                }
                break;
            case "Service Tests":
                includedGroups = taskNames.findAll {task ->
                    servicePaths.any {
                        task.path.contains(it)
                    }
                }
                break;
            case "Module Tests":
                includedGroups = taskNames.findAll {task ->
                    modulePaths.any {
                        task.path.contains(it)
                    }
                }
                break;
            case "Other Tests":
                corePaths.addAll(servicePaths)
                corePaths.addAll(modulePaths)
                includedGroups = taskNames.findAll { task ->
                    !corePaths.any {
                        task.path.contains(it)
                    }
                }
                break;
            default:
                includedGroups = taskNames
                break;
        }

        def groupedTaskNames = includedGroups.collect { task -> task.tasks.findByName('test').getPath() }
        println "CI Task: " + groupedTaskNames.join(" ")
    }
}
