feat: add per-space timezone settings and improve booking management
- Add timezone configuration per space with fallback to system default - Implement timezone-aware datetime display and editing across frontend - Add migration for per_space_settings table - Update booking service to handle timezone conversions properly - Improve .gitignore to exclude build artifacts - Add comprehensive testing documentation Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
222
TESTING.md
Normal file
222
TESTING.md
Normal file
@@ -0,0 +1,222 @@
|
||||
# Testing Guide - Spaces & Dashboard Implementation
|
||||
|
||||
## Application Status
|
||||
|
||||
✅ **Backend**: Running on http://localhost:8000
|
||||
✅ **Frontend**: Running on http://localhost:5174
|
||||
✅ **API Tests**: All endpoints working correctly
|
||||
|
||||
## Test Data
|
||||
|
||||
### Users
|
||||
- **Admin**: admin@example.com / adminpassword
|
||||
- **User**: user@example.com / userpassword
|
||||
|
||||
### Spaces
|
||||
- Biblioteca Colorata 1 (sala, capacity: 20) - Active
|
||||
- Biblioteca Colorata 2 (sala, capacity: 20) - Active
|
||||
|
||||
### Bookings
|
||||
- Test Meeting - Tomorrow at 10:00 (Pending approval)
|
||||
|
||||
---
|
||||
|
||||
## Manual Testing Steps
|
||||
|
||||
### 1. Test Dashboard Page (`/`)
|
||||
|
||||
**As Admin User:**
|
||||
|
||||
1. Open http://localhost:5174 in your browser
|
||||
2. Login with: admin@example.com / adminpassword
|
||||
3. You should see the **Dashboard** with:
|
||||
- ✅ **Quick Stats Cards:**
|
||||
- Total Bookings: 1
|
||||
- Pending: 1
|
||||
- Approved: 0
|
||||
- Pending Requests: 1 (admin only)
|
||||
|
||||
- ✅ **Quick Actions Section:**
|
||||
- "Book a Space" button → links to /spaces
|
||||
- "My Bookings" button → links to /my-bookings
|
||||
- "Manage Bookings" button (admin only) → links to /admin/bookings
|
||||
- "Manage Spaces" button (admin only) → links to /admin/spaces
|
||||
|
||||
- ✅ **Upcoming Bookings Card:**
|
||||
- Shows "Test Meeting" for tomorrow at 10:00
|
||||
- Displays space name "Biblioteca Colorata 1"
|
||||
- Shows status badge "Pending"
|
||||
- Has "View All" link to /my-bookings
|
||||
|
||||
- ✅ **Available Spaces Card:**
|
||||
- Shows 2 active spaces
|
||||
- Each space clickable → navigates to /spaces/:id
|
||||
- Displays type and capacity
|
||||
- Has "View All" link to /spaces
|
||||
|
||||
- ✅ **Recent Activity Card (admin only):**
|
||||
- Shows last 3-5 audit log entries
|
||||
- Displays action, user, and timestamp
|
||||
- Has "View All" link to /admin/audit-log
|
||||
|
||||
**Expected Behavior:**
|
||||
- Loading spinner appears briefly while fetching data
|
||||
- All cards display correctly with accurate data
|
||||
- Links navigate to correct pages
|
||||
- Admin-only sections visible only to admin users
|
||||
|
||||
---
|
||||
|
||||
### 2. Test Spaces Page (`/spaces`)
|
||||
|
||||
1. Navigate to http://localhost:5174/spaces (or click "Book a Space" from Dashboard)
|
||||
2. You should see:
|
||||
- ✅ **Page Header:**
|
||||
- Title: "Available Spaces"
|
||||
- Subtitle: "Browse and reserve meeting rooms and desk spaces"
|
||||
|
||||
- ✅ **Filters:**
|
||||
- Type dropdown: All Types / Desk / Meeting Room / Conference Room
|
||||
- Status dropdown: All / Active Only
|
||||
|
||||
- ✅ **Spaces Grid:**
|
||||
- 2 space cards displayed in responsive grid
|
||||
- Each card shows:
|
||||
- Space name (e.g., "Biblioteca Colorata 1")
|
||||
- Active/Inactive badge
|
||||
- Type icon and label
|
||||
- Capacity icon and count
|
||||
- Description (truncated to 100 chars)
|
||||
- "View Details" button
|
||||
|
||||
- ✅ **Card Interactions:**
|
||||
- Hover effect: card lifts up with shadow
|
||||
- Click anywhere on card → navigates to /spaces/:id (detail page)
|
||||
|
||||
**Test Filtering:**
|
||||
- Change Type filter → cards update (currently all are "sala", so mapping may show as is)
|
||||
- Change Status to "Active Only" → shows only active spaces (both visible)
|
||||
- Empty filters → should show "No Spaces Found" message
|
||||
|
||||
**Expected Behavior:**
|
||||
- Loading spinner while fetching spaces
|
||||
- Cards render in a responsive grid (3 columns on desktop, 1 on mobile)
|
||||
- Clicking a card navigates to SpaceDetail page with calendar
|
||||
- Empty state shows when no spaces match filters
|
||||
|
||||
---
|
||||
|
||||
### 3. Test Space Detail Page (`/spaces/:id`)
|
||||
|
||||
1. From Spaces page, click on any space card
|
||||
2. You should see:
|
||||
- ✅ **Breadcrumbs:** Home / Spaces / [Space Name]
|
||||
- ✅ **Space header** with name, badges (type, capacity, status)
|
||||
- ✅ **Reserve Space button** (already implemented)
|
||||
- ✅ **Description card** (if space has description)
|
||||
- ✅ **Availability Calendar** (already implemented)
|
||||
|
||||
**Expected Behavior:**
|
||||
- Page loads space details correctly
|
||||
- Calendar shows existing bookings
|
||||
- Reserve button is functional
|
||||
|
||||
---
|
||||
|
||||
### 4. Test as Regular User
|
||||
|
||||
1. Logout (if logged in as admin)
|
||||
2. Login with: user@example.com / userpassword
|
||||
3. **Dashboard should show:**
|
||||
- ✅ Quick stats (Total, Pending, Approved) - WITHOUT "Pending Requests" card
|
||||
- ✅ Quick actions - WITHOUT "Manage Bookings" and "Manage Spaces" buttons
|
||||
- ✅ Upcoming Bookings - empty or only user's bookings
|
||||
- ✅ Available Spaces - same 2 spaces
|
||||
- ✅ NO "Recent Activity" section
|
||||
|
||||
4. **Spaces page should work identically** for regular users
|
||||
|
||||
**Expected Behavior:**
|
||||
- Admin-specific features hidden for regular users
|
||||
- All other functionality works the same
|
||||
|
||||
---
|
||||
|
||||
## Automated Test Results
|
||||
|
||||
```
|
||||
✅ All API endpoints tested successfully
|
||||
✅ Spaces page: Can display 2 spaces with filtering
|
||||
✅ Dashboard stats: Total: 1, Pending: 1, Approved: 0
|
||||
✅ Upcoming bookings: 1 upcoming bookings
|
||||
✅ Available spaces: 2 active spaces
|
||||
✅ Admin features: 1 pending requests, 3 recent logs
|
||||
✅ ESLint: No errors
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Verification Checklist
|
||||
|
||||
### Spaces.vue
|
||||
- [x] Grid layout with space cards
|
||||
- [x] Filtering by type and status
|
||||
- [x] Loading state spinner
|
||||
- [x] Empty state message
|
||||
- [x] Error handling
|
||||
- [x] Click navigation to detail page
|
||||
- [x] Responsive design
|
||||
- [x] Displays: name, type, capacity, status, description
|
||||
|
||||
### Dashboard.vue
|
||||
- [x] Quick stats cards (total, pending, approved)
|
||||
- [x] Admin stats (pending requests)
|
||||
- [x] Quick actions with links
|
||||
- [x] Upcoming bookings list (sorted by date)
|
||||
- [x] Available spaces list
|
||||
- [x] Admin recent activity logs
|
||||
- [x] Loading state
|
||||
- [x] Empty states for each section
|
||||
- [x] Responsive design
|
||||
- [x] Role-based visibility (admin vs user)
|
||||
|
||||
### Code Quality
|
||||
- [x] TypeScript types correct
|
||||
- [x] ESLint passing
|
||||
- [x] Uses existing APIs
|
||||
- [x] Consistent styling with SpaceDetail.vue
|
||||
- [x] Error handling implemented
|
||||
|
||||
---
|
||||
|
||||
## Known Limitations
|
||||
|
||||
1. **Type mapping**: Backend uses "sala" type, frontend expects "desk/meeting_room/conference_room"
|
||||
- Current workaround: formatType() function handles both
|
||||
- Consider aligning backend types with frontend expectations
|
||||
|
||||
2. **Empty bookings**: Test data has only 1 booking
|
||||
- To test full functionality, create more bookings via UI or API
|
||||
|
||||
3. **Time zones**: Dates displayed in UTC
|
||||
- Future enhancement: format according to user's timezone
|
||||
|
||||
---
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. ✅ Spaces.vue - **IMPLEMENTED**
|
||||
2. ✅ Dashboard.vue - **IMPLEMENTED**
|
||||
3. 🔜 Booking creation flow (US-004d)
|
||||
4. 🔜 My Bookings page
|
||||
5. 🔜 Admin booking management
|
||||
|
||||
---
|
||||
|
||||
## Support
|
||||
|
||||
If you encounter issues:
|
||||
1. Check browser console for errors (F12)
|
||||
2. Verify backend is running: `curl http://localhost:8000/health`
|
||||
3. Verify frontend is running: `curl http://localhost:5174/`
|
||||
4. Check API responses: http://localhost:8000/docs
|
||||
Reference in New Issue
Block a user