Richard Shiue 8bb8131dd4
feat(flutter_desktop): press enter to confirm a dialog (#6675)
* feat: enter to confirm in popup dialog

* test: add test
2024-10-30 23:20:12 +08:00

92 lines
2.5 KiB
Dart

import 'package:appflowy/workspace/presentation/home/menu/sidebar/space/shared_widget.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../../integration_test/shared/util.dart';
import 'test_material_app.dart';
class _ConfirmPopupMock extends Mock {
void confirm();
}
void main() {
setUpAll(() async {
SharedPreferences.setMockInitialValues({});
EasyLocalization.logger.enableLevels = [];
await EasyLocalization.ensureInitialized();
});
Widget buildDialog(VoidCallback onConfirm) {
return Builder(
builder: (context) {
return TextButton(
child: const Text(""),
onPressed: () {
showDialog(
context: context,
builder: (_) {
return Dialog(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12.0),
),
child: ConfirmPopup(
description: "desc",
title: "title",
onConfirm: onConfirm,
),
);
},
);
},
);
},
);
}
testWidgets('confirm dialog shortcut events', (tester) async {
final callback = _ConfirmPopupMock();
// escape
await tester.pumpWidget(
WidgetTestApp(
child: buildDialog(callback.confirm),
),
);
await tester.pumpAndSettle();
await tester.tap(find.byType(TextButton));
await tester.pumpAndSettle();
expect(find.byType(ConfirmPopup), findsOneWidget);
await tester.simulateKeyEvent(LogicalKeyboardKey.escape);
verifyNever(() => callback.confirm());
verifyNever(() => callback.confirm());
expect(find.byType(ConfirmPopup), findsNothing);
// enter
await tester.pumpWidget(
WidgetTestApp(
child: buildDialog(callback.confirm),
),
);
await tester.pumpAndSettle();
await tester.tap(find.byType(TextButton));
await tester.pumpAndSettle();
expect(find.byType(ConfirmPopup), findsOneWidget);
await tester.simulateKeyEvent(LogicalKeyboardKey.enter);
verify(() => callback.confirm()).called(1);
verifyNever(() => callback.confirm());
expect(find.byType(ConfirmPopup), findsNothing);
});
}