MotorSignal-App/test/field_test_logger_test.dart

65 lines
1.9 KiB
Dart

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);
});
});
}