65 lines
1.9 KiB
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);
|
|
});
|
|
});
|
|
}
|