first commit

This commit is contained in:
2026-05-22 11:46:43 +02:00
commit 2ebd8fb16b
29 changed files with 3356 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
import { test, expect } from '@playwright/test';
import { login, BASE_URL } from '../../helpers/auth';
import { markPartial } from '../../helpers/manual';
test.describe('pbx-management', () => {
test('pbx-management-check-cli_management', async ({ page }, testInfo) => {
testInfo.annotations.push({ type: 'automationStatus', description: 'partial' });
testInfo.annotations.push({ type: 'testType', description: 'check' });
markPartial('CLI commands can be scripted via SSH automation (separate Node.js/shell step in CI); Playwright verifies the management web console if one exists. Full CLI coverage requires ssh2 integration alongside this test.');
testInfo.annotations.push({ type: 'description', description: 'Verify CLI management interface is accessible and key management commands execute correctly' });
await test.step('Navigate to admin portal — Web SSH / Console (if available)', async () => {
await login(page);
await page.goto(`${BASE_URL}/admin/console`);
});
await test.step('Verify web console loads or CLI section is accessible', async () => {
const pageText = await page.locator('body').textContent() ?? '';
const hasConsole = /console|terminal|ssh|cli/i.test(pageText);
// If no web console, note it — CLI testing must be done via separate SSH step
testInfo.annotations.push({
type: 'note',
description: hasConsole
? 'Web console found — proceed with command verification'
: 'No web console detected — CLI testing must be done via SSH in CI pipeline',
});
});
// TODO_MANUAL / TODO_SSH: Connect via SSH and verify these commands execute successfully:
// - `pbx-ctl status` → shows all services running
// - `pbx-ctl restart sip` → restarts SIP service without error
// - `pbx-cli show version` → shows correct version string
// - `pbx-cli show extensions` → lists all extensions
// - `pbx-cli show calls` → shows current active calls (empty if no calls)
});
test('pbx-management-check-gui_management', async ({ page }, testInfo) => {
testInfo.annotations.push({ type: 'automationStatus', description: 'automated' });
testInfo.annotations.push({ type: 'testType', description: 'check' });
testInfo.annotations.push({ type: 'description', description: 'Verify GUI admin portal is accessible, all main sections load correctly, and management actions are functional' });
await test.step('Login to admin portal', async () => {
await login(page);
});
const sections = [
{ name: 'Dashboard', path: '/admin/dashboard' },
{ name: 'Extensions', path: '/admin/extensions' },
{ name: 'Trunks', path: '/admin/trunks' },
{ name: 'Dial Plans', path: '/admin/dialplans' },
{ name: 'Conferences', path: '/admin/conferences' },
{ name: 'Ring Groups', path: '/admin/ring-groups' },
{ name: 'IVR', path: '/admin/ivr' },
{ name: 'Voicemail', path: '/admin/voicemail' },
{ name: 'Backup', path: '/admin/backup' },
{ name: 'Security', path: '/admin/security' },
{ name: 'Logs', path: '/admin/logs' },
{ name: 'Settings', path: '/admin/settings' },
];
for (const section of sections) {
await test.step(`Verify "${section.name}" section is accessible`, async () => {
const response = await page.goto(`${BASE_URL}${section.path}`);
expect(
response?.status(),
`Section "${section.name}" returned HTTP ${response?.status()}`,
).toBeLessThan(500);
await expect(page.locator('body')).not.toContainText(/500 internal server error/i);
});
}
await test.step('Verify navigation menu is displayed', async () => {
await page.goto(`${BASE_URL}/admin/dashboard`);
await expect(page.locator('nav, .sidebar, .menu').first()).toBeVisible();
});
await test.step('Verify user info / logout option is visible', async () => {
await expect(page.locator('body')).toContainText(/logout|log out|sign out|admin/i);
});
});
});