| 
									
										
										
										
											2023-09-14 19:22:32 +08:00
										 |  |  | import 'package:appflowy/generated/locale_keys.g.dart'; | 
					
						
							| 
									
										
										
										
											2024-01-05 17:30:54 +08:00
										 |  |  | import 'package:appflowy/plugins/database/board/presentation/board_page.dart'; | 
					
						
							|  |  |  | import 'package:appflowy/plugins/database/calendar/presentation/calendar_page.dart'; | 
					
						
							|  |  |  | import 'package:appflowy/plugins/database/grid/presentation/grid_page.dart'; | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  | import 'package:appflowy/workspace/presentation/home/menu/view/draggable_view_item.dart'; | 
					
						
							| 
									
										
										
										
											2023-08-03 14:06:02 +07:00
										 |  |  | import 'package:appflowy/workspace/presentation/home/menu/view/view_add_button.dart'; | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  | import 'package:appflowy/workspace/presentation/home/menu/view/view_item.dart'; | 
					
						
							| 
									
										
										
										
											2023-08-03 14:06:02 +07:00
										 |  |  | import 'package:appflowy/workspace/presentation/home/menu/view/view_more_action_button.dart'; | 
					
						
							| 
									
										
										
										
											2023-12-31 07:29:40 +08:00
										 |  |  | import 'package:appflowy_backend/protobuf/flowy-folder/view.pb.dart'; | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  | import 'package:appflowy_editor/appflowy_editor.dart'; | 
					
						
							| 
									
										
										
										
											2023-09-14 19:22:32 +08:00
										 |  |  | import 'package:easy_localization/easy_localization.dart'; | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  | import 'package:flutter_test/flutter_test.dart'; | 
					
						
							|  |  |  | import 'package:integration_test/integration_test.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import '../util/util.dart'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void main() { | 
					
						
							|  |  |  |   IntegrationTestWidgetsFlutterBinding.ensureInitialized(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   group('sidebar test', () { | 
					
						
							|  |  |  |     testWidgets('create a new page', (tester) async { | 
					
						
							|  |  |  |       await tester.initializeAppFlowy(); | 
					
						
							|  |  |  |       await tester.tapGoButton(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // create a new page
 | 
					
						
							|  |  |  |       await tester.tapNewPageButton(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // expect to see a new document
 | 
					
						
							|  |  |  |       tester.expectToSeePageName( | 
					
						
							| 
									
										
										
										
											2023-09-14 19:22:32 +08:00
										 |  |  |         LocaleKeys.menuAppHeader_defaultNewPageName.tr(), | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |       ); | 
					
						
							|  |  |  |       // and with one paragraph block
 | 
					
						
							| 
									
										
										
										
											2023-10-11 23:12:23 +08:00
										 |  |  |       expect(find.byType(ParagraphBlockComponentWidget), findsOneWidget); | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     testWidgets('create a new document, grid, board and calendar', | 
					
						
							|  |  |  |         (tester) async { | 
					
						
							|  |  |  |       await tester.initializeAppFlowy(); | 
					
						
							|  |  |  |       await tester.tapGoButton(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       for (final layout in ViewLayoutPB.values) { | 
					
						
							|  |  |  |         // create a new page
 | 
					
						
							|  |  |  |         final name = 'AppFlowy_$layout'; | 
					
						
							| 
									
										
										
										
											2023-12-27 11:42:39 +08:00
										 |  |  |         await tester.createNewPageWithNameUnderParent( | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |           name: name, | 
					
						
							|  |  |  |           layout: layout, | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // expect to see a new page
 | 
					
						
							|  |  |  |         tester.expectToSeePageName( | 
					
						
							|  |  |  |           name, | 
					
						
							|  |  |  |           layout: layout, | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         switch (layout) { | 
					
						
							|  |  |  |           case ViewLayoutPB.Document: | 
					
						
							|  |  |  |             // and with one paragraph block
 | 
					
						
							| 
									
										
										
										
											2023-10-11 23:12:23 +08:00
										 |  |  |             expect(find.byType(ParagraphBlockComponentWidget), findsOneWidget); | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |             break; | 
					
						
							|  |  |  |           case ViewLayoutPB.Grid: | 
					
						
							|  |  |  |             expect(find.byType(GridPage), findsOneWidget); | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |           case ViewLayoutPB.Board: | 
					
						
							|  |  |  |             expect(find.byType(BoardPage), findsOneWidget); | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |           case ViewLayoutPB.Calendar: | 
					
						
							|  |  |  |             expect(find.byType(CalendarPage), findsOneWidget); | 
					
						
							|  |  |  |             break; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-08-08 07:09:17 +02:00
										 |  |  |         await tester.openPage(gettingStarted); | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |       } | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     testWidgets('create some nested pages, and move them', (tester) async { | 
					
						
							|  |  |  |       await tester.initializeAppFlowy(); | 
					
						
							|  |  |  |       await tester.tapGoButton(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       final names = [1, 2, 3, 4].map((e) => 'document_$e').toList(); | 
					
						
							|  |  |  |       for (var i = 0; i < names.length; i++) { | 
					
						
							| 
									
										
										
										
											2023-08-08 07:09:17 +02:00
										 |  |  |         final parentName = i == 0 ? gettingStarted : names[i - 1]; | 
					
						
							| 
									
										
										
										
											2023-12-27 11:42:39 +08:00
										 |  |  |         await tester.createNewPageWithNameUnderParent( | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |           name: names[i], | 
					
						
							|  |  |  |           parentName: parentName, | 
					
						
							|  |  |  |           layout: ViewLayoutPB.Document, | 
					
						
							|  |  |  |         ); | 
					
						
							|  |  |  |         tester.expectToSeePageName(names[i], parentName: parentName); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // move the document_3 to the getting started page
 | 
					
						
							|  |  |  |       await tester.movePageToOtherPage( | 
					
						
							|  |  |  |         name: names[3], | 
					
						
							| 
									
										
										
										
											2023-08-08 07:09:17 +02:00
										 |  |  |         parentName: gettingStarted, | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |         layout: ViewLayoutPB.Document, | 
					
						
							|  |  |  |         parentLayout: ViewLayoutPB.Document, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       final fromId = tester | 
					
						
							|  |  |  |           .widget<SingleInnerViewItem>(tester.findPageName(names[3])) | 
					
						
							|  |  |  |           .view | 
					
						
							|  |  |  |           .parentViewId; | 
					
						
							|  |  |  |       final toId = tester | 
					
						
							| 
									
										
										
										
											2023-08-08 07:09:17 +02:00
										 |  |  |           .widget<SingleInnerViewItem>(tester.findPageName(gettingStarted)) | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |           .view | 
					
						
							|  |  |  |           .id; | 
					
						
							|  |  |  |       expect(fromId, toId); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // move the document_2 before document_1
 | 
					
						
							|  |  |  |       await tester.movePageToOtherPage( | 
					
						
							|  |  |  |         name: names[2], | 
					
						
							| 
									
										
										
										
											2023-08-08 07:09:17 +02:00
										 |  |  |         parentName: gettingStarted, | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |         layout: ViewLayoutPB.Document, | 
					
						
							|  |  |  |         parentLayout: ViewLayoutPB.Document, | 
					
						
							|  |  |  |         position: DraggableHoverPosition.bottom, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       final childViews = tester | 
					
						
							| 
									
										
										
										
											2023-08-08 07:09:17 +02:00
										 |  |  |           .widget<SingleInnerViewItem>(tester.findPageName(gettingStarted)) | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |           .view | 
					
						
							|  |  |  |           .childViews; | 
					
						
							|  |  |  |       expect( | 
					
						
							|  |  |  |         childViews[0].id, | 
					
						
							|  |  |  |         tester | 
					
						
							|  |  |  |             .widget<SingleInnerViewItem>(tester.findPageName(names[2])) | 
					
						
							|  |  |  |             .view | 
					
						
							|  |  |  |             .id, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect( | 
					
						
							|  |  |  |         childViews[1].id, | 
					
						
							|  |  |  |         tester | 
					
						
							|  |  |  |             .widget<SingleInnerViewItem>(tester.findPageName(names[0])) | 
					
						
							|  |  |  |             .view | 
					
						
							|  |  |  |             .id, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect( | 
					
						
							|  |  |  |         childViews[2].id, | 
					
						
							|  |  |  |         tester | 
					
						
							|  |  |  |             .widget<SingleInnerViewItem>(tester.findPageName(names[3])) | 
					
						
							|  |  |  |             .view | 
					
						
							|  |  |  |             .id, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2023-08-03 14:06:02 +07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     testWidgets('unable to move a document into a database', (tester) async { | 
					
						
							|  |  |  |       await tester.initializeAppFlowy(); | 
					
						
							|  |  |  |       await tester.tapGoButton(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const document = 'document'; | 
					
						
							| 
									
										
										
										
											2023-12-27 11:42:39 +08:00
										 |  |  |       await tester.createNewPageWithNameUnderParent( | 
					
						
							| 
									
										
										
										
											2023-08-03 14:06:02 +07:00
										 |  |  |         name: document, | 
					
						
							|  |  |  |         openAfterCreated: false, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       tester.expectToSeePageName(document, layout: ViewLayoutPB.Document); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const grid = 'grid'; | 
					
						
							| 
									
										
										
										
											2023-12-27 11:42:39 +08:00
										 |  |  |       await tester.createNewPageWithNameUnderParent( | 
					
						
							| 
									
										
										
										
											2023-08-03 14:06:02 +07:00
										 |  |  |         name: grid, | 
					
						
							|  |  |  |         layout: ViewLayoutPB.Grid, | 
					
						
							|  |  |  |         openAfterCreated: false, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       tester.expectToSeePageName(grid, layout: ViewLayoutPB.Grid); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // move the document to the grid page
 | 
					
						
							|  |  |  |       await tester.movePageToOtherPage( | 
					
						
							|  |  |  |         name: document, | 
					
						
							|  |  |  |         parentName: grid, | 
					
						
							|  |  |  |         layout: ViewLayoutPB.Document, | 
					
						
							|  |  |  |         parentLayout: ViewLayoutPB.Grid, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // it should not be moved
 | 
					
						
							|  |  |  |       final childViews = tester | 
					
						
							| 
									
										
										
										
											2023-08-08 07:09:17 +02:00
										 |  |  |           .widget<SingleInnerViewItem>(tester.findPageName(gettingStarted)) | 
					
						
							| 
									
										
										
										
											2023-08-03 14:06:02 +07:00
										 |  |  |           .view | 
					
						
							|  |  |  |           .childViews; | 
					
						
							|  |  |  |       expect( | 
					
						
							|  |  |  |         childViews[0].name, | 
					
						
							|  |  |  |         document, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       expect( | 
					
						
							|  |  |  |         childViews[1].name, | 
					
						
							|  |  |  |         grid, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     testWidgets('unable to create a new database inside the existing one', | 
					
						
							|  |  |  |         (tester) async { | 
					
						
							|  |  |  |       await tester.initializeAppFlowy(); | 
					
						
							|  |  |  |       await tester.tapGoButton(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       const grid = 'grid'; | 
					
						
							| 
									
										
										
										
											2023-12-27 11:42:39 +08:00
										 |  |  |       await tester.createNewPageWithNameUnderParent( | 
					
						
							| 
									
										
										
										
											2023-08-03 14:06:02 +07:00
										 |  |  |         name: grid, | 
					
						
							|  |  |  |         layout: ViewLayoutPB.Grid, | 
					
						
							|  |  |  |         openAfterCreated: true, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |       tester.expectToSeePageName(grid, layout: ViewLayoutPB.Grid); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       await tester.hoverOnPageName( | 
					
						
							|  |  |  |         grid, | 
					
						
							|  |  |  |         layout: ViewLayoutPB.Grid, | 
					
						
							|  |  |  |         onHover: () async { | 
					
						
							|  |  |  |           expect(find.byType(ViewAddButton), findsNothing); | 
					
						
							|  |  |  |           expect(find.byType(ViewMoreActionButton), findsOneWidget); | 
					
						
							|  |  |  |         }, | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2023-07-31 19:06:01 +07:00
										 |  |  |   }); | 
					
						
							|  |  |  | } |