80 lines
3.0 KiB
TypeScript
80 lines
3.0 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test('Home page should display user drones from API', async ({ page }) => {
|
|
await page.goto('https://code-dev.g4dge7.com:5174/sign-in');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.fill('#email', 'rob@digitaltelepresence.com');
|
|
await page.fill('#password', 'ionfrali');
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForTimeout(3000);
|
|
|
|
await page.goto('https://code-dev.g4dge7.com:5174/');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const sidebar = page.locator('aside').first();
|
|
const sidebarText = await sidebar.textContent();
|
|
|
|
expect(sidebarText).toContain('Drones');
|
|
expect(sidebarText).toContain('mysterymachine');
|
|
});
|
|
|
|
test('DroneInspector shows drone details', async ({ page }) => {
|
|
await page.goto('https://code-dev.g4dge7.com:5174/sign-in');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.fill('#email', 'rob@digitaltelepresence.com');
|
|
await page.fill('#password', 'ionfrali');
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForTimeout(3000);
|
|
|
|
await page.goto('https://code-dev.g4dge7.com:5174/');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const sidebar = page.locator('aside').first();
|
|
|
|
const droneButton = sidebar.locator('button').filter({ hasText: 'mysterymachine' }).first();
|
|
await droneButton.click();
|
|
await page.waitForTimeout(500);
|
|
|
|
const inspector = page.locator('text=Drone Inspector');
|
|
await expect(inspector).toBeVisible();
|
|
|
|
const backButton = page.locator('text=← Back to Dashboard');
|
|
await expect(backButton).toBeVisible();
|
|
|
|
const hostname = page.locator('text=Hostname');
|
|
await expect(hostname).toBeVisible();
|
|
|
|
const workspace = page.locator('text=Workspace');
|
|
await expect(workspace).toBeVisible();
|
|
|
|
await backButton.click();
|
|
await page.waitForTimeout(500);
|
|
|
|
await expect(inspector).not.toBeVisible();
|
|
});
|
|
|
|
test('Drones API returns available and busy drones', async ({ page }) => {
|
|
await page.goto('https://code-dev.g4dge7.com:5174/sign-in');
|
|
await page.waitForLoadState('networkidle');
|
|
await page.fill('#email', 'rob@digitaltelepresence.com');
|
|
await page.fill('#password', 'ionfrali');
|
|
await page.click('button[type="submit"]');
|
|
await page.waitForTimeout(2000);
|
|
|
|
const token = await page.evaluate(() => localStorage.getItem('dtp_auth_token'));
|
|
expect(token).toBeDefined();
|
|
|
|
const dronesResponse = await page.request.get('https://code-dev.g4dge7.com:5174/api/v1/drone/registration', {
|
|
headers: { 'Authorization': `Bearer ${token}` },
|
|
});
|
|
|
|
expect(dronesResponse.status()).toBe(200);
|
|
const data = await dronesResponse.json() as { success: boolean; data: Array<{ status: string }> };
|
|
expect(data.success).toBe(true);
|
|
expect(data.data).toBeDefined();
|
|
|
|
const availableOrBusy = data.data.filter(d => d.status === 'available' || d.status === 'busy');
|
|
expect(availableOrBusy.length).toBeGreaterThan(0);
|
|
}); |