sidebar_test.dart 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. import 'package:appflowy/generated/locale_keys.g.dart';
  2. import 'package:appflowy/plugins/database_view/board/presentation/board_page.dart';
  3. import 'package:appflowy/plugins/database_view/calendar/presentation/calendar_page.dart';
  4. import 'package:appflowy/plugins/database_view/grid/presentation/grid_page.dart';
  5. import 'package:appflowy/workspace/presentation/home/menu/view/draggable_view_item.dart';
  6. import 'package:appflowy/workspace/presentation/home/menu/view/view_add_button.dart';
  7. import 'package:appflowy/workspace/presentation/home/menu/view/view_item.dart';
  8. import 'package:appflowy/workspace/presentation/home/menu/view/view_more_action_button.dart';
  9. import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
  10. import 'package:appflowy_editor/appflowy_editor.dart';
  11. import 'package:easy_localization/easy_localization.dart';
  12. import 'package:flutter_test/flutter_test.dart';
  13. import 'package:integration_test/integration_test.dart';
  14. import '../util/util.dart';
  15. void main() {
  16. IntegrationTestWidgetsFlutterBinding.ensureInitialized();
  17. group('sidebar test', () {
  18. testWidgets('create a new page', (tester) async {
  19. await tester.initializeAppFlowy();
  20. await tester.tapGoButton();
  21. // create a new page
  22. await tester.tapNewPageButton();
  23. // expect to see a new document
  24. tester.expectToSeePageName(
  25. LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
  26. );
  27. // and with one paragraph block
  28. expect(find.byType(TextBlockComponentWidget), findsOneWidget);
  29. });
  30. testWidgets('create a new document, grid, board and calendar',
  31. (tester) async {
  32. await tester.initializeAppFlowy();
  33. await tester.tapGoButton();
  34. for (final layout in ViewLayoutPB.values) {
  35. // create a new page
  36. final name = 'AppFlowy_$layout';
  37. await tester.createNewPageWithName(
  38. name: name,
  39. layout: layout,
  40. );
  41. // expect to see a new page
  42. tester.expectToSeePageName(
  43. name,
  44. layout: layout,
  45. );
  46. switch (layout) {
  47. case ViewLayoutPB.Document:
  48. // and with one paragraph block
  49. expect(find.byType(TextBlockComponentWidget), findsOneWidget);
  50. break;
  51. case ViewLayoutPB.Grid:
  52. expect(find.byType(GridPage), findsOneWidget);
  53. break;
  54. case ViewLayoutPB.Board:
  55. expect(find.byType(BoardPage), findsOneWidget);
  56. break;
  57. case ViewLayoutPB.Calendar:
  58. expect(find.byType(CalendarPage), findsOneWidget);
  59. break;
  60. }
  61. await tester.openPage(gettingStarted);
  62. }
  63. });
  64. testWidgets('create some nested pages, and move them', (tester) async {
  65. await tester.initializeAppFlowy();
  66. await tester.tapGoButton();
  67. final names = [1, 2, 3, 4].map((e) => 'document_$e').toList();
  68. for (var i = 0; i < names.length; i++) {
  69. final parentName = i == 0 ? gettingStarted : names[i - 1];
  70. await tester.createNewPageWithName(
  71. name: names[i],
  72. parentName: parentName,
  73. layout: ViewLayoutPB.Document,
  74. );
  75. tester.expectToSeePageName(names[i], parentName: parentName);
  76. }
  77. // move the document_3 to the getting started page
  78. await tester.movePageToOtherPage(
  79. name: names[3],
  80. parentName: gettingStarted,
  81. layout: ViewLayoutPB.Document,
  82. parentLayout: ViewLayoutPB.Document,
  83. );
  84. final fromId = tester
  85. .widget<SingleInnerViewItem>(tester.findPageName(names[3]))
  86. .view
  87. .parentViewId;
  88. final toId = tester
  89. .widget<SingleInnerViewItem>(tester.findPageName(gettingStarted))
  90. .view
  91. .id;
  92. expect(fromId, toId);
  93. // move the document_2 before document_1
  94. await tester.movePageToOtherPage(
  95. name: names[2],
  96. parentName: gettingStarted,
  97. layout: ViewLayoutPB.Document,
  98. parentLayout: ViewLayoutPB.Document,
  99. position: DraggableHoverPosition.bottom,
  100. );
  101. final childViews = tester
  102. .widget<SingleInnerViewItem>(tester.findPageName(gettingStarted))
  103. .view
  104. .childViews;
  105. expect(
  106. childViews[0].id,
  107. tester
  108. .widget<SingleInnerViewItem>(tester.findPageName(names[2]))
  109. .view
  110. .id,
  111. );
  112. expect(
  113. childViews[1].id,
  114. tester
  115. .widget<SingleInnerViewItem>(tester.findPageName(names[0]))
  116. .view
  117. .id,
  118. );
  119. expect(
  120. childViews[2].id,
  121. tester
  122. .widget<SingleInnerViewItem>(tester.findPageName(names[3]))
  123. .view
  124. .id,
  125. );
  126. });
  127. testWidgets('unable to move a document into a database', (tester) async {
  128. await tester.initializeAppFlowy();
  129. await tester.tapGoButton();
  130. const document = 'document';
  131. await tester.createNewPageWithName(
  132. name: document,
  133. openAfterCreated: false,
  134. );
  135. tester.expectToSeePageName(document, layout: ViewLayoutPB.Document);
  136. const grid = 'grid';
  137. await tester.createNewPageWithName(
  138. name: grid,
  139. layout: ViewLayoutPB.Grid,
  140. openAfterCreated: false,
  141. );
  142. tester.expectToSeePageName(grid, layout: ViewLayoutPB.Grid);
  143. // move the document to the grid page
  144. await tester.movePageToOtherPage(
  145. name: document,
  146. parentName: grid,
  147. layout: ViewLayoutPB.Document,
  148. parentLayout: ViewLayoutPB.Grid,
  149. );
  150. // it should not be moved
  151. final childViews = tester
  152. .widget<SingleInnerViewItem>(tester.findPageName(gettingStarted))
  153. .view
  154. .childViews;
  155. expect(
  156. childViews[0].name,
  157. document,
  158. );
  159. expect(
  160. childViews[1].name,
  161. grid,
  162. );
  163. });
  164. testWidgets('unable to create a new database inside the existing one',
  165. (tester) async {
  166. await tester.initializeAppFlowy();
  167. await tester.tapGoButton();
  168. const grid = 'grid';
  169. await tester.createNewPageWithName(
  170. name: grid,
  171. layout: ViewLayoutPB.Grid,
  172. openAfterCreated: true,
  173. );
  174. tester.expectToSeePageName(grid, layout: ViewLayoutPB.Grid);
  175. await tester.hoverOnPageName(
  176. grid,
  177. layout: ViewLayoutPB.Grid,
  178. onHover: () async {
  179. expect(find.byType(ViewAddButton), findsNothing);
  180. expect(find.byType(ViewMoreActionButton), findsOneWidget);
  181. },
  182. );
  183. });
  184. });
  185. }