|
@@ -1,10 +1,14 @@
|
|
import 'dart:ui';
|
|
import 'dart:ui';
|
|
|
|
+import 'package:appflowy/workspace/presentation/home/menu/sidebar/sidebar_new_page_button.dart';
|
|
|
|
+import 'package:appflowy/workspace/presentation/home/menu/view/draggable_view_item.dart';
|
|
|
|
+import 'package:appflowy/workspace/presentation/home/menu/view/view_action_type.dart';
|
|
|
|
+import 'package:appflowy/workspace/presentation/home/menu/view/view_add_button.dart';
|
|
|
|
+import 'package:appflowy/workspace/presentation/home/menu/view/view_more_action_button.dart';
|
|
import 'package:appflowy_backend/log.dart';
|
|
import 'package:appflowy_backend/log.dart';
|
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
|
|
|
|
|
import 'package:appflowy/plugins/document/presentation/share/share_button.dart';
|
|
import 'package:appflowy/plugins/document/presentation/share/share_button.dart';
|
|
import 'package:appflowy/user/presentation/skip_log_in_screen.dart';
|
|
import 'package:appflowy/user/presentation/skip_log_in_screen.dart';
|
|
-import 'package:appflowy/workspace/presentation/home/menu/app/header/add_button.dart';
|
|
|
|
import 'package:appflowy/workspace/presentation/home/menu/app/section/item.dart';
|
|
import 'package:appflowy/workspace/presentation/home/menu/app/section/item.dart';
|
|
import 'package:appflowy/workspace/presentation/settings/widgets/settings_language_view.dart';
|
|
import 'package:appflowy/workspace/presentation/settings/widgets/settings_language_view.dart';
|
|
import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
|
|
import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
|
|
@@ -24,35 +28,48 @@ extension CommonOperations on WidgetTester {
|
|
}
|
|
}
|
|
|
|
|
|
/// Tap the + button on the home page.
|
|
/// Tap the + button on the home page.
|
|
- Future<void> tapAddButton() async {
|
|
|
|
- final addButton = find.byType(AddButton);
|
|
|
|
- await tapButton(addButton);
|
|
|
|
|
|
+ Future<void> tapAddViewButton({
|
|
|
|
+ String name = gettingStated,
|
|
|
|
+ }) async {
|
|
|
|
+ await hoverOnPageName(
|
|
|
|
+ name,
|
|
|
|
+ onHover: () async {
|
|
|
|
+ final addButton = find.byType(ViewAddButton);
|
|
|
|
+ await tapButton(addButton);
|
|
|
|
+ },
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// Tap the 'New Page' Button on the sidebar.
|
|
|
|
+ Future<void> tapNewPageButton() async {
|
|
|
|
+ final newPageButton = find.byType(SidebarNewPageButton);
|
|
|
|
+ await tapButton(newPageButton);
|
|
}
|
|
}
|
|
|
|
|
|
/// Tap the create document button.
|
|
/// Tap the create document button.
|
|
///
|
|
///
|
|
- /// Must call [tapAddButton] first.
|
|
|
|
|
|
+ /// Must call [tapAddViewButton] first.
|
|
Future<void> tapCreateDocumentButton() async {
|
|
Future<void> tapCreateDocumentButton() async {
|
|
await tapButtonWithName(LocaleKeys.document_menuName.tr());
|
|
await tapButtonWithName(LocaleKeys.document_menuName.tr());
|
|
}
|
|
}
|
|
|
|
|
|
/// Tap the create grid button.
|
|
/// Tap the create grid button.
|
|
///
|
|
///
|
|
- /// Must call [tapAddButton] first.
|
|
|
|
|
|
+ /// Must call [tapAddViewButton] first.
|
|
Future<void> tapCreateGridButton() async {
|
|
Future<void> tapCreateGridButton() async {
|
|
await tapButtonWithName(LocaleKeys.grid_menuName.tr());
|
|
await tapButtonWithName(LocaleKeys.grid_menuName.tr());
|
|
}
|
|
}
|
|
|
|
|
|
/// Tap the create grid button.
|
|
/// Tap the create grid button.
|
|
///
|
|
///
|
|
- /// Must call [tapAddButton] first.
|
|
|
|
|
|
+ /// Must call [tapAddViewButton] first.
|
|
Future<void> tapCreateCalendarButton() async {
|
|
Future<void> tapCreateCalendarButton() async {
|
|
await tapButtonWithName(LocaleKeys.calendar_menuName.tr());
|
|
await tapButtonWithName(LocaleKeys.calendar_menuName.tr());
|
|
}
|
|
}
|
|
|
|
|
|
/// Tap the import button.
|
|
/// Tap the import button.
|
|
///
|
|
///
|
|
- /// Must call [tapAddButton] first.
|
|
|
|
|
|
+ /// Must call [tapAddViewButton] first.
|
|
Future<void> tapImportButton() async {
|
|
Future<void> tapImportButton() async {
|
|
await tapButtonWithName(LocaleKeys.moreAction_import.tr());
|
|
await tapButtonWithName(LocaleKeys.moreAction_import.tr());
|
|
}
|
|
}
|
|
@@ -116,6 +133,7 @@ extension CommonOperations on WidgetTester {
|
|
Finder finder, {
|
|
Finder finder, {
|
|
Offset? offset,
|
|
Offset? offset,
|
|
Future<void> Function()? onHover,
|
|
Future<void> Function()? onHover,
|
|
|
|
+ bool removePointer = true,
|
|
}) async {
|
|
}) async {
|
|
try {
|
|
try {
|
|
final gesture = await createGesture(kind: PointerDeviceKind.mouse);
|
|
final gesture = await createGesture(kind: PointerDeviceKind.mouse);
|
|
@@ -133,19 +151,30 @@ extension CommonOperations on WidgetTester {
|
|
/// Hover on the page name.
|
|
/// Hover on the page name.
|
|
Future<void> hoverOnPageName(
|
|
Future<void> hoverOnPageName(
|
|
String name, {
|
|
String name, {
|
|
|
|
+ ViewLayoutPB layout = ViewLayoutPB.Document,
|
|
Future<void> Function()? onHover,
|
|
Future<void> Function()? onHover,
|
|
bool useLast = true,
|
|
bool useLast = true,
|
|
}) async {
|
|
}) async {
|
|
|
|
+ final pageNames = findPageName(name, layout: layout);
|
|
if (useLast) {
|
|
if (useLast) {
|
|
- await hoverOnWidget(findPageName(name).last, onHover: onHover);
|
|
|
|
|
|
+ await hoverOnWidget(
|
|
|
|
+ pageNames.last,
|
|
|
|
+ onHover: onHover,
|
|
|
|
+ );
|
|
} else {
|
|
} else {
|
|
- await hoverOnWidget(findPageName(name).first, onHover: onHover);
|
|
|
|
|
|
+ await hoverOnWidget(
|
|
|
|
+ pageNames.first,
|
|
|
|
+ onHover: onHover,
|
|
|
|
+ );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/// open the page with given name.
|
|
/// open the page with given name.
|
|
- Future<void> openPage(String name) async {
|
|
|
|
- final finder = findPageName(name);
|
|
|
|
|
|
+ Future<void> openPage(
|
|
|
|
+ String name, {
|
|
|
|
+ ViewLayoutPB layout = ViewLayoutPB.Document,
|
|
|
|
+ }) async {
|
|
|
|
+ final finder = findPageName(name, layout: layout);
|
|
expect(finder, findsOneWidget);
|
|
expect(finder, findsOneWidget);
|
|
await tapButton(finder);
|
|
await tapButton(finder);
|
|
}
|
|
}
|
|
@@ -154,20 +183,20 @@ extension CommonOperations on WidgetTester {
|
|
///
|
|
///
|
|
/// Must call [hoverOnPageName] first.
|
|
/// Must call [hoverOnPageName] first.
|
|
Future<void> tapPageOptionButton() async {
|
|
Future<void> tapPageOptionButton() async {
|
|
- final optionButton = find.byType(ViewDisclosureButton);
|
|
|
|
|
|
+ final optionButton = find.byType(ViewMoreActionButton);
|
|
await tapButton(optionButton);
|
|
await tapButton(optionButton);
|
|
}
|
|
}
|
|
|
|
|
|
/// Tap the delete page button.
|
|
/// Tap the delete page button.
|
|
Future<void> tapDeletePageButton() async {
|
|
Future<void> tapDeletePageButton() async {
|
|
await tapPageOptionButton();
|
|
await tapPageOptionButton();
|
|
- await tapButtonWithName(ViewDisclosureAction.delete.name);
|
|
|
|
|
|
+ await tapButtonWithName(ViewMoreActionType.delete.name);
|
|
}
|
|
}
|
|
|
|
|
|
/// Tap the rename page button.
|
|
/// Tap the rename page button.
|
|
Future<void> tapRenamePageButton() async {
|
|
Future<void> tapRenamePageButton() async {
|
|
await tapPageOptionButton();
|
|
await tapPageOptionButton();
|
|
- await tapButtonWithName(ViewDisclosureAction.rename.name);
|
|
|
|
|
|
+ await tapButtonWithName(ViewMoreActionType.rename.name);
|
|
}
|
|
}
|
|
|
|
|
|
/// Rename the page.
|
|
/// Rename the page.
|
|
@@ -224,12 +253,14 @@ extension CommonOperations on WidgetTester {
|
|
await tapButton(markdownButton);
|
|
await tapButton(markdownButton);
|
|
}
|
|
}
|
|
|
|
|
|
- Future<void> createNewPageWithName(
|
|
|
|
- ViewLayoutPB layout, [
|
|
|
|
|
|
+ Future<void> createNewPageWithName({
|
|
String? name,
|
|
String? name,
|
|
- ]) async {
|
|
|
|
|
|
+ ViewLayoutPB layout = ViewLayoutPB.Document,
|
|
|
|
+ String? parentName,
|
|
|
|
+ bool openAfterCreated = true,
|
|
|
|
+ }) async {
|
|
// create a new page
|
|
// create a new page
|
|
- await tapAddButton();
|
|
|
|
|
|
+ await tapAddViewButton(name: parentName ?? gettingStated);
|
|
await tapButtonWithName(layout.menuName);
|
|
await tapButtonWithName(layout.menuName);
|
|
await pumpAndSettle();
|
|
await pumpAndSettle();
|
|
|
|
|
|
@@ -237,6 +268,7 @@ extension CommonOperations on WidgetTester {
|
|
if (name != null) {
|
|
if (name != null) {
|
|
await hoverOnPageName(
|
|
await hoverOnPageName(
|
|
LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
|
|
LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
|
|
|
|
+ layout: layout,
|
|
onHover: () async {
|
|
onHover: () async {
|
|
await renamePage(name);
|
|
await renamePage(name);
|
|
await pumpAndSettle();
|
|
await pumpAndSettle();
|
|
@@ -244,6 +276,16 @@ extension CommonOperations on WidgetTester {
|
|
);
|
|
);
|
|
await pumpAndSettle();
|
|
await pumpAndSettle();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ // open the page after created
|
|
|
|
+ if (openAfterCreated) {
|
|
|
|
+ await openPage(
|
|
|
|
+ // if the name is null, use the default name
|
|
|
|
+ name ?? LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
|
|
|
|
+ layout: layout,
|
|
|
|
+ );
|
|
|
|
+ await pumpAndSettle();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
Future<void> simulateKeyEvent(
|
|
Future<void> simulateKeyEvent(
|
|
@@ -289,6 +331,34 @@ extension CommonOperations on WidgetTester {
|
|
await tap(find.text(LocaleKeys.disclosureAction_openNewTab.tr()));
|
|
await tap(find.text(LocaleKeys.disclosureAction_openNewTab.tr()));
|
|
await pumpAndSettle();
|
|
await pumpAndSettle();
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ Future<void> movePageToOtherPage({
|
|
|
|
+ required String name,
|
|
|
|
+ required String parentName,
|
|
|
|
+ required ViewLayoutPB layout,
|
|
|
|
+ required ViewLayoutPB parentLayout,
|
|
|
|
+ DraggableHoverPosition position = DraggableHoverPosition.center,
|
|
|
|
+ }) async {
|
|
|
|
+ final from = findPageName(name, layout: layout);
|
|
|
|
+ final to = findPageName(parentName, layout: parentLayout);
|
|
|
|
+ final gesture = await startGesture(getCenter(from));
|
|
|
|
+ Offset offset = Offset.zero;
|
|
|
|
+ switch (position) {
|
|
|
|
+ case DraggableHoverPosition.center:
|
|
|
|
+ offset = getCenter(to);
|
|
|
|
+ break;
|
|
|
|
+ case DraggableHoverPosition.top:
|
|
|
|
+ offset = getTopLeft(to);
|
|
|
|
+ break;
|
|
|
|
+ case DraggableHoverPosition.bottom:
|
|
|
|
+ offset = getBottomLeft(to);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ }
|
|
|
|
+ await gesture.moveTo(offset);
|
|
|
|
+ await gesture.up();
|
|
|
|
+ await pumpAndSettle();
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
extension ViewLayoutPBTest on ViewLayoutPB {
|
|
extension ViewLayoutPBTest on ViewLayoutPB {
|