123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 |
- import 'package:appflowy/workspace/application/sidebar/folder/folder_bloc.dart';
- import 'package:appflowy/workspace/presentation/home/menu/sidebar/folder/favorite_folder.dart';
- import 'package:appflowy/workspace/presentation/home/menu/view/view_item.dart';
- import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
- import 'package:appflowy_popover/appflowy_popover.dart';
- import 'package:flowy_infra_ui/style_widget/hover.dart';
- import 'package:flutter_test/flutter_test.dart';
- import 'package:integration_test/integration_test.dart';
- import '../util/base.dart';
- import '../util/common_operations.dart';
- import '../util/expectation.dart';
- void main() {
- IntegrationTestWidgetsFlutterBinding.ensureInitialized();
- group('Favorites', () {
- testWidgets(
- 'Toggle favorites for views creates / removes the favorite header along with favorite views',
- (tester) async {
- await tester.initializeAppFlowy();
- await tester.tapGoButton();
- // no favorite folder
- expect(find.byType(FavoriteFolder), findsNothing);
- // create the nested views
- final names = [
- 1,
- 2,
- ].map((e) => 'document_$e').toList();
- for (var i = 0; i < names.length; i++) {
- final parentName = i == 0 ? gettingStated : names[i - 1];
- await tester.createNewPageWithName(
- name: names[i],
- parentName: parentName,
- layout: ViewLayoutPB.Document,
- );
- tester.expectToSeePageName(
- names[i],
- parentName: parentName,
- layout: ViewLayoutPB.Document,
- parentLayout: ViewLayoutPB.Document,
- );
- }
- await tester.favoriteViewByName(gettingStated);
- expect(
- tester.findFavoritePageName(gettingStated),
- findsOneWidget,
- );
- await tester.favoriteViewByName(names[1]);
- expect(
- tester.findFavoritePageName(names[1]),
- findsNWidgets(2),
- );
- await tester.unfavoriteViewByName(gettingStated);
- expect(
- tester.findFavoritePageName(gettingStated),
- findsNothing,
- );
- expect(
- tester.findFavoritePageName(
- names[1],
- ),
- findsOneWidget,
- );
- await tester.unfavoriteViewByName(names[1]);
- expect(
- tester.findFavoritePageName(
- names[1],
- ),
- findsNothing,
- );
- });
- testWidgets(
- 'renaming a favorite view updates name under favorite header',
- (tester) async {
- await tester.initializeAppFlowy();
- await tester.tapGoButton();
- const name = 'test';
- await tester.favoriteViewByName(gettingStated);
- await tester.hoverOnPageName(
- gettingStated,
- layout: ViewLayoutPB.Document,
- onHover: () async {
- await tester.renamePage(name);
- await tester.pumpAndSettle();
- },
- );
- expect(
- tester.findPageName(name),
- findsNWidgets(2),
- );
- expect(
- tester.findFavoritePageName(name),
- findsNothing,
- );
- },
- );
- testWidgets(
- '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',
- (tester) async {
- await tester.initializeAppFlowy();
- await tester.tapGoButton();
- final names = [1, 2].map((e) => 'document_$e').toList();
- for (var i = 0; i < names.length; i++) {
- final parentName = i == 0 ? gettingStated : names[i - 1];
- await tester.createNewPageWithName(
- name: names[i],
- parentName: parentName,
- layout: ViewLayoutPB.Document,
- );
- tester.expectToSeePageName(names[i], parentName: parentName);
- }
- await tester.favoriteViewByName(gettingStated);
- await tester.favoriteViewByName(names[0]);
- await tester.favoriteViewByName(names[1]);
- expect(
- find.byWidgetPredicate(
- (widget) =>
- widget is ViewItem &&
- widget.view.isFavorite &&
- widget.categoryType == FolderCategoryType.favorite,
- ),
- findsNWidgets(6),
- );
- await tester.hoverOnPageName(
- names[1],
- layout: ViewLayoutPB.Document,
- onHover: () async {
- await tester.tapDeletePageButton();
- await tester.pumpAndSettle();
- },
- );
- expect(
- find.byWidgetPredicate(
- (widget) =>
- widget is ViewItem &&
- widget.view.isFavorite &&
- widget.categoryType == FolderCategoryType.favorite,
- ),
- findsNWidgets(3),
- );
- await tester.hoverOnPageName(
- gettingStated,
- layout: ViewLayoutPB.Document,
- onHover: () async {
- await tester.tapDeletePageButton();
- await tester.pumpAndSettle();
- },
- );
- expect(
- find.byWidgetPredicate(
- (widget) =>
- widget is ViewItem &&
- widget.view.isFavorite &&
- widget.categoryType == FolderCategoryType.favorite,
- ),
- findsNothing,
- );
- },
- );
- testWidgets(
- 'view selection is synced between favorites and personal folder',
- (tester) async {
- await tester.initializeAppFlowy();
- await tester.tapGoButton();
- await tester.createNewPageWithName();
- await tester.favoriteViewByName(gettingStated);
- expect(
- find.byWidgetPredicate(
- (widget) =>
- widget is FlowyHover &&
- widget.isSelected != null &&
- widget.isSelected!(),
- ),
- findsNWidgets(2),
- );
- },
- );
- testWidgets(
- 'context menu opens up for favorites',
- (tester) async {
- await tester.initializeAppFlowy();
- await tester.tapGoButton();
- await tester.createNewPageWithName();
- await tester.favoriteViewByName(gettingStated);
- await tester.hoverOnPageName(
- gettingStated,
- layout: ViewLayoutPB.Document,
- useLast: false,
- onHover: () async {
- await tester.tapPageOptionButton();
- await tester.pumpAndSettle();
- expect(
- find.byType(PopoverContainer),
- findsOneWidget,
- );
- },
- );
- await tester.pumpAndSettle();
- },
- );
- });
- }
|