# Updated via Autotest Editor - 2026-05-27T09:41:49.894Z # Source of truth: this YAML file # Note: Expected results estimated based on step actions id: pbx-extensions-check-create_modify_delete_sip_extensions module: pbx group: pbx-extensions title: Verify full CRUD lifecycle for SIP extensions in the admin portal description: Verify full CRUD lifecycle for SIP extensions in the admin portal priority: Medium tags: [] references: [] dependencies: - label: Admin Portal value: https://pbx.local:4443 (configure via $BASE_URL) - label: Repository URL value: ${BASE_URL}/downloads or $REPO_URL - label: Protocol value: HTTPS + SIP (UDP/TCP/TLS) + RTP/SRTP - label: SIP Endpoints value: 'At least 2 registered SIP clients (deskphone or softphone: Zoiper, MicroSIP, Yealink, etc.)' - label: Network value: SIP trunk or local Asterisk/FreeSWITCH simulator for PSTN simulation - label: Credentials value: Admin user with sufficient privileges (portal + SSH where needed) - label: Test Data value: Clean test tenant or lab PBX instance (recommended isolated environment) preconditions: [] postconditions: [] steps: - action: Open admin portal or repository URL in browser context expected: >- The admin portal or repository page loads successfully without errors, security warnings, or redirects. - action: Execute the main verification or configuration action described in the test expected: >- The primary action described in the test completes successfully and produces the expected state or output. - action: Capture evidence (screenshot, log, API response) expected: >- Relevant evidence (screenshot, log, or API response) is successfully captured and can be reviewed. - action: Assert expected outcome expected: >- All verification assertions pass and the system is confirmed to be in the expected final state. automation_status: automated file: tests/pbx/extensions.spec.ts custom_fields: original_action: check automatable: - Full end-to-end execution via Playwright against the admin portal UI - Navigation, form interaction, and assertions are scriptable notYet: []