mirror of
https://github.com/maziggy/bambuddy.git
synced 2026-10-04 21:21:54 +02:00
e85e5fa33e85da5aee40209c88802795d2e656d2
4
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
3fe49f6af5 |
1. Timelapse Race Condition Fix (bambu_mqtt.py)
Problem: xcam data was parsed BEFORE _was_running was set to True, so timelapse detection failed when both arrived in the same message.
Fix: Added timelapse detection at two critical points:
# Lines 1375-1381: When entering RUNNING state
if self.state.state == "RUNNING" and current_file:
if not self._was_running:
if self.state.timelapse:
self._timelapse_during_print = True
logger.info(f"[{self.serial_number}] Timelapse detected when entering RUNNING state")
# Lines 1391-1399: When print start detected
if self.state.timelapse:
self._timelapse_during_print = True
logger.info(f"[{self.serial_number}] Timelapse detected at print start")
2. Callback Error Handling (main.py + printer_manager.py)
Problem: The on_print_complete callback was hanging silently - no logs after "Found archive".
Fixes:
- Added try/except wrapper around "Update archive status" section (line 749-767)
- Added [CALLBACK] log messages at start and end of callback
- Added exception handler to _schedule_async in printer_manager.py to log any exceptions from async callbacks
3. New Integration Tests (test_bambu_mqtt.py)
Added TestRealisticMessageFlow class with 5 new tests that simulate real MQTT message sequences:
1. test_timelapse_detected_at_print_start_in_same_message - The critical race condition test
2. test_timelapse_not_detected_when_disabled
3. test_timelapse_detected_when_enabled_after_print_start
4. test_print_complete_includes_timelapse_flag_full_flow - Full lifecycle test
5. test_print_failed_includes_timelapse_flag
These tests process messages through _process_message() with proper {"print": {...}} wrapping, matching real MQTT flow.
Files Modified:
- backend/app/services/bambu_mqtt.py - Timelapse race condition fix
- backend/app/main.py - Error handling + logging for on_print_complete
- backend/app/services/printer_manager.py - Exception capture in _schedule_async
- backend/tests/unit/services/test_bambu_mqtt.py - New integration tests
Next Steps
You should restart the application to apply these changes. The next print will show:
- [CALLBACK] on_print_complete started for printer X
- [ARCHIVE] Updating archive X status...
- [ENERGY], [PHOTO], [AUTO-OFF] logs (if those features trigger)
- [CALLBACK] on_print_complete finished for printer X, archive X
|
||
|
|
a14dcbc034 |
Frontend WebSocket Tests Summary
Expanded the useWebSocket.test.ts from minimal coverage to 20 comprehensive tests covering:
WebSocket Mock Tests (6 tests)
- Creates WebSocket with correct URL
- Starts in CONNECTING state
- Transitions to OPEN state
- Can receive messages
- Can close connection
- Tracks all instances
Hook Connection Tests (2 tests)
- Connects to WebSocket on mount
- Reports connected state when WebSocket opens
Message Handling Tests (9 tests)
- Updates printer status in query cache on printer_status message
- Preserves wifi_signal when new value is null
- Invalidates archives on print_complete message
- Invalidates archives on archive_created message
- Invalidates archives on archive_updated message (new handler for timelapse auto-assignment)
- Ignores pong messages without error
- Handles malformed JSON gracefully
- Handles unknown message types gracefully
sendMessage Tests (2 tests)
- Sends JSON message when connected
- Does not send when disconnected
Reconnection Tests (2 tests)
- Reconnects after connection closes
- Cleans up on unmount
Key Fixes
- Fixed MSW (Mock Service Worker) conflict by:
a. Adding addEventListener/removeEventListener to MockWebSocket class
b. Updating MSW setup to bypass WebSocket requests
c. Properly managing WebSocket mock lifecycle in each test
Test Results:
- Frontend: 137 tests passed (9 test files)
- Backend: 346 tests passed
|
||
|
|
f7cde95bbb |
Tests Added Summary:
Backend Tests (New Files)
1. backend/tests/integration/test_camera_api.py - 13 tests
- Camera stop endpoint (GET and POST methods)
- Active stream termination
- Printer-specific stream stopping
- Camera test endpoint
- Camera snapshot endpoint
- Camera stream validation
2. backend/tests/integration/test_system_api.py - 16 tests
- System info endpoint structure
- App, database, storage, memory, CPU sections
- Helper functions (format_bytes, format_uptime)
- Archive statistics
- Printer connection info
3. backend/tests/unit/services/test_telemetry.py - 16 tests
- Installation ID creation/retrieval
- Telemetry enabled/disabled checks
- Telemetry URL configuration
- Heartbeat sending and rate limiting
- Exception handling
4. backend/tests/unit/services/test_notification_service.py (updated) - Added TestNotificationVariableFallbacks class with 9 tests
- Duration formatting with None values
- Print complete fallback values
- Estimated time and remaining time fallbacks
- Filename fallback to "Unknown"
Frontend Tests (New Files)
5. frontend/src/__tests__/pages/SystemInfoPage.test.tsx - 14 tests
- Loading and error states
- Application, database, storage, memory, CPU sections
- Connected printers display
- Disk usage warning/danger colors
- Refresh button
6. frontend/src/__tests__/components/AMSHistoryModal.test.tsx - 21 tests
- Modal open/close behavior
- Humidity/temperature mode switching
- Time range selection
- Statistics cards (current, avg, min, max)
- Loading and error states
- Trend calculation
7. frontend/src/__tests__/components/NotificationProviderCard.test.tsx (updated) - Added NotificationProviderCard AMS toggles describe block with 11 tests
- AMS humidity/temperature notification toggles
- AMS-HT humidity/temperature notification toggles
- Independence of AMS and AMS-HT toggles
- Default values
Total New Tests: ~100 tests covering:
- Camera API endpoints
- System info API
- Anonymous telemetry service
- Notification variable fallbacks
- System Info page UI
- AMS History modal UI
- AMS/AMS-HT notification toggle settings
Tests Added - Complete Summary:
Backend Tests (4 new files, 1 updated)
| File | Tests | Description |
|------------------------------------------------------------|-------|-----------------------------------------------------------------|
| tests/integration/test_camera_api.py | 13 | Camera stop (GET/POST), snapshot, stream, test endpoints |
| tests/integration/test_system_api.py | 16 | System info API, helper functions (format_bytes, format_uptime) |
| tests/unit/services/test_telemetry.py | 16 | Installation ID, telemetry toggle, heartbeat sending |
| tests/unit/services/test_notification_service.py (updated) | +10 | Variable fallbacks for duration, filename, estimated_time |
Frontend Tests (2 new files, 1 updated)
| File | Tests | Description |
|----------------------------------------------------------------------|-------|-------------------------------------------------------|
| src/__tests__/pages/SystemInfoPage.test.tsx | 14 | System info page UI, sections, loading/error states |
| src/__tests__/components/AMSHistoryModal.test.tsx | 21 | AMS history modal, mode switching, time ranges, stats |
| src/__tests__/components/NotificationProviderCard.test.tsx (updated) | +11 | AMS/AMS-HT notification toggle independence |
Total: 101 new tests
- Backend: 335 tests total (all passing)
- Frontend: 124 tests total (all passing)
|
||
|
|
ff53e62ef8 |
Add comprehensive automated testing infrastructure
Backend: - pytest configuration with async support and coverage - Unit tests for notification service (23 tests) - Unit tests for smart plug manager (12 tests) - Unit tests for archive service (16 tests) - Integration tests for API endpoints - Fix: notifications now send immediately (digest is summary only) Frontend: - Vitest configuration with jsdom and coverage - MSW for API mocking - Component tests for Toggle, Button, Card, ConfirmModal (77 tests) - Test utilities with custom render wrapper CI/CD: - GitHub Actions workflow for automated testing - Backend lint, unit tests, integration tests - Frontend lint, type-check, unit tests, build |