expectation.dart 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. import 'package:appflowy/generated/locale_keys.g.dart';
  2. import 'package:appflowy/plugins/document/presentation/banner.dart';
  3. import 'package:appflowy/plugins/document/presentation/editor_plugins/header/document_header_node_widget.dart';
  4. import 'package:appflowy/plugins/document/presentation/editor_plugins/header/emoji_icon_widget.dart';
  5. import 'package:appflowy/workspace/presentation/home/home_stack.dart';
  6. import 'package:appflowy/workspace/presentation/home/menu/view/view_item.dart';
  7. import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
  8. import 'package:easy_localization/easy_localization.dart';
  9. import 'package:flowy_infra_ui/flowy_infra_ui.dart';
  10. import 'package:flutter_test/flutter_test.dart';
  11. // const String readme = 'Read me';
  12. const String gettingStated = '⭐️ Getting started';
  13. extension Expectation on WidgetTester {
  14. /// Expect to see the home page and with a default read me page.
  15. void expectToSeeHomePage() {
  16. expect(find.byType(HomeStack), findsOneWidget);
  17. expect(find.textContaining(gettingStated), findsWidgets);
  18. }
  19. /// Expect to see the page name on the home page.
  20. void expectToSeePageName(
  21. String name, {
  22. String? parentName,
  23. ViewLayoutPB layout = ViewLayoutPB.Document,
  24. ViewLayoutPB parentLayout = ViewLayoutPB.Document,
  25. }) {
  26. final pageName = findPageName(
  27. name,
  28. layout: layout,
  29. parentName: parentName,
  30. parentLayout: parentLayout,
  31. );
  32. expect(pageName, findsOneWidget);
  33. }
  34. /// Expect not to see the page name on the home page.
  35. void expectNotToSeePageName(
  36. String name, {
  37. String? parentName,
  38. ViewLayoutPB layout = ViewLayoutPB.Document,
  39. ViewLayoutPB parentLayout = ViewLayoutPB.Document,
  40. }) {
  41. final pageName = findPageName(
  42. name,
  43. layout: layout,
  44. parentName: parentName,
  45. parentLayout: parentLayout,
  46. );
  47. expect(pageName, findsNothing);
  48. }
  49. /// Expect to see the document banner.
  50. void expectToSeeDocumentBanner() {
  51. expect(find.byType(DocumentBanner), findsOneWidget);
  52. }
  53. /// Expect not to see the document banner.
  54. void expectNotToSeeDocumentBanner() {
  55. expect(find.byType(DocumentBanner), findsNothing);
  56. }
  57. /// Expect to the markdown file export success dialog.
  58. void expectToExportSuccess() {
  59. final exportSuccess = find.byWidgetPredicate(
  60. (widget) =>
  61. widget is FlowyText &&
  62. widget.text == LocaleKeys.settings_files_exportFileSuccess.tr(),
  63. );
  64. expect(exportSuccess, findsOneWidget);
  65. }
  66. /// Expect to see the add button and icon button in the cover toolbar
  67. void expectToSeePluginAddCoverAndIconButton() {
  68. final addCover = find.textContaining(
  69. LocaleKeys.document_plugins_cover_addCover.tr(),
  70. );
  71. final addIcon = find.textContaining(
  72. LocaleKeys.document_plugins_cover_addIcon.tr(),
  73. );
  74. expect(addCover, findsOneWidget);
  75. expect(addIcon, findsOneWidget);
  76. }
  77. /// Expect to see the document header toolbar empty
  78. void expectToSeeEmptyDocumentHeaderToolbar() {
  79. final addCover = find.textContaining(
  80. LocaleKeys.document_plugins_cover_addCover.tr(),
  81. );
  82. final addIcon = find.textContaining(
  83. LocaleKeys.document_plugins_cover_addIcon.tr(),
  84. );
  85. expect(addCover, findsNothing);
  86. expect(addIcon, findsNothing);
  87. }
  88. void expectToSeeDocumentIcon(String? emoji) {
  89. if (emoji == null) {
  90. final iconWidget = find.byType(EmojiIconWidget);
  91. expect(iconWidget, findsNothing);
  92. return;
  93. }
  94. final iconWidget = find.byWidgetPredicate(
  95. (widget) => widget is EmojiIconWidget && widget.emoji == emoji,
  96. );
  97. expect(iconWidget, findsOneWidget);
  98. }
  99. void expectToSeeDocumentCover(CoverType type) {
  100. final findCover = find.byWidgetPredicate(
  101. (widget) => widget is DocumentCover && widget.coverType == type,
  102. );
  103. expect(findCover, findsOneWidget);
  104. }
  105. void expectToSeeNoDocumentCover() {
  106. final findCover = find.byType(DocumentCover);
  107. expect(findCover, findsNothing);
  108. }
  109. void expectChangeCoverAndDeleteButton() {
  110. final findChangeCover = find.text(
  111. LocaleKeys.document_plugins_cover_changeCover.tr(),
  112. );
  113. final findRemoveIcon = find.byType(DeleteCoverButton);
  114. expect(findChangeCover, findsOneWidget);
  115. expect(findRemoveIcon, findsOneWidget);
  116. }
  117. /// Expect to see the user name on the home page
  118. void expectToSeeUserName(String name) {
  119. final userName = find.byWidgetPredicate(
  120. (widget) => widget is FlowyText && widget.text == name,
  121. );
  122. expect(userName, findsOneWidget);
  123. }
  124. /// Expect to see a text
  125. void expectToSeeText(String text) {
  126. Finder textWidget = find.textContaining(text, findRichText: true);
  127. if (textWidget.evaluate().isEmpty) {
  128. textWidget = find.byWidgetPredicate(
  129. (widget) => widget is FlowyText && widget.text == text,
  130. );
  131. }
  132. expect(textWidget, findsOneWidget);
  133. }
  134. /// Find the page name on the home page.
  135. Finder findPageName(
  136. String name, {
  137. ViewLayoutPB layout = ViewLayoutPB.Document,
  138. String? parentName,
  139. ViewLayoutPB parentLayout = ViewLayoutPB.Document,
  140. }) {
  141. if (parentName == null) {
  142. return find.byWidgetPredicate(
  143. (widget) =>
  144. widget is SingleInnerViewItem &&
  145. widget.view.name == name &&
  146. widget.view.layout == layout,
  147. skipOffstage: false,
  148. );
  149. }
  150. return find.descendant(
  151. of: find.byWidgetPredicate(
  152. (widget) =>
  153. widget is ViewItem &&
  154. widget.view.name == name &&
  155. widget.view.layout == layout,
  156. skipOffstage: false,
  157. ),
  158. matching: findPageName(name),
  159. );
  160. }
  161. }