difuse-playwright/tests/network/guest-lan.spec.js

126 lines
4.6 KiB
JavaScript

import { expect, test } from '@playwright/test';
import { isValidMacAddress, clickSelect2Dropdown, hasToastText, sleep, isValidPrivateIPV4, getDefaultNetmask, isValidCidr } from '../../utils/utils.js';
test.describe('Network & Services - Network - Guest LAN', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/network/guest-lan', { waitUntil: 'networkidle' });
await page.waitForFunction(async () => {
await sleep(1000);
const element = document.querySelector('.lan-netmask-select');
return element && element.classList.contains('select2-hidden-accessible');
});
});
test('Title', async ({ page }) => {
const title = await page.title();
expect(title).toBe('Difuse - Network - Guest LAN');
});
test('Info Table', async ({ page }) => {
const rows = await page.$$('table > tbody > tr');
for (const row of rows) {
const cells = await row.$$('td');
if (cells.length === 2) {
const label = await cells[0].textContent();
const value = await cells[1].textContent();
if (label === 'Protocol') {
expect(value).toBe('Static Address');
} else if (label === 'Uptime') {
expect(typeof parseInt(value)).toBe('number');
} else if (label === 'MAC') {
expect(isValidMacAddress(value)).toBeTruthy();
} else if (label === 'RX' || label === 'TX') {
expect(typeof parseInt(value)).toBe('number');
} else if (label === 'IPv4') {
expect(isValidPrivateIPV4(value)).toBeTruthy();
}
}
}
});
test('Validate Ip Address', async ({ page }) => {
await page.waitForSelector('#ipAddress');
const ipAddress = await page.locator('#ipAddress');
const ipValue = await ipAddress.inputValue();
const validateIP = await isValidPrivateIPV4(ipValue);
expect(validateIP).toBe(true);
});
test('Validate Network Mask Address', async ({ page }) => {
await page.waitForSelector('#ipAddress');
const ipAddress = await page.locator('#ipAddress');
const ipValue = await ipAddress.inputValue();
const networkMask = await page.locator('.lan-netmask-select');
const networkValue = await networkMask.inputValue();
const defaultValue = await getDefaultNetmask(ipValue);
if (defaultValue === networkValue) {
expect(defaultValue).toBe(networkValue);
} else {
expect(() => { throw new Error('Expected defaultValue to match networkValue'); }).toThrow();
}
});
test('DHCP Toggle', async ({ page }) => {
const dhcpCb = await page.$('.dhcp-cb');
const isChecked = await dhcpCb.isChecked();
if (isChecked) {
expect(await page.isVisible('label:has-text("DHCP Start")')).toBeTruthy();
} else {
await dhcpCb.check();
expect(await page.isVisible('label:has-text("DHCP Start1")')).toBeTruthy();
}
});
test.describe('Bad IPv4 Form Submits', () => {
test('Bad IPv4', async ({ page }) => {
const ip = await page.getByPlaceholder('192.168.1.1');
await ip.fill('1.1.1.1.1.1.1.1.1.1.1');
await page.click('button.button.green:has-text("Save")');
expect(await hasToastText(page, 'Invalid IP Address')).toBeTruthy();
});
test('Bad Netmask', async ({ page }) => {
await clickSelect2Dropdown(page, '.lan-netmask-select');
await page.getByRole('searchbox', { name: 'Search' }).fill('15151515515151515');
await page.keyboard.press('Enter');
await page.click('button.button.green:has-text("Save")');
expect(await hasToastText(page, 'Invalid Netmask')).toBeTruthy();
});
test('Bad DHCP Start', async ({ page }) => {
await page.locator('#dhcpStart').fill('55555555555555');
await page.click('button.button.green:has-text("Save")');
expect(await hasToastText(page, 'Invalid DHCP Range')).toBeTruthy();
});
test('Bad DHCP Max Leases', async ({ page }) => {
await page.locator('#dhcpMax').fill('55555555555555');
await page.click('button.button.green:has-text("Save")');
expect(await hasToastText(page, 'Invalid DHCP Range')).toBeTruthy();
});
});
test.describe('IPV6 Tab', () => {
test.beforeEach(async ({ page }) => {
await page.goto('/network/guest-lan', { waitUntil: 'networkidle' });
const ipv6Tab = await page.$("a:has-text('IPv6')");
await ipv6Tab.click();
});
test('ULA Prefix Validation', async ({ page }) => {
await page.waitForSelector('#ulaPrefix');
const ulaPrefix = await page.locator('#ulaPrefix');
const value = await ulaPrefix.inputValue();
if (value) {
const isValidIPv6 = isValidCidr(value);
expect(isValidIPv6).toBe(true);
}
});
});
});