import json
from GetTasksWithSections import find_start_task, get_tasks_and_readable, traverse_tasks
def load_json(file):
with open(file) as f:
return json.load(f)
tasks = load_json("test_data/tasks_example.json")
def test_find_start_task():
"""
Given:
tasks from `/investigation/{incident_id}/workplan` endpoint
When:
Needed to find the start task in order to traverse the tasks
Then:
Get a task which it's type is `start`
"""
start_task = find_start_task(tasks)
assert start_task.get("type") == "start"
def test_traverse_tasks():
"""
Given:
tasks from `/investigation/{incident_id}/workplan` endpoint
When:
Needed to traverse the tasks to construct nested task dictionary
Then:
The results will be in a nested form, without skipped or condition tasks (playbook tasks are included)`
"""
start_task = find_start_task(tasks)
nested_task_results = {}
traverse_tasks(tasks, start_task, nested_task_results)
expected_results = {
"Start": {"1", "2", "7"},
"Section 1": {"Section 2": {"5", "8"}, "Section 4": {"13"}},
"Section 3": {"10"},
}
for k1, v1 in nested_task_results.items():
if "tasks" in v1:
actual_result = {task.get("id") for task in v1.get("tasks")}
else:
actual_result = {k2: {task.get("id") for task in v2.get("tasks")} for k2, v2 in v1.items()}
assert actual_result == expected_results[k1]
all_tasks, _ = get_tasks_and_readable(nested_task_results)
assert {task.get("id") for task in all_tasks} == {"1", "2", "5", "7", "8", "10", "13"}