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