QA Smoketest
Session #{{ qa_session.id }} — Started {{ qa_session.started_at.strftime('%b %d %Y %H:%M') }} {% if qa_session.completed_at %}Completed{% else %}In Progress{% endif %}
{% if not qa_session.completed_at %} {% endif %}
Manual Checklist Progress {{ passed + failed + skipped }} of {{ total }} reviewed
{{ passed }} Pass
{{ failed }} Fail
{{ skipped }} Skip
{{ pending }} Pending
{{ smoke_pass }}/{{ smoke_total }} Auto Pass
{% for block_key, block_label in block_labels.items() %} {% set items = checklist_by_block.get(block_key, []) %} {% set block_pass = items|selectattr('status','equalto','pass')|list|length %} {% set block_fail = items|selectattr('status','equalto','fail')|list|length %} {% endfor %}
Automated Checks
Ran on page load — {{ smoke_pass + smoke_fail + smoke_pending }} checks
{{ smoke_pass }} Pass
{{ smoke_fail }} Fail
{{ smoke_pending }} Pending
{% set auto_groups = [ ('route', 'fas fa-route', 'Routes', 'Are all pages registered and reachable?'), ('db', 'fas fa-database', 'Database', 'Users, recipes, ingredients, data integrity'), ('schema', 'fas fa-table', 'Schema', 'Column and table existence checks'), ('toggle', 'fas fa-toggle-on', 'Feature Toggles', 'Settings state and cascade integrity'), ('infra', 'fas fa-server', 'Infrastructure', 'Versioning, backups, scripts'), ] %} {% for prefix, icon, label, desc in auto_groups %} {% set group_items = [] %} {% for key, result in smoke_results.items() %} {% if key.startswith(prefix) %} {% set _ = group_items.append((key, result)) %} {% endif %} {% endfor %} {% set g_pass = group_items|selectattr('1.status','equalto','pass')|list|length %} {% set g_fail = group_items|selectattr('1.status','equalto','fail')|list|length %} {% set g_pend = group_items|selectattr('1.status','equalto','pending')|list|length %}
{{ label }}
{{ desc }}
{% if g_fail > 0 %}{{ g_fail }} fail{% endif %} {% if g_pend > 0 %}{{ g_pend }} pending{% endif %} {{ g_pass }} pass
{% for key, result in smoke_results.items() %} {% if key.startswith(prefix) %}
{{ '✓' if result.status == 'pass' else ('⏳' if result.status == 'pending' else '✗') }}
{{ result.label }}
{{ result.detail }}
{% endif %} {% endfor %}
{% endfor %}
{% for block_key, block_label in block_labels.items() %}
{{ block_label }} {% set items = checklist_by_block.get(block_key, []) %} {% set bp = items|selectattr('status','equalto','pass')|list|length %} {% set bf = items|selectattr('status','equalto','fail')|list|length %}
{% if bp > 0 %}{{ bp }} pass{% endif %} {% if bf > 0 %}{{ bf }} fail{% endif %} {{ items|length }} items
{% for item in checklist_by_block.get(block_key, []) %}
{% set item_label = namespace(text=item.item_key) %} {% for b, k, l in qa_checklist_def %}{% if k == item.item_key %}{% set item_label.text = l %}{% endif %}{% endfor %}
{{ item_label.text }}
{% if item.notes %}
{{ item.notes }}
{% endif %}
{% else %}
No items in this block.
{% endfor %}
{% endfor %}
Session History Last 10 sessions
{% for s in all_sessions %}
#{{ s.id }} {{ s.started_at.strftime('%b %d %Y %H:%M') }} {% if s.completed_at %}Done{% else %}In Progress{% endif %} {% if s.id == qa_session.id %}Current{% endif %}
{% else %}
No session history yet.
{% endfor %}