from config import config
from tests.automated import TestService

log = config.logger(__file__)


class TestTasksDiff(TestService):
    def setUp(self, version="2.0"):
        super(TestTasksDiff, self).setUp(version=version)

    def new_task(self, **kwargs):
        return self.create_temp(
            "tasks", name="test", type="testing", input=dict(view=dict()), **kwargs
        )

    def _compare_script(self, task_id, script):
        task = self.api.tasks.get_by_id(task=task_id).task
        if not script:
            self.assertTrue(
                task.get(
                    "script",
                    dict(
                        binary="python", repository="", entry_point="", requirements={}
                    ),
                )
            )
        else:
            for key, value in script.items():
                self.assertEqual(task.script[key], value)

    def test_not_deleted(self):
        task_id = self.new_task()
        script = dict(
            requirements=dict(pip=["six"]),
            repository="https://example.come/foo/bar",
            entry_point="test.py",
            diff="foo",
        )
        self.api.tasks.edit(task=task_id, script=script)
        self.api.tasks.started(task=task_id)

        self.api.tasks.reset(task=task_id)
        self._compare_script(task_id, script)

        new_reqs = dict()
        self.api.tasks.set_requirements(task=task_id, requirements=new_reqs)
        script["requirements"] = new_reqs
        self._compare_script(task_id, script)

        self.api.tasks.reset(task=task_id, clear_all=True)
        self._compare_script(task_id, {})