sidebar_test.dart 6.5 KB

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