Comprehensive manual test scenarios for QA testing. Use with the sample database for pre-populated data.
- Authentication & Onboarding
- Project Management
- Room Management
- File Uploads
- Design Generation
- Style Quiz & Mood Board
- Floor Plan Digitization
- 3D Editor
- BOM (Bill of Materials)
- Technical Drawings
- CNC Cut Lists & Nesting
- MEP Engineering
- Building Code Compliance
- Project Timeline & Scheduling
- Site Logs
- Change Orders
- Product Catalogue
- Procurement & Purchase Orders
- Delivery Tracking
- Payments & Invoicing
- Contractor Marketplace
- Collaboration & Comments
- Notifications
- Quality Assurance & Punch List
- Handover Package
- Cost & Timeline Predictions
- Budget Optimizer
- Sustainability Scoring
- Financial Reports
- Portfolio Management
- Digital Twin & IoT
- Maintenance Scheduling
- Warranty Tracking
- Offcuts Exchange
- Community Gallery
- Developer API Portal
- Admin Panel
- User Settings & Preferences
- AR/VR Viewer
- Cross-cutting: Error Handling & Edge Cases
| Account | Role | Projects | |
|---|---|---|---|
| Alice Sharma | alice@example.com | user | Mumbai Apartment (in_progress), Bangalore Villa (draft) |
| Bob Kumar | bob@example.com | admin | Delhi Penthouse (completed) |
- Precondition: User not signed in
- Steps:
- Navigate to
/auth/signin - Click "Sign in with Google"
- Complete Google consent flow
- Verify redirect to
/dashboard
- Navigate to
- Expected: User session created, name/email populated from Google profile, role=user
- Steps:
- Navigate to
/auth/signin - Click "Sign in with GitHub"
- Authorize on GitHub
- Navigate to
- Expected: Session created, user record linked to GitHub provider
- Steps:
- Navigate to
/auth/signin - Enter
alice@example.comand password - Click Sign In
- Navigate to
- Expected: Redirect to dashboard with Alice's projects listed
- Steps:
- Sign in as any user
- Click user avatar > Sign Out
- Expected: Session destroyed, redirect to landing page, protected routes inaccessible
- Steps:
- Without signing in, navigate to
/dashboard - Try
/project/prj_mumbai_001 - Try
/admin
- Without signing in, navigate to
- Expected: All redirect to
/auth/signin
- Steps:
- Sign in as Alice (role=user)
- Navigate to
/admin
- Expected: 403 Forbidden or redirect (admin-only routes blocked for users)
- Steps:
- Sign in as Alice
- Click "+ New Project" on dashboard
- Enter name: "Test Project"
- Enter address: "123 Test Street"
- Select unit system: metric
- Click Create
- Expected: Project created with status=draft, redirects to
/project/{id}
- Steps:
- Sign in as Alice
- Navigate to
/dashboard
- Expected: Shows 2 projects (Mumbai Apartment, Bangalore Villa) + any newly created. Bob's projects NOT visible.
- Steps:
- Open Mumbai Apartment project
- Edit project name to "Mumbai 2BHK Reno Updated"
- Save
- Expected: Name updated, updatedAt timestamp refreshed
- Steps:
- Create a test project
- Delete it from project settings
- Expected: Project and all cascading data (rooms, designs, BOMs) removed
- Steps:
- Open Bangalore Villa (status=draft)
- Change status to in_progress
- Verify status badge updates
- Expected: Status updates correctly, reflected on dashboard list
- Steps:
- Sign in as Alice
- Try to access
/project/prj_delhi_003(Bob's project)
- Expected: 404 or access denied — users can only see their own projects
- Steps:
- Open Mumbai Apartment > Rooms tab
- Click "Add Room"
- Enter: Name="Guest Bedroom", Type=bedroom, L=3500mm, W=3000mm, H=2800mm, Floor=0
- Save
- Expected: Room appears in room list with correct dimensions
- Steps:
- Open "Main Living Room" (room_mum_living_001)
- Change width from 4000mm to 4200mm
- Save
- Expected: Width updated, related designs may show "recalculation needed" warning
- Steps:
- Create rooms of each type: living_room, bedroom, kitchen, bathroom, dining_room, study, balcony, pooja_room, foyer, laundry, garage, closet, hallway, kids_room, other
- Expected: All 15 room types accepted and saved correctly
- Steps:
- Create a test room
- Delete it
- Expected: Room removed, associated uploads/designs cascade deleted
- Steps:
- Try to create a room with: empty name, negative dimensions, missing type
- Expected: Validation errors shown for each invalid field
- Steps:
- Open any room detail page
- Click "Upload Photo"
- Select a JPEG image (< 10MB)
- Expected: File uploaded to S3/MinIO, thumbnail generated, appears in room gallery
- Steps:
- Open project page
- Upload a floor plan PDF
- Set category = "floor_plan"
- Expected: PDF stored, available for digitization workflow
- Steps:
- Upload the same image twice to the same room
- Expected: Perceptual hash comparison detects duplicate, warns user
- Steps:
- Try to upload a 50MB file
- Expected: Upload rejected with "file too large" error
- Steps:
- Try to upload a .exe file
- Expected: Upload rejected, only image/pdf types accepted
- Steps:
- Open room_mum_living_001
- Click "Generate Design"
- Select style=modern, budgetTier=mid_range
- Add constraint: "child-safe corners"
- Select source photo: upl_mum_001
- Submit
- Expected: Job created (type=design_generation), status=pending, progresses to completed, design variant created with render URL
- Steps:
- For each style (modern, contemporary, traditional, scandinavian, industrial, minimalist, bohemian, japandi, art_deco, tropical), generate a design
- Expected: All 10 styles produce valid design variants with unique spec_json
- Steps:
- Generate designs at economy, mid_range, premium, luxury tiers
- Expected: Material quality and price points differ appropriately per tier
- Steps:
- Navigate to
/project/prj_mumbai_001/designs - View all design variants for the project
- Navigate to
- Expected: Gallery shows render images, style badges, budget tier labels
- Steps:
- Open design gallery
- Select 2 variants for comparison
- Expected: Side-by-side view showing spec differences, cost differences
- Steps:
- Generate design with multiple constraints: "keep AC on east wall", "no glass furniture", "pet-friendly fabrics"
- Expected: Generated design spec respects all stated constraints
- Steps:
- Start a design generation
- While status=running, click "Cancel"
- Expected: Job status changes to cancelled, partial results discarded
- Steps:
- Navigate to
/project/prj_blr_002/style-quiz - Step 1: Select room usage = "family_gathering"
- Step 2: Select color = "warm_neutrals"
- Step 3: Select material = "wood_and_fabric"
- Step 4: Select budget = "premium"
- Step 5: Upload inspiration images
- Submit
- Navigate to
- Expected: Detected styles returned with scores (e.g., modern: 0.85), mood board generated, color palette suggested
- Steps:
- Complete quiz for a project
- Navigate away and return to quiz page
- Expected: Previous responses loaded, results displayed
- Steps:
- Complete quiz with "scandinavian" preferences
- Generate a design for same project
- Expected: Generated design leans toward detected style preferences
- Steps:
- Navigate to
/project/prj_mumbai_001/floor-plan - Select uploaded floor plan (upl_mum_004)
- Click "Digitize"
- Navigate to
- Expected: Job created, VLM extracts rooms with dimensions, doors, windows. Interactive SVG displayed.
- Steps:
- After digitization completes
- Check that room count matches actual floor plan
- Verify dimensions are within 5% of actual
- Verify doors/windows detected
- Expected: Extracted data is reasonably accurate
- Steps:
- After digitization
- Click "Create Rooms from Floor Plan"
- Expected: Rooms auto-created in the project with correct types and dimensions from the digitized plan
- Steps:
- After digitization
- Click "Download DXF"
- Expected: Valid DXF file downloads, opens in CAD software
- Steps:
- Navigate to
/project/prj_mumbai_001/editor
- Navigate to
- Expected: React Three Fiber canvas loads, room geometry visible, furniture objects rendered
- Steps:
- Select a furniture item
- Drag to move it
- Expected: Object translates along floor plane, snap-to-grid works
- Steps:
- Select furniture
- Switch to rotate mode
- Rotate 90 degrees
- Expected: Object rotates on Y axis, snaps to 15/45/90 degree increments
- Steps:
- Move an object
- Press Ctrl+Z (undo)
- Press Ctrl+Shift+Z (redo)
- Expected: Object returns to previous position on undo, returns on redo
- Steps:
- Open furniture catalog panel
- Search "sofa"
- Drag into scene
- Expected: New furniture object placed at cursor position in scene
- Steps:
- Open editor in Browser A as Alice
- Open same editor in Browser B as Bob (if admin access enabled)
- Move object in Browser A
- Expected: Movement reflected in Browser B in real-time, cursor awareness shown
- Steps:
- Open design variant dv_mum_liv_modern_001
- Click "Generate BOM"
- Expected: Job created, BOM result with categorized items, quantities, unit prices, and total cost
- Steps:
- Navigate to
/project/prj_mumbai_001/bom - View BOM for Mumbai Living Room
- Navigate to
- Expected: Table shows all 17+ items grouped by category (furniture, flooring, lighting, etc.)
- Steps:
- On BOM page, click "Export CSV"
- Expected: CSV file downloads with all BOM items, quantities, prices
- Steps:
- Click "Export PDF"
- Expected: Formatted PDF with project header, room info, itemized BOM table, total cost
- Steps:
- Verify sum of all item totalPrice values equals the totalCost field
- For bom_mum_liv_001: expect ~INR 198,160
- Expected: Totals mathematically correct
- Steps:
- On BOM page, filter by "furniture"
- Expected: Only furniture items shown, subtotal updates
- Steps:
- For a design variant, generate: floor_plan, elevation, section, rcp, flooring, electrical
- Expected: Each drawing type generates with appropriate DXF/PDF/SVG files
- Steps:
- Navigate to
/project/prj_mumbai_001/drawings
- Navigate to
- Expected: Gallery shows thumbnails/previews for each drawing, labeled by type
- Steps:
- Click download on any drawing
- Select DXF format
- Expected: Valid DXF file downloads
- Steps:
- Click a drawing with SVG output
- Expected: SVG renders inline in browser with zoom/pan
- Steps:
- Click "Export IFC" on a drawing
- Expected: IFC4-compliant file generates, downloadable
- Steps:
- Open kitchen design variant
- Click "Generate Cut List"
- Expected: Panel list with material, dimensions, grain direction, edge banding per panel
- Steps:
- Navigate to
/project/prj_mumbai_001/cutlist - View sheet layouts
- Navigate to
- Expected: Visual diagram showing panel placement on standard 2440x1220mm sheets
- Steps:
- Check waste_percent on cl_mum_kit_001
- Should be ~4.8%
- Expected: Waste under 5% (platform target)
- Steps:
- View hardware section of cut list
- Expected: Lists all hinges, channels, handles with quantities and brands
- Steps:
- Open design variant, click MEP > Electrical
- Expected: Load summary, circuit breakdown, switch layout, wire gauges calculated
- Steps:
- Click MEP > Plumbing (for kitchen design)
- Expected: Fixture units, pipe sizing, drain slopes, trap types specified
- Steps:
- Click MEP > HVAC
- Expected: Cooling/heating load, duct sizing, equipment selection returned
- Steps:
- View any MEP result
- Check standards_cited field
- Expected: NEC/IPC/ASHRAE/IS references included with specific clause numbers
- Steps:
- Navigate to
/project/prj_mumbai_001/mep
- Navigate to
- Expected: All MEP results displayed with tabs for electrical/plumbing/hvac
- Steps:
- Navigate to
/project/prj_mumbai_001/compliance - Select jurisdiction: India (NBC 2016)
- Run check
- Navigate to
- Expected: Compliance report generated with pass/fail per code section
- Steps:
- Select jurisdiction: US (IRC 2021)
- Run check
- Expected: US-specific code requirements checked (different from India)
- Steps:
- Trigger a compliance check that flags violations
- Review remediation suggestions
- Expected: Each violation shows severity, clause reference, and remediation suggestion
- Steps:
- Navigate to
/project/prj_mumbai_001/timeline - Click "Generate Schedule"
- Navigate to
- Expected: AI generates tasks with dependencies, critical path highlighted, milestones set
- Steps:
- View generated schedule
- Expected: Gantt chart renders with task bars, dependency arrows, milestone diamonds
- Steps:
- Verify critical path tasks are highlighted (sch_mum_001 has 10 critical tasks)
- Expected: Critical path clearly distinguished, represents longest dependency chain
- Steps:
- Click "Export" on timeline page
- Expected: Schedule exports in usable format (PDF/JSON)
- Steps:
- Navigate to
/project/prj_mumbai_001/site-logs - Click "New Log"
- Enter: date=today, title="Tiling Started", notes="Kitchen wall tiling begun", weather=sunny, workers=4
- Upload 2 photos
- Add tags: ["tiling", "kitchen"]
- Save
- Navigate to
- Expected: Site log created with all fields, photos stored in S3
- Steps:
- View all site logs for Mumbai Apartment
- Expected: 4+ logs shown in chronological order with photos and tags
- Steps:
- Filter by tag "milestone"
- Expected: Only logs tagged with "milestone" shown (2 logs)
- Steps:
- Navigate to
/project/prj_mumbai_001/change-orders - Click "New Change Order"
- Enter: title="Add under-cabinet lighting", description="LED strip under all upper cabinets"
- Submit
- Navigate to
- Expected: Change order created with status=proposed, AI calculates cost/time impact
- Steps:
- Open change order co_mum_002 (status=proposed)
- Review cost impact (INR 28,000) and time impact (2 days)
- Click "Approve"
- Expected: Status changes to approved, approvedBy and approvedAt set
- Steps:
- Create a test change order
- Click "Reject"
- Expected: Status changes to rejected
- Steps:
- When creating change order, verify AI-generated cost_impact and time_impact_days
- Expected: Reasonable estimates based on project context
- Steps:
- Navigate to
/marketplace/catalogue - Search "sofa"
- Navigate to
- Expected: Products matching "sofa" returned (prod_sofa_001)
- Steps:
- Click "Furniture" category
- Expected: 4 furniture products shown (sofa, coffee table, bookshelf, TV unit)
- Steps:
- Open any product detail page
- Expected: Prices from all vendors shown with valid date ranges
- Steps:
- Open prod_tile_001
- Check specifications
- Expected: Water absorption, scratch resistance, slip resistance shown
- Steps:
- Upload an image of a sofa
- Search visually
- Expected: Products with similar visual embedding returned (CLIP/pgvector)
- Steps:
- Navigate to
/project/prj_mumbai_001/procurement - Click "New Purchase Order"
- Select vendor: Kajaria
- Add items: Quartz Countertop x 5sqm @ 12000/sqm
- Submit
- Navigate to
- Expected: PO created with status=draft, totalAmount calculated
- Steps:
- Open draft PO
- Click "Submit"
- Expected: Status changes to submitted
- Steps:
- Transition PO through: draft → submitted → confirmed → shipped → delivered
- Set actual delivery date when marking delivered
- Expected: Each transition updates status and timestamps correctly
- Steps:
- View procurement page for Mumbai Apartment
- Expected: 3 POs shown (tiles=delivered, hardware=confirmed, lights=draft)
- Steps:
- Navigate to
/project/prj_mumbai_001/deliveries - Click "Track New Delivery"
- Link to PO po_mum_lights_001
- Enter vendor name, description, tracking number
- Navigate to
- Expected: Delivery record created with status=pending
- Steps:
- Transition through: pending → dispatched → in_transit → delivered
- Expected: Status updates correctly, estimated vs actual delivery dates tracked
- Steps:
- After delivery arrives, open inspection
- Check each item (quantity matches, no damage, correct batch)
- Upload inspection photos
- Submit
- Expected: Checklist saved, status changes to inspected or rejected
- Steps:
- View deliveries for Mumbai Apartment
- Expected: 2 deliveries shown with different statuses
- Steps:
- Navigate to
/project/prj_mumbai_001/payments - Click "Pay" on milestone ms_mum_003 (Tiling Complete)
- Select payment provider (Razorpay)
- Complete payment flow
- Navigate to
- Expected: Payment record created, status changes to completed, milestone updated
- Steps:
- View payments page
- Expected: 3 payments shown (2 completed, 1 pending), totals correct
- Steps:
- Verify invoices exist for completed payments
- Download invoice PDF
- Expected: Formatted invoice with correct amounts and dates
- Steps:
- Initiate payment with invalid card/method
- Expected: Payment status=failed, appropriate error message shown
- Steps:
- Navigate to
/marketplace - Filter by city="Mumbai"
- Filter by specialization="carpentry"
- Navigate to
- Expected: Rajesh Carpenter appears in results
- Steps:
- Click on Rajesh Carpenter
- Expected: Profile shows: bio, specializations, 18 years experience, 4.6 rating, certifications, 23 reviews
- Steps:
- Click "Hire" on contractor profile
- Select project: Mumbai Apartment
- Set role=carpenter, dates, agreed amount
- Expected: Contractor assignment created
- Steps:
- After contractor completes work
- Write review: 5 stars, title, text
- Expected: Review published, contractor rating recalculated
- Steps:
- Click "Refer" on contractor profile
- Enter referee email and message
- Expected: Referral created with status=sent
- Steps:
- Toggle "Verified Only" filter
- Expected: Only verified contractors shown (all 3 sample contractors are verified)
- Steps:
- Open design variant dv_mum_liv_modern_001
- Add comment: "Can we add a reading nook by the window?"
- Expected: Comment saved with timestamp, visible to all project participants
- Steps:
- Reply to an existing comment
- Expected: Reply nested under parent comment
- Steps:
- Mark a comment as resolved
- Expected: Comment shows "resolved" badge, filterable
- Steps:
- Navigate to
/project/prj_mumbai_001/collaboration - Create thread: title="Flooring Material Decision", category=design_decision
- Add messages
- Navigate to
- Expected: Thread created, messages with timestamps and user attribution
- Steps:
- In a thread, mark a message as "decision"
- Expected: Message flagged as decision, easily findable in thread
- Steps:
- In a message, type @bob
- Submit
- Expected: Bob receives notification about the mention
- Steps:
- Sign in as Alice
- Click bell icon
- Expected: Notification list shows all notifications, unread highlighted
- Steps:
- Check bell icon badge count
- Should match count of notifications where read=false
- Expected: Badge shows "2" (approval pending + cut list in progress for Alice)
- Steps:
- Click on an unread notification
- Expected: Notification marked as read, badge count decrements
- Steps:
- Click notification with link (e.g., "Design generated" links to design page)
- Expected: Navigates to the linked page
- Steps:
- Keep notification panel open
- In another session, trigger an event (e.g., complete a job)
- Expected: New notification appears in real-time without page refresh
- Steps:
- Navigate to
/project/prj_mumbai_001/quality - Click "New Checkpoint"
- Milestone: waterproofing_complete
- Trade: waterproofing
- Add checklist: ["Membrane covers all wet areas", "48-hour flood test"]
- Save
- Navigate to
- Expected: Checkpoint created with status=pending
- Steps:
- Open pending checkpoint
- Check each item, add notes
- Upload inspection photos
- Mark as "passed" or "failed"
- Expected: Status updated, inspection timestamp recorded
- Steps:
- Click "New Punch List Item"
- Enter: title="Chipped tile in kitchen", severity=minor, category=tiling
- Assign to contractor
- Upload photo
- Expected: Punch list item created with status=open
- Steps:
- Transition through: open → in_progress → resolved → verified
- Expected: Each transition updates timestamps (resolvedAt, verifiedAt)
- Steps:
- Filter punch list by severity: critical, major, minor, observation
- Expected: Only items of selected severity shown
- Steps:
- Navigate to
/project/prj_delhi_003/handover - Click "Generate Handover Package"
- Navigate to
- Expected: Compiles as-built drawings, material register, contractor directory, operational guides, maintenance manual
- Steps:
- View generated handover for Delhi Penthouse (ho_del_001)
- Expected: Shows: 3 drawing files, 3 material register entries, 4 contractors, 4 operational guides
- Steps:
- Click "Client Sign Off"
- Expected: clientSignedAt timestamp set
- Steps:
- After sign-off, click "Mark as Delivered"
- Expected: Status=delivered, deliveredAt set, project can move to completed
- Steps:
- Navigate to
/project/prj_mumbai_001/predictions - Click "Predict Cost"
- Navigate to
- Expected: AI returns: predicted cost, confidence range (low/high), risk factors, cost breakdown by category
- Steps:
- Click "Predict Timeline"
- Expected: Predicted days, confidence range, critical risks with mitigation, phase breakdown
- Steps:
- Check that confidence_low < predicted_cost < confidence_high
- For cpred_mum_001: 720000 < 825000 < 950000
- Expected: Range is mathematically valid
- Steps:
- Review risk factors in prediction
- Expected: Each risk has name, impact amount, and probability (0-1)
- Steps:
- Navigate to
/project/prj_mumbai_001/budget-optimizer - Click "Generate Savings Scenario"
- Navigate to
- Expected: List of substitutions with original item, replacement, savings per item, and reason
- Steps:
- For bs_mum_001: original=825000, optimized=680000, savings=145000 (17.6%)
- Verify sum of individual substitution savings = total savings
- Expected: Math checks out
- Steps:
- Accept economy scenario
- Verify status changes to "accepted"
- Expected: Status updated, BOM optionally recalculated with substitutions
- Steps:
- Navigate to
/project/prj_mumbai_001/sustainability - Click "Generate Report"
- Navigate to
- Expected: Total carbon (kg CO2), material vs transport carbon, sustainability score (0-100), LEED points
- Steps:
- Review green_alternatives in report
- Expected: Each alternative shows: original material, green replacement, carbon saved, cost delta
- Steps:
- Verify material_carbon + transport_carbon = total_carbon
- For sust_mum_001: 2100 + 750 = 2850 kg
- Expected: Math is correct
- Steps:
- Navigate to
/project/prj_mumbai_001/financial-reports - View budget vs actuals chart
- Navigate to
- Expected: Chart shows planned vs actual spend by category
- Steps:
- View expenditure over time
- Expected: Line chart showing cumulative spend over project duration
- Steps:
- View category breakdown
- Expected: Pie chart showing spend by category (materials, labor, appliances, etc.)
- Steps:
- Click "Export CSV"
- Expected: CSV file with all financial data for the project
- Steps:
- Navigate to
/portfolios - Click "New Portfolio"
- Enter: name="My Homes", description="All residential projects"
- Navigate to
- Expected: Portfolio created
- Steps:
- Add Mumbai Apartment and Bangalore Villa to portfolio
- Expected: Both projects linked, sortable order
- Steps:
- Open portfolio port_alice_001
- Expected: Shows 2 projects with status badges, combined stats
- Steps:
- Navigate to
/project/prj_delhi_003/digital-twin
- Navigate to
- Expected: 3D model loads, IoT device markers shown at positioned locations
- Steps:
- Click on temperature sensor
- Expected: Current reading (23.9°C) and historical chart (last 24h readings)
- Steps:
- Click "Add Device"
- Select type=temperature, position in room
- Expected: Device created, appears on twin visualization
- Steps:
- View emergency references panel
- Expected: Lists: water shutoff, gas shutoff, electrical breaker, fire extinguisher with locations
- Steps:
- View energy meter readings
- Expected: Shows cumulative kWh with daily consumption calculated (28.3 - 12.5 = 15.8 kWh/day)
- Steps:
- Navigate to
/project/prj_delhi_003/maintenance
- Navigate to
- Expected: 5 maintenance items shown with next due dates, categories, estimated costs
- Steps:
- Select "AC Service & Filter Clean"
- Click "Log Completion"
- Enter: performedBy="Voltas", cost=2500, notes="Filters cleaned"
- Upload photo
- Expected: Log created, nextDueAt auto-advances by frequency_days (90 days)
- Steps:
- Check for items where nextDueAt < today
- Expected: Overdue items highlighted with warning
- Steps:
- Click "Add Maintenance Item"
- Enter: item="Pest Control", category=exterior, frequency=180 days, cost=3000
- Expected: Item created with next due date calculated
- Steps:
- Navigate to
/project/prj_delhi_003/warranties
- Navigate to
- Expected: 5 warranties shown with item names, brands, start/end dates, types, statuses
- Steps:
- Open Bosch Dishwasher warranty (war_del_001)
- Click "File Claim"
- Enter issue description, upload photos
- Expected: Claim created with status=filed
- Steps:
- Transition claim through: filed → in_review → approved → resolved
- Expected: Status updates, resolution date set when resolved
- Steps:
- Verify warranties with endDate < today show status=expired
- Expected: Expired warranties clearly flagged
- Steps:
- Filter by type: manufacturer, extended, contractor
- Expected: Correct warranties shown per filter
- Steps:
- Navigate to
/marketplace/offcuts - Click "List Material"
- Enter: title="Leftover kitchen tiles", materialType=tile, quantity=2 sqm, condition=new, price=1800 INR
- Upload photos
- Navigate to
- Expected: Listing created with status=active
- Steps:
- Browse offcut listings
- Filter by material type "stone"
- Expected: Nero Marquina marble offcut shown
- Steps:
- Open listing off_001
- Send inquiry message: "Interested in the marble. Can we negotiate?"
- Expected: Inquiry created, seller notified
- Steps:
- Sign in as seller (Bob)
- View inquiry, reply
- Expected: Inquiry status changes to "replied"
- Steps:
- After agreeing on deal, mark listing as "sold"
- Expected: Status=sold, listing no longer appears in active search
- Steps:
- Open a completed project
- Click "Publish to Gallery"
- Enter: title, description, select images, add style tags
- Expected: Gallery entry created with is_public=true
- Steps:
- Navigate to
/marketplace/gallery
- Navigate to
- Expected: Public entries shown with images, styles, like counts
- Steps:
- Click "Like" on a gallery entry
- Expected: Like count increments
- Steps:
- Filter gallery by style="art_deco"
- Expected: Only art deco entries shown (gal_001)
- Steps:
- Navigate to
/developer - Click "Register New App"
- Enter: name, redirect URIs, select scopes
- Navigate to
- Expected: App created with clientId and clientSecret
- Steps:
- Use OAuth flow to generate access token
- Expected: Token issued with selected scopes, expiry date set
- Steps:
- Use access token to call GET /api/v1/projects
- Expected: Returns authorized user's projects
- Steps:
- Send 101+ requests within 1 minute (standard tier limit=100)
- Expected: 429 Too Many Requests returned after limit exceeded
- Steps:
- Create webhook for event "project.created"
- Set target URL and secret
- Create a new project
- Expected: Webhook fires to target URL with signed payload
- Steps:
- Navigate to developer portal
- View request logs for app
- Expected: Shows endpoint, method, status code, response time for each API call
- Steps:
- Sign in as Bob (admin)
- Navigate to
/admin
- Expected: Shows: total users, total projects, active jobs, system health indicators
- Steps:
- Navigate to
/admin/users - View all users
- Navigate to
- Expected: Lists all users with email, role, enabled status, creation date
- Steps:
- Disable Alice's account (enabled=false)
- Try to sign in as Alice
- Expected: Alice cannot sign in while disabled
- Steps:
- Navigate to
/admin/jobs - View all jobs
- Navigate to
- Expected: Shows jobs across all statuses (pending, running, completed, failed, cancelled)
- Steps:
- Filter jobs by status=failed
- Expected: Only failed jobs shown (job_segment_fail_001)
- Steps:
- Click "Retry" on a failed job
- Expected: New job created with same inputs, status=pending
- Steps:
- Navigate to
/admin/system
- Navigate to
- Expected: Shows: DB connection (green/red), storage service, ML services, queue depth
- Steps:
- Navigate to
/dashboard/settings - Change currency from INR to USD
- Save
- Navigate to
- Expected: All prices across the app display in USD with conversion
- Steps:
- Change from metric to imperial
- Expected: Dimensions display in feet/inches instead of millimeters
- Steps:
- Navigate to API Keys section
- Add OpenAI key: label="My OpenAI", key="sk-test123..."
- Expected: Key encrypted (AES-256-GCM), keyPrefix stored (sk-te...), iv and authTag saved
- Steps:
- Delete a stored API key
- Expected: Key record removed, last_used_at and encrypted data gone
- Steps:
- Update name
- Save
- Expected: Name updated across the app (header, comments, etc.)
- Steps:
- Navigate to
/project/prj_mumbai_001/ar - Click "AR Mode" (requires WebXR-compatible browser)
- Navigate to
- Expected: Camera feed with AR furniture placement overlay
- Steps:
- In AR mode, select a furniture item
- Tap on floor surface to place
- Expected: 3D furniture model placed at tapped location in AR space
- Steps:
- Click "VR Mode" (requires VR headset)
- Teleport through room
- Expected: Immersive room walkthrough with teleportation
- Steps:
- Click "Share via QR"
- Expected: QR code generated, scannable by mobile device to open AR view
- Steps:
- Disconnect network
- Try any CRUD operation
- Expected: Graceful error message, no data loss, retry possible when online
- Steps:
- Wait for session to expire (or manually expire it)
- Try an action
- Expected: Redirect to sign-in, return to previous page after re-auth
- Steps:
- Open same project in 2 tabs
- Edit project name in both tabs
- Save both
- Expected: Last write wins or conflict resolution shown
- Steps:
- Trigger a design generation
- Simulate ML service being down
- Expected: Job status shows "failed" with timeout error after threshold
- Steps:
- Enter
<script>alert('xss')</script>in project name - Enter
'; DROP TABLE users; --in search
- Enter
- Expected: Input sanitized, no XSS or SQL injection possible
- Steps:
- While a design job is running for a room
- Upload a new photo to the same room
- Expected: Upload succeeds independently, doesn't interfere with running job
- Steps:
- Start a job for a project
- Try to delete the project while job is running
- Expected: Either: block deletion until job completes, or cancel job and cascade delete
- Steps:
- Create project with no rooms
- Try to access BOM, drawings, timeline pages
- Expected: Helpful empty states ("Add rooms first") instead of blank pages or errors
- Steps:
- View BOM in USD when data was entered in INR
- Verify conversion uses latest exchange rate
- Expected: Amounts correctly converted, source currency noted
- Steps:
- If a page has 100+ items (products, notifications, etc.)
- Verify pagination controls work
- Expected: Data loads in pages, no performance degradation
| Priority | Category | Test IDs |
|---|---|---|
| P0 - Critical | Auth, Project CRUD, Design Generation | TC-AUTH-001 to 006, TC-PROJ-001 to 006, TC-DESIGN-001 |
| P1 - High | Room CRUD, BOM, Drawings, Payments, Uploads | TC-ROOM-001 to 005, TC-BOM-001 to 005, TC-DRAW-001 to 004, TC-PAY-001 to 004, TC-UPLOAD-001 to 005 |
| P2 - Medium | MEP, Scheduling, Procurement, Contractors, Notifications | TC-MEP-001 to 005, TC-SCHED-001 to 004, TC-PO-001 to 004, TC-CONTR-001 to 006, TC-NOTIF-001 to 005 |
| P3 - Normal | QA, Handover, Predictions, Collaboration, Settings | TC-QA-001 to 005, TC-HAND-001 to 004, TC-PRED-001 to 004, TC-COLLAB-001 to 006, TC-SETTINGS-001 to 005 |
| P4 - Low | IoT, Maintenance, Warranty, Offcuts, Gallery, API Portal | TC-IOT-001 to 005, TC-MAINT-001 to 004, TC-WAR-001 to 005, TC-OFFCUT-001 to 005, TC-GALLERY-001 to 004, TC-API-001 to 006 |
Run these after every deploy:
- Sign in with OAuth (Google)
- Create new project
- Add a room with dimensions
- Upload a photo
- Generate a design variant
- View BOM
- Navigate to dashboard — projects listed
- Notifications bell loads
- Admin panel accessible as admin
- Sign out works