####################################
## Действие при закрытии задачи теста
##
def change_parent_status(obj, status):
    obj.parent_task.status = status
    obj.parent_task.save()
    return True

def _main(obj):
    parent_cur_status = obj.parent_task.status
    # Проверяем, что с родителем вообще что-то нужно делать
    if parent_cur_status.status_type == "CLOSED":
        return None

    # Ищем подходящий статус для родителя
    lt_bug = models.CmfLogicType.get(code='task.bug:default')
    lt_taskdev = models.CmfLogicType.get(code='task.agile:taskdev')
    wf_unicorn = models.CmfWorkflow.get(name='Один тащер')
    wf = obj.parent_task.workflow
    parent_status = None
    if obj.parent_task.logic_type in (lt_bug, lt_taskdev):
        parent_status = wf.get_default_status(status_code='pereotkrito')
    elif wf == wf_unicorn:
        parent_status = wf.get_default_status(status_code='Tech_appproved') # Тех. решение согласовано

    if parent_status and parent_cur_status == wf.get_default_status(status_code='testirovanie'):
        change_parent_status(obj, parent_status)
    elif wf == wf_unicorn:
        # Для тащера всё равно какой текущий статус
        change_parent_status(obj, parent_status)
    else:
        msg = f"Не могу сменить статус родительской задачи {obj.parent_task}."
        msg += f" Должен быть статус типа \"testirovanie\", сейчас тип {parent_cur_status.status_code}."
        cmf_alert(msg)


def run(self):
    from cmf.util import cmfutil
    with cmfutil.run_system():
        # БП могут использовать в отрыве от EvaFeature/EvaBug
        if self.parent_task:
            _main(self)
