m3_lightmeter/integration_test/utils/widget_tester_actions.dart

80 lines
2.8 KiB
Dart
Raw Normal View History

2023-10-14 18:56:44 +00:00
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:lightmeter/application.dart';
import 'package:lightmeter/application_wrapper.dart';
import 'package:lightmeter/environment.dart';
2023-10-14 18:56:44 +00:00
import 'package:lightmeter/generated/l10n.dart';
2023-10-14 19:24:11 +00:00
import 'package:lightmeter/res/dimens.dart';
2023-10-14 18:56:44 +00:00
import 'package:lightmeter/screens/metering/components/bottom_controls/components/measure_button/widget_button_measure.dart';
import 'package:m3_lightmeter_iap/m3_lightmeter_iap.dart';
import 'package:m3_lightmeter_resources/m3_lightmeter_resources.dart';
2023-10-14 18:56:44 +00:00
import '../mocks/paid_features_mock.dart';
2023-10-17 15:01:11 +00:00
import 'platform_channel_mock.dart';
2023-10-14 18:56:44 +00:00
extension WidgetTesterCommonActions on WidgetTester {
Future<void> pumpApplication({
IAPProductStatus productStatus = IAPProductStatus.purchased,
String selectedEquipmentProfileId = '',
Film selectedFilm = const Film.other(),
}) async {
await pumpWidget(
MockIAPProductsProvider(
productStatus: productStatus,
child: ApplicationWrapper(
const Environment.dev(),
child: MockIAPProviders(
selectedEquipmentProfileId: selectedEquipmentProfileId,
selectedFilm: selectedFilm,
child: const Application(),
),
),
),
2023-10-14 18:56:44 +00:00
);
await pumpAndSettle();
}
2023-10-17 15:01:11 +00:00
Future<void> takePhoto() async {
2023-10-14 18:56:44 +00:00
await tap(find.byType(MeteringMeasureButton));
2023-10-17 15:01:11 +00:00
await pump(const Duration(seconds: 2)); // wait for circular progress indicator
await pump(const Duration(seconds: 1)); // wait for circular progress indicator
await pumpAndSettle();
}
Future<void> toggleIncidentMetering(double ev) async {
await tap(find.byType(MeteringMeasureButton));
await sendMockIncidentEv(ev);
2023-10-14 18:56:44 +00:00
await tap(find.byType(MeteringMeasureButton));
await pumpAndSettle();
}
2023-10-14 19:24:11 +00:00
Future<void> openAnimatedPicker<T>() async {
await tap(find.byType(T));
await pumpAndSettle(Dimens.durationL);
}
2023-10-14 18:56:44 +00:00
}
2023-10-17 15:39:11 +00:00
extension WidgetTesterListTileActions on WidgetTester {
/// Useful for tapping a specific [ListTile] inside a specific screen or dialog
Future<void> tapDescendantTextOf<T>(String text) async {
await tap(find.descendant(of: find.byType(T), matching: find.text(text)));
}
}
extension WidgetTesterTextButtonActions on WidgetTester {
Future<void> tapSelectButton() => _tapTextButton(S.current.select);
Future<void> tapCancelButton() => _tapTextButton(S.current.cancel);
Future<void> tapSaveButton() => _tapTextButton(S.current.save);
Future<void> _tapTextButton(String text) async {
final button = find.byWidgetPredicate(
(widget) => widget is TextButton && widget.child is Text && (widget.child as Text?)?.data == text,
);
expect(button, findsOneWidget);
await tap(button);
await pumpAndSettle();
}
}