4.5 KiB
4.5 KiB
Test Case & Test Plan Schema (Canonical)
This is the source of truth for all testcases and testplans in the repository. Everything is stored as individual YAML files so they can be versioned with git.
Directory Structure
testcases/<module>/<group>/<testcase-id>.yaml
- Top level under
testcases/is the module (device/product type):core/,pbx/,gateway/, etc. core/= generic, cross-device concerns (documentation, security posture, installation, virtualization platform, etc.).pbx/= PBX-specific telephony concerns (extensions, calls, codecs, etc.).- Add new device types (e.g.
gateway/,sbc/) as siblings ofcore/andpbx/.
The old <project> level has been removed.
Rules
- Every
idmust be globally unique across the entire system. - Testplans reference testcases by their
id(never embed content). - The automation decision (
automation_status) is made at testcase level, not per step. - Steps are intentionally simple (
action+expected+ optionalnotes). automatableandnotYetlists at testcase level are high-level summaries for reporting.custom_fieldsis a free-form object for future extensibility.- Generated artifacts (from testplan export) live only under
tests/generated/<plan-id>/and are never considered source of truth.
testcase.yaml (example)
id: pbx-extensions-check-create_modify_delete_sip_extensions
module: pbx
group: extensions
title: Create, modify and delete SIP extensions
description: Verify full CRUD lifecycle of SIP extensions via admin portal
priority: High
tags: [sip, provisioning]
references: []
dependencies: [] # other global testcase ids that must run before this one
preconditions: []
postconditions: []
steps:
- action: Open Extensions page in admin portal
expected: List of extensions is visible and searchable
- action: Create new SIP extension with random number and register on physical phone
expected: Extension appears in list and can register
notes: Requires physical phone hardware registration and audio validation
- action: Modify extension settings and verify changes
expected: Changes are persisted and reflected in the system
automation_status: partial # automated | partial | manual
reason_not_automatable: Requires physical phone for registration/audio validation (step 2)
automatable:
- Portal UI steps for creating and editing extensions
notYet:
- Physical phone registration and real audio validation
file: tests/pbx/extensions.spec.ts # TEMPORARY during transition only
custom_fields: {}
testplan.yaml (example)
id: pbx-regression-2026-05
name: PBX Regression Test Plan - May 2026
description: Full regression after v1.2.3
environment:
base_url: https://pbx.local:4443
tenant: lab-qa
testcases:
- ref: pbx-extensions-check-create_modify_delete_sip_extensions
severity: High
- ref: core-repository-check-presence_of_release_notes_and_changelog
severity: Medium
- ref: pbx-calls-check-internal_extension_to_extension_audio_call
severity: Critical
must_run_after:
- pbx-extensions-check-create_modify_delete_sip_extensions
execution_notes: |
Run in isolated lab environment. Have physical phones ready for media tests.
automation_summary:
total: 3
automated: 1
partial: 1
manual: 1
automatable_percentage: 66.7
custom_fields: {}
Export Behavior (when implemented)
From a composed testplan:
- Manual deliverable: HTML containing testcases where
automation_statusismanualorpartial - Automated deliverable: Playwright
.spec.tsplaced intests/generated/<plan-id>/(usable directly by Playwright + MCP agent)
Automation Model (Simplified)
automation_statusis the single source of truth for whether a testcase is automated.- Steps are kept simple on purpose (
action+expected+ optional free-textnotes). automatable/notYetlists at testcase level are summaries for reporting and planning.- Per-step automation flags were removed (decision moved to testcase level).
Transition Notes
- Until migration is complete, the old
editor/data/testcases.jsonand existingtests/*.spec.tsremain the temporary source of truth. - Once the YAML tree is populated and the editor reads from it, the YAML files become the single source of truth.
- New testcases must be created as YAML files following this schema.
Versioning
All changes to these YAML files are tracked with normal git. No application-level versioning is required.