sidebar_favorites_test.dart 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import 'package:appflowy/workspace/application/sidebar/folder/folder_bloc.dart';
  2. import 'package:appflowy/workspace/presentation/home/menu/sidebar/folder/favorite_folder.dart';
  3. import 'package:appflowy/workspace/presentation/home/menu/view/view_item.dart';
  4. import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
  5. import 'package:flutter_test/flutter_test.dart';
  6. import 'package:integration_test/integration_test.dart';
  7. import '../util/base.dart';
  8. import '../util/common_operations.dart';
  9. import '../util/expectation.dart';
  10. void main() {
  11. IntegrationTestWidgetsFlutterBinding.ensureInitialized();
  12. group('Favorites', () {
  13. testWidgets(
  14. 'Toggle favorites for views creates / removes the favorite header along with favorite views',
  15. (tester) async {
  16. await tester.initializeAppFlowy();
  17. await tester.tapGoButton();
  18. // no favorite folder
  19. expect(find.byType(FavoriteFolder), findsNothing);
  20. // create the nested views
  21. final names = [
  22. 1,
  23. 2,
  24. ].map((e) => 'document_$e').toList();
  25. for (var i = 0; i < names.length; i++) {
  26. final parentName = i == 0 ? gettingStated : names[i - 1];
  27. await tester.createNewPageWithName(
  28. name: names[i],
  29. parentName: parentName,
  30. layout: ViewLayoutPB.Document,
  31. );
  32. tester.expectToSeePageName(
  33. names[i],
  34. parentName: parentName,
  35. layout: ViewLayoutPB.Document,
  36. parentLayout: ViewLayoutPB.Document,
  37. );
  38. }
  39. await tester.favoriteViewByName(gettingStated);
  40. expect(
  41. tester.findFavoritePageName(gettingStated),
  42. findsOneWidget,
  43. );
  44. await tester.favoriteViewByName(names[1]);
  45. expect(
  46. tester.findFavoritePageName(names[1]),
  47. findsNWidgets(2),
  48. );
  49. await tester.unfavoriteViewByName(gettingStated);
  50. expect(
  51. tester.findFavoritePageName(gettingStated),
  52. findsNothing,
  53. );
  54. expect(
  55. tester.findFavoritePageName(
  56. names[1],
  57. ),
  58. findsOneWidget,
  59. );
  60. await tester.unfavoriteViewByName(names[1]);
  61. expect(
  62. tester.findFavoritePageName(
  63. names[1],
  64. ),
  65. findsNothing,
  66. );
  67. });
  68. testWidgets(
  69. 'renaming a favorite view updates name under favorite header',
  70. (tester) async {
  71. await tester.initializeAppFlowy();
  72. await tester.tapGoButton();
  73. const name = 'test';
  74. await tester.favoriteViewByName(gettingStated);
  75. await tester.hoverOnPageName(
  76. gettingStated,
  77. layout: ViewLayoutPB.Document,
  78. onHover: () async {
  79. await tester.renamePage(name);
  80. await tester.pumpAndSettle();
  81. },
  82. );
  83. expect(
  84. tester.findPageName(name),
  85. findsNWidgets(2),
  86. );
  87. expect(
  88. tester.findFavoritePageName(name),
  89. findsNothing,
  90. );
  91. },
  92. );
  93. testWidgets(
  94. 'deleting first level favorite view removes its instance from favorite header, deleting root level views leads to removal of all favorites that are its children',
  95. (tester) async {
  96. await tester.initializeAppFlowy();
  97. await tester.tapGoButton();
  98. final names = [1, 2].map((e) => 'document_$e').toList();
  99. for (var i = 0; i < names.length; i++) {
  100. final parentName = i == 0 ? gettingStated : names[i - 1];
  101. await tester.createNewPageWithName(
  102. name: names[i],
  103. parentName: parentName,
  104. layout: ViewLayoutPB.Document,
  105. );
  106. tester.expectToSeePageName(names[i], parentName: parentName);
  107. }
  108. await tester.favoriteViewByName(gettingStated);
  109. await tester.favoriteViewByName(names[0]);
  110. await tester.favoriteViewByName(names[1]);
  111. expect(
  112. find.byWidgetPredicate(
  113. (widget) =>
  114. widget is ViewItem &&
  115. widget.view.isFavorite &&
  116. widget.categoryType == FolderCategoryType.favorite,
  117. ),
  118. findsNWidgets(6),
  119. );
  120. await tester.hoverOnPageName(
  121. names[1],
  122. layout: ViewLayoutPB.Document,
  123. onHover: () async {
  124. await tester.tapDeletePageButton();
  125. await tester.pumpAndSettle();
  126. },
  127. );
  128. expect(
  129. find.byWidgetPredicate(
  130. (widget) =>
  131. widget is ViewItem &&
  132. widget.view.isFavorite &&
  133. widget.categoryType == FolderCategoryType.favorite,
  134. ),
  135. findsNWidgets(3),
  136. );
  137. await tester.hoverOnPageName(
  138. gettingStated,
  139. layout: ViewLayoutPB.Document,
  140. onHover: () async {
  141. await tester.tapDeletePageButton();
  142. await tester.pumpAndSettle();
  143. },
  144. );
  145. expect(
  146. find.byWidgetPredicate(
  147. (widget) =>
  148. widget is ViewItem &&
  149. widget.view.isFavorite &&
  150. widget.categoryType == FolderCategoryType.favorite,
  151. ),
  152. findsNothing,
  153. );
  154. },
  155. );
  156. });
  157. }