A complete blockchain implementation featuring: - synord: Full node with GHOSTDAG consensus - explorer-web: Modern React blockchain explorer with 3D DAG visualization - CLI wallet and tools - Smart contract SDK and example contracts (DEX, NFT, token) - WASM crypto library for browser/mobile
64 lines
1.9 KiB
TypeScript
64 lines
1.9 KiB
TypeScript
import { test, expect } from '@playwright/test';
|
|
|
|
test.describe('Search Functionality', () => {
|
|
test.beforeEach(async ({ page }) => {
|
|
await page.goto('/');
|
|
});
|
|
|
|
test('search input is accessible and functional', async ({ page }) => {
|
|
// Find search input
|
|
const searchInput = page.getByRole('combobox', { name: /search/i });
|
|
await expect(searchInput).toBeVisible();
|
|
|
|
// Type in search
|
|
await searchInput.fill('synor1');
|
|
|
|
// Should show suggestions dropdown
|
|
const dropdown = page.locator('#search-listbox');
|
|
await expect(dropdown).toBeVisible();
|
|
|
|
// Should show address suggestion
|
|
await expect(page.getByText(/address/i)).toBeVisible();
|
|
});
|
|
|
|
test('keyboard navigation in search dropdown', async ({ page }) => {
|
|
const searchInput = page.getByRole('combobox', { name: /search/i });
|
|
await searchInput.fill('12345');
|
|
|
|
// Press arrow down to navigate
|
|
await searchInput.press('ArrowDown');
|
|
|
|
// Press Enter to select
|
|
await searchInput.press('Enter');
|
|
|
|
// Should navigate to search results
|
|
await expect(page).toHaveURL(/\/search\?q=/);
|
|
});
|
|
|
|
test('clear search button works', async ({ page }) => {
|
|
const searchInput = page.getByRole('combobox', { name: /search/i });
|
|
await searchInput.fill('test query');
|
|
|
|
// Find and click clear button
|
|
const clearButton = page.getByRole('button', { name: /clear search/i });
|
|
await clearButton.click();
|
|
|
|
// Input should be empty
|
|
await expect(searchInput).toHaveValue('');
|
|
});
|
|
|
|
test('escape key closes dropdown', async ({ page }) => {
|
|
const searchInput = page.getByRole('combobox', { name: /search/i });
|
|
await searchInput.fill('test');
|
|
|
|
// Dropdown should be visible
|
|
const dropdown = page.locator('#search-listbox');
|
|
await expect(dropdown).toBeVisible();
|
|
|
|
// Press escape
|
|
await searchInput.press('Escape');
|
|
|
|
// Dropdown should be hidden
|
|
await expect(dropdown).not.toBeVisible();
|
|
});
|
|
});
|