- Increase logo size (48x48 desktop, 56x56 mobile) for better visibility - Add logo as favicon - Add logo to mobile header - Move user menu to navigation bars (sidebar on desktop, bottom bar on mobile) - Fix desktop chat layout - container structure prevents voice controls cutoff - Fix mobile bottom bar - use icon-only ActionIcons instead of truncated text buttons - Hide Create Node/New Conversation buttons on mobile to save header space - Make fixed header and voice controls work properly with containers 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { test as setup, expect } from '@playwright/test';
|
|
import { fileURLToPath } from 'node:url';
|
|
import path from 'node:path';
|
|
|
|
const __filename = fileURLToPath(import.meta.url);
|
|
const __dirname = path.dirname(__filename);
|
|
|
|
const authFile = path.join(__dirname, '../.playwright/.auth/user.json');
|
|
|
|
setup('authenticate', async ({ page }) => {
|
|
// Navigate to login page
|
|
await page.goto('http://localhost:3000/login');
|
|
|
|
// Fill in the Bluesky handle
|
|
await page.getByPlaceholder('e.g., yourname.bsky.social').fill('aprongecko.bsky.social');
|
|
|
|
// Click login button
|
|
await page.getByRole('button', { name: 'Log in with Bluesky' }).click();
|
|
|
|
// Wait for OAuth redirect and handle it
|
|
// This will open the Bluesky authorization page
|
|
// In a real test, you would need to handle the OAuth flow
|
|
// For now, we'll wait for the callback
|
|
await page.waitForURL(/callback/, { timeout: 30000 });
|
|
|
|
// After successful auth, should redirect to chat
|
|
await page.waitForURL(/chat/, { timeout: 10000 });
|
|
|
|
// Verify we're logged in
|
|
await expect(page.getByText('Ponderants Interview')).toBeVisible();
|
|
|
|
// Save authenticated state
|
|
await page.context().storageState({ path: authFile });
|
|
});
|