# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.


import unittest

from mozunit import main
from taskgraph.graph import Graph
from taskgraph.task import Task
from taskgraph.taskgraph import TaskGraph

from gecko_taskgraph.decision import full_task_graph_to_runnable_jobs


class TestRunnableJobs(unittest.TestCase):

    tasks = [
        {
            "kind": "build",
            "label": "a",
            "attributes": {},
            "task": {
                "extra": {"treeherder": {"symbol": "B"}},
            },
        },
        {
            "kind": "test",
            "label": "b",
            "attributes": {},
            "task": {
                "extra": {
                    "treeherder": {
                        "collection": {"opt": True},
                        "groupName": "Some group",
                        "groupSymbol": "GS",
                        "machine": {"platform": "linux64"},
                        "symbol": "t",
                    }
                },
            },
        },
    ]

    def make_taskgraph(self, tasks):
        label_to_taskid = {k: k + "-tid" for k in tasks}
        for label, task_id in label_to_taskid.items():
            tasks[label].task_id = task_id
        graph = Graph(nodes=set(tasks), edges=set())
        taskgraph = TaskGraph(tasks, graph)
        return taskgraph, label_to_taskid

    def test_taskgraph_to_runnable_jobs(self):
        tg, label_to_taskid = self.make_taskgraph(
            {t["label"]: Task(**t) for t in self.tasks[:]}
        )

        res = full_task_graph_to_runnable_jobs(tg.to_json())

        self.assertEqual(
            res,
            {
                "a": {"symbol": "B"},
                "b": {
                    "collection": {"opt": True},
                    "groupName": "Some group",
                    "groupSymbol": "GS",
                    "symbol": "t",
                    "platform": "linux64",
                },
            },
        )


if __name__ == "__main__":
    main()
