MotorSignal-App/test/sync_status_inspector_layou...

55 lines
2.6 KiB
Dart

import 'package:drift/native.dart';
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:motorcycle_dash/database/database.dart';
import 'package:motorcycle_dash/features/settings/widgets/sync_status_inspector_screen.dart';
import 'package:motorcycle_dash/services/auth/auth_service.dart';
import 'package:motorcycle_dash/services/sync/cloud_restore_controller.dart';
import 'package:motorcycle_dash/services/sync/cloud_restore_service.dart';
import 'package:motorcycle_dash/services/sync/sync_manager.dart';
import 'package:motorcycle_dash/services/sync/sync_outbox.dart';
import 'package:motorcycle_dash/services/sync/sync_providers.dart';
import 'package:shared_preferences/shared_preferences.dart';
class _NoNetworkAuth implements AuthService {
@override
dynamic noSuchMethod(Invocation invocation) =>
throw StateError('Unexpected authentication call: ${invocation.memberName}');
}
void main() {
for (final size in [const Size(360, 800), const Size(412, 915), const Size(915, 412)]) {
testWidgets('long cloud ID stays within inspector at $size', (tester) async {
tester.view.physicalSize = size;
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
SharedPreferences.setMockInitialValues({});
final outbox = SyncOutbox(await SharedPreferences.getInstance());
const cloudId = 'ride_0123456789abcdef0123456789abcdef';
final item = await outbox.enqueue(9, 'firebase');
await outbox.update(item.copyWith(remoteId: cloudId));
final db = AppDatabase.forTesting(NativeDatabase.memory());
addTearDown(db.close);
final auth = _NoNetworkAuth();
await tester.pumpWidget(ProviderScope(overrides: [
databaseProvider.overrideWithValue(db),
syncOutboxProvider.overrideWithValue(outbox),
syncManagerProvider.overrideWith((ref) => SyncManager(outbox)),
cloudRestoreControllerProvider.overrideWith((ref) => CloudRestoreController(
restoreService: CloudRestoreService(db: db, authService: auth),
authService: auth,
)),
], child: const MaterialApp(home: SyncStatusInspectorScreen())));
await tester.pumpAndSettle();
await tester.ensureVisible(find.text(cloudId));
expect(tester.takeException(), isNull);
final bounds = tester.getRect(find.text(cloudId));
expect(bounds.right, lessThanOrEqualTo(size.width));
expect(find.text('Cloud Ride ID'), findsOneWidget);
await tester.pumpWidget(const SizedBox.shrink());
});
}
}