feat: Add comprehensive E2E tests with Playwright and enhance component test IDs

Add end-to-end testing infrastructure for the application:
- Implemented Playwright E2E test suite with 31 passing tests across authentication and feature workflows
- Created mock API fixtures for testing without requiring backend/database
- Added data-testid attributes to major React components (Login, Register, TaskList, Events, SocialFeed, Profile, Navbar)
- Set up test fixtures with test images (profile-pic.jpg, test-image.jpg)
- Configured playwright.config.js for multi-browser testing (Chromium, Firefox, Safari)

Test Coverage:
- Authentication flows (register, login, logout, protected routes)
- Task management (view, complete, filter, search)
- Social feed (view posts, create post, like, view comments)
- Events (view, join/RSVP, filter, view details)
- User profile (view profile, streets, badges, statistics)
- Premium features page
- Leaderboard and rankings
- Map view

🤖 Generated with OpenCode

Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
This commit is contained in:
William Valentin
2025-11-29 15:27:56 -08:00
parent e559b215ed
commit ab2503efb8
15 changed files with 1194 additions and 60 deletions
+14 -14
View File
@@ -8,34 +8,34 @@ const Navbar = () => {
const authLinks = (
<ul className="navbar-nav ml-auto">
<li className="nav-item">
<Link className="nav-link" to="/map">Map</Link>
<Link className="nav-link" to="/map" data-testid="nav-map">Map</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/tasks">Tasks</Link>
<Link className="nav-link" to="/tasks" data-testid="nav-tasks">Tasks</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/feed">Feed</Link>
<Link className="nav-link" to="/feed" data-testid="nav-feed">Feed</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/events">Events</Link>
<Link className="nav-link" to="/events" data-testid="nav-events">Events</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/rewards">Rewards</Link>
<Link className="nav-link" to="/rewards" data-testid="nav-rewards">Rewards</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/leaderboard">Leaderboard</Link>
<Link className="nav-link" to="/leaderboard" data-testid="nav-leaderboard">Leaderboard</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/analytics">Analytics</Link>
<Link className="nav-link" to="/analytics" data-testid="nav-analytics">Analytics</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/profile">Profile</Link>
<Link className="nav-link" to="/profile" data-testid="nav-profile">Profile</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/premium">Premium</Link>
<Link className="nav-link" to="/premium" data-testid="nav-premium">Premium</Link>
</li>
<li className="nav-item">
<a onClick={logout} href="#!" className="nav-link">Logout</a>
<a onClick={logout} href="#!" className="nav-link" data-testid="logout-button">Logout</a>
</li>
</ul>
);
@@ -43,18 +43,18 @@ const Navbar = () => {
const guestLinks = (
<ul className="navbar-nav ml-auto">
<li className="nav-item">
<Link className="nav-link" to="/register">Register</Link>
<Link className="nav-link" to="/register" data-testid="nav-register">Register</Link>
</li>
<li className="nav-item">
<Link className="nav-link" to="/login">Login</Link>
<Link className="nav-link" to="/login" data-testid="nav-login">Login</Link>
</li>
</ul>
);
return (
<nav className="navbar navbar-expand-sm navbar-dark bg-dark mb-4">
<nav className="navbar navbar-expand-sm navbar-dark bg-dark mb-4" data-testid="navbar">
<div className="container">
<Link className="navbar-brand" to="/">Adopt-a-Street</Link>
<Link className="navbar-brand" to="/" data-testid="navbar-brand">Adopt-a-Street</Link>
<div className="collapse navbar-collapse">
{auth.isAuthenticated ? authLinks : guestLinks}
</div>