Switch ChangeLogScreen from rootBundle to DefaultAssetBundle.of(context) so the asset source can be overridden in widget tests. Add test/widget/changelog_screen_test.dart with a happy-path test (asset loads and content is rendered) and an error-path test (missing asset shows the error message). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
66 lines
1.9 KiB
Dart
66 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter/services.dart';
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:sharedinbox/ui/screens/changelog_screen.dart';
|
|
|
|
class _FakeAssetBundle extends Fake implements AssetBundle {
|
|
final String content;
|
|
_FakeAssetBundle(this.content);
|
|
|
|
@override
|
|
Future<String> loadString(String key, {bool cache = true}) async {
|
|
if (key == 'assets/changelog.txt') return content;
|
|
throw FlutterError('Asset not found: $key');
|
|
}
|
|
|
|
@override
|
|
Future<ByteData> load(String key) async {
|
|
throw FlutterError('Asset not found: $key');
|
|
}
|
|
}
|
|
|
|
void main() {
|
|
testWidgets('ChangeLogScreen renders changelog content', (tester) async {
|
|
const fakeChangelog =
|
|
'* 2026-01-01: Initial release\n* 2026-01-02: Bug fix';
|
|
|
|
await tester.pumpWidget(
|
|
DefaultAssetBundle(
|
|
bundle: _FakeAssetBundle(fakeChangelog),
|
|
child: const MaterialApp(home: ChangeLogScreen()),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.text('ChangeLog'), findsOneWidget);
|
|
expect(find.textContaining('2026-01-01'), findsOneWidget);
|
|
expect(find.textContaining('Initial release'), findsOneWidget);
|
|
});
|
|
|
|
testWidgets('ChangeLogScreen shows error when asset is missing', (
|
|
tester,
|
|
) async {
|
|
await tester.pumpWidget(
|
|
DefaultAssetBundle(
|
|
bundle: _BadAssetBundle(),
|
|
child: const MaterialApp(home: ChangeLogScreen()),
|
|
),
|
|
);
|
|
await tester.pumpAndSettle();
|
|
|
|
expect(find.textContaining('Error loading changelog:'), findsOneWidget);
|
|
});
|
|
}
|
|
|
|
class _BadAssetBundle extends Fake implements AssetBundle {
|
|
@override
|
|
Future<String> loadString(String key, {bool cache = true}) async {
|
|
throw FlutterError('Unable to load asset: "$key"');
|
|
}
|
|
|
|
@override
|
|
Future<ByteData> load(String key) async {
|
|
throw FlutterError('Unable to load asset: "$key"');
|
|
}
|
|
}
|