import 'package:flutter_test/flutter_test.dart'; import 'package:drift/native.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:motorcycle_dash/database/database.dart' hide TelemetrySample; import 'package:motorcycle_dash/models/field_test_event.dart'; import 'package:motorcycle_dash/services/field_test/field_test_logger.dart'; void main() { TestWidgetsFlutterBinding.ensureInitialized(); late AppDatabase db; late FieldTestLogger logger; setUp(() async { SharedPreferences.setMockInitialValues({}); db = AppDatabase.forTesting(NativeDatabase.memory()); logger = FieldTestLogger(db); }); tearDown(() async { logger.dispose(); await db.close(); }); group('Field Test Logger API Tests', () { test('Session lifecycle starts and stops cleanly', () async { logger.startSession(10); expect(logger.isSessionActive, isTrue); expect(logger.activeRideId, 10); expect(logger.timelineEvents.any((e) => e.eventType == FieldTestEventType.rideStarted), isTrue); final summary = await logger.stopSession(); expect(logger.isSessionActive, isFalse); expect(summary.rideId, 10); }); test('Queue drops lowest-priority events when buffer capacity is reached', () { logger.startSession(11); // Fill queue with 1,000 info events for (int i = 0; i < 1005; i++) { logger.log( eventType: FieldTestEventType.databaseFlush, severity: EventSeverity.info, message: 'Flush event $i', rideId: 11, ); } // Add a critical event logger.log( eventType: FieldTestEventType.databaseRecovery, severity: EventSeverity.critical, message: 'Critical DB Recovery', rideId: 11, ); expect(logger.droppedEventsCount, greaterThanOrEqualTo(5)); expect(logger.timelineEvents.any((e) => e.severity == EventSeverity.critical), isTrue); }); }); }