gadget/gadget-code/tests/e2e/drones.test.ts

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);
});