{% extends "base.html" %} {% block title %}Scenario #{{ index }} - Scenario Result Viewer{% endblock %} {% block breadcrumb %} {% endblock %} {# Recursive macro for rendering condition tree nodes #} {% macro render_condition(node, depth) %}
{# Expand arrow (only if has children) #} {% if node.children %} {% else %} {% endif %} {# Status icon #} {% if node.satisfied %} ✓ {% else %} {% if node.role == "fail" %} ✗ {% else %} ✗ {% endif %} {% endif %} {# Label and type #}
{{ node.label }} ({{ node.condition_type }})
{# Role badge #} {% if node.role %} {% if node.role == "pass" %} pass {% elif node.role == "fail" %} fail {% endif %} {% endif %}
{# Message (human-readable condition status) #} {% if node.message %}
{{ node.message }}
{% endif %} {# Details (non-structural keys) — collapsible #} {% if node.details %}
{% endif %} {# Children (recursive) #} {% if node.children %}
{% for child in node.children %} {{ render_condition(child, depth + 1) }} {% endfor %}
{% endif %}
{% endmacro %} {% block content %} {% if result %}

{{ scenario_name }}

{% if result.passed is none %} N/A {% elif result.passed %} PASSED {% else %} FAILED {% endif %} {% if result.elapsed_seconds is not none %} {{ "%.2f" | format(result.elapsed_seconds) }}s {% endif %} {% if result.overrides %} {% endif %}
{% if result.message %}

{{ result.message }}

{% endif %}
{% if result.video_filename %}

Recording

{% endif %} {% if result.overrides %}

Overrides

{% endif %} {% if result.raw_log %}
{% endif %} {% if result.condition_statuses %}

Condition Tree

{% for cs in result.condition_statuses %} {{ render_condition(cs, 0) }} {% endfor %}
{% endif %} {% else %}

No result data found for this scenario.

{% endif %} {% endblock %} {% block extra_scripts %} {% endblock %}