Note: pytest-asyncio creates new event loop per test, so we cannot
reuse KworkClient across tests. Each test logs in independently.
This is acceptable because:
1. Login is fast (<1s)
2. Tests are independent (no shared state)
3. Auth tests verify login works correctly
4. Catalog tests verify API endpoints work
- Add event_loop fixture with session scope
- Add e2e_client fixture that logs in ONCE for all catalog tests
- Add catalog_kwork_id fixture that fetches kwork ID ONCE
- All catalog tests now reuse the same authenticated client
- Reduces login calls from 10 to 1 per test session
- Add session-scoped 'client' fixture for authenticated client
- Add 'catalog_kwork_id' fixture for reusable kwork ID
- Update all catalog tests to use fixtures
- Reduces login calls from 10 to 1 per test session