first commit
This commit is contained in:
@@ -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);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user