Files
Remote-Terminal-for-MeshCore/tests/e2e/specs/radio-settings.spec.ts
2026-02-23 20:26:57 -08:00

56 lines
2.1 KiB
TypeScript

import { test, expect } from '@playwright/test';
import { getRadioConfig, updateRadioConfig } from '../helpers/api';
test.describe('Radio settings', () => {
test('change radio name via settings UI and verify persistence', async ({ page }) => {
const originalConfig = await getRadioConfig();
const originalName = originalConfig.name;
// Radio names are limited to 8 characters.
// Use a randomized name per run to avoid collisions with stale state.
const randomSuffix = Math.floor(Math.random() * 10000)
.toString()
.padStart(4, '0');
const testName = `E2E${randomSuffix}`; // 7 chars
try {
await page.goto('/');
await expect(page.getByText('Connected')).toBeVisible();
// --- Step 1: Change the name via settings UI ---
await page.getByText('Settings').click();
await page.getByRole('button', { name: /Identity/i }).click();
const nameInput = page.locator('#name');
await nameInput.clear();
await nameInput.fill(testName);
await page.getByRole('button', { name: 'Save Identity Settings' }).click();
await expect(page.getByText('Identity settings saved')).toBeVisible({ timeout: 10_000 });
// Exit settings page mode
await page.getByRole('button', { name: /Back to Chat/i }).click();
// --- Step 2: Verify via API (now returns fresh data after send_appstart fix) ---
const config = await getRadioConfig();
expect(config.name).toBe(testName);
// --- Step 3: Verify persistence across page reload ---
await page.reload();
await expect(page.getByText('Connected')).toBeVisible({ timeout: 15_000 });
await page.getByText('Settings').click();
await page.getByRole('button', { name: /Identity/i }).click();
await expect(page.locator('#name')).toHaveValue(testName, { timeout: 10_000 });
} finally {
// Always restore original name, even when assertions fail.
try {
await updateRadioConfig({ name: originalName });
} catch {
console.warn('Failed to restore radio name — manual intervention may be needed');
}
}
});
});