diff --git a/lib/screens/folder_view.dart b/lib/screens/folder_view.dart index e00b2467..9731ae9f 100644 --- a/lib/screens/folder_view.dart +++ b/lib/screens/folder_view.dart @@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:git_bindings/git_bindings.dart'; import 'package:provider/provider.dart'; +import 'package:gitjournal/app.dart'; import 'package:gitjournal/core/md_yaml_doc_codec.dart'; import 'package:gitjournal/core/note.dart'; import 'package:gitjournal/core/notes_folder.dart'; @@ -278,6 +279,7 @@ class _FolderViewState extends State { }, ), RadioListTile( + key: const ValueKey("ShowFileNameOnly"), title: Text(tr('widgets.FolderView.headerOptions.fileName')), value: StandardViewHeader.FileName, groupValue: _headerType, @@ -287,6 +289,7 @@ class _FolderViewState extends State { }, ), SwitchListTile( + key: const ValueKey("SummaryToggle"), title: Text(tr('widgets.FolderView.headerOptions.summary')), value: _showSummary, onChanged: (bool newVal) { @@ -299,7 +302,18 @@ class _FolderViewState extends State { ]; return AlertDialog( - title: Text(tr('widgets.FolderView.headerOptions.customize')), + title: GestureDetector( + key: const ValueKey("Hack_Back"), + child: Text(tr('widgets.FolderView.headerOptions.customize')), + onTap: () { + // Hack to get out of the dialog in the tests + // driver.findByType('ModalBarrier') doesn't seem to be working + if (JournalApp.isInDebugMode) { + Navigator.of(context).pop(); + } + }, + ), + key: const ValueKey("ViewOptionsDialog"), content: Column( children: children, mainAxisSize: MainAxisSize.min, @@ -375,6 +389,7 @@ class _FolderViewState extends State { final settings = Provider.of(context); var extraActions = PopupMenuButton( + key: const ValueKey("PopupMenu"), onSelected: (DropDownChoices choice) { switch (choice) { case DropDownChoices.SortingOptions: @@ -388,11 +403,13 @@ class _FolderViewState extends State { }, itemBuilder: (BuildContext context) => >[ PopupMenuItem( + key: const ValueKey("SortingOptions"), value: DropDownChoices.SortingOptions, child: Text(tr('widgets.FolderView.sortingOptions')), ), if (_viewType == FolderViewType.Standard) PopupMenuItem( + key: const ValueKey("ViewOptions"), value: DropDownChoices.ViewOptions, child: Text(tr('widgets.FolderView.viewOptions')), ), diff --git a/lib/widgets/sorting_mode_selector.dart b/lib/widgets/sorting_mode_selector.dart index d3e4d6f8..81184611 100644 --- a/lib/widgets/sorting_mode_selector.dart +++ b/lib/widgets/sorting_mode_selector.dart @@ -44,12 +44,14 @@ class _SortingModeSelectorState extends State { ), actions: [ OutlineButton( + key: const ValueKey("Cancel"), child: Text(tr('settings.cancel')), onPressed: () { Navigator.of(context).pop(); }, ), OutlineButton( + key: const ValueKey("Ok"), child: Text(tr('settings.ok')), onPressed: () { Navigator.of(context).pop(SortingMode(field, order)); diff --git a/test_driver/main.dart b/test_driver/main.dart index 522a1ae5..222a1c3b 100644 --- a/test_driver/main.dart +++ b/test_driver/main.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:flutter_driver/driver_extension.dart'; import 'package:gitjournal/app_settings.dart'; import 'package:path_provider/path_provider.dart'; +import 'package:meta/meta.dart'; import 'package:gitjournal/app.dart'; import 'package:gitjournal/settings.dart'; @@ -43,46 +44,86 @@ Future populateWithData(SharedPreferences pref) async { Directory(p.join(repoPath, "Journal/Personal")).createSync(recursive: true); Directory(p.join(repoPath, "Food")).createSync(); + final now = DateTime.now(); + // Write notes createChecklist(p.join(repoPath, "checklist.md"), DateTime.now()); - createNoteWithTitle( + createNote( p.join(repoPath, "note1.md"), - DateTime.now(), - "Desire", - "Haven't you always wanted such an app?", + now, + body: "Desire", + title: "Haven't you always wanted such an app?", ); createNote( p.join(repoPath, "note2.md"), - DateTime.now(), - "There is not a pipe", + now, + body: "There is not a pipe", ); createNote( - p.join(repoPath, "note2.md"), - DateTime.now(), - "There is not a pipe", + p.join(repoPath, "note3.md"), + now, + body: + "What are the different models for building sustainable Open Source Software?", + ); + + createNote( + p.join(repoPath, "note-taking-apps.md"), + now.add(const Duration(days: -2)), + body: + """There seems to be an explosion of Note Taking apps. Here are some of the Open Sources ones that I have found - + +- Zettlr +- Foam +- Dendron +- Joplin +- SimpleNote +- Standard Notes +- TiddlyWiki +""", + ); + + createNote( + p.join(repoPath, "note3.md"), + now.add(const Duration(hours: -2)), + body: + "What are the different models for building sustainable Open Source Software?", + ); + + createNote( + p.join(repoPath, "git-analogy.md"), + now.add(const Duration(hours: -5)), + body: "Perhaps Git could be explained as a virtual usb-drive", + title: "Git Analogy", + ); + + createNote( + p.join(repoPath, "open-source-analytics.md"), + now.add(const Duration(hours: -5)), + body: "Research what Open Source Alternative Exist for App Analytics", + ); + + createNote( + p.join(repoPath, "lighting.md"), + now.add(const Duration(hours: -5)), + body: "But some lamps to make the office more cozy at night", ); } -void createNote(String filePath, DateTime dt, String body) { - var content = """--- +void createNote(String filePath, DateTime dt, + {@required String body, String title}) { + var content = ""; + + if (title == null) { + content = """--- modified: ${toIso8601WithTimezone(dt)} created: ${toIso8601WithTimezone(dt)} --- $body """; - - File(filePath).writeAsStringSync(content); -} - -void createNoteWithTitle( - String filePath, - DateTime dt, - String title, - String body, -) { - var content = """--- + } else { + content = """--- modified: ${toIso8601WithTimezone(dt)} created: ${toIso8601WithTimezone(dt)} title: $title @@ -90,6 +131,7 @@ title: $title $body """; + } File(filePath).writeAsStringSync(content); } diff --git a/test_driver/main_test.dart b/test_driver/main_test.dart index 3a54b15c..66d3eb54 100644 --- a/test_driver/main_test.dart +++ b/test_driver/main_test.dart @@ -31,16 +31,6 @@ void main() { Future _takeScreenshot() async { screenshotNum += 1; - /* - var filePath = screenshotNum.toString() + ".png"; - - print("Taking screenshot $filePath"); - final file = await File(filePath).create(recursive: true); - final pixels = await driver.screenshot(); - await file.writeAsBytes(pixels); - */ - - // Fancy Screenshot package await screenshot(driver, config, screenshotNum.toString()); } @@ -137,9 +127,54 @@ void main() { await Future.delayed(const Duration(milliseconds: 100)); await _takeScreenshot(); + // Capture Standard View's Sorting Options + var popUpMenu = find.byValueKey("PopupMenu"); + await waitFor(popUpMenu); + await driver.tap(popUpMenu); + + var sortingOptions = find.byValueKey("SortingOptions"); + await waitFor(sortingOptions); + await _takeScreenshot(); + await driver.tap(sortingOptions); + + var sortingOptionsCancel = find.byValueKey("Cancel"); + await waitFor(sortingOptionsCancel); + + await _takeScreenshot(); + await driver.tap(sortingOptionsCancel); + + // StandardView's View Settings + await waitFor(popUpMenu); + await driver.tap(popUpMenu); + + var viewOptions = find.byValueKey("ViewOptions"); + await waitFor(viewOptions); + await driver.tap(viewOptions); + + var viewOptionsDialog = find.byValueKey("ViewOptionsDialog"); + await waitFor(viewOptionsDialog); + await _takeScreenshot(); + + var showSummary = find.byValueKey("SummaryToggle"); + await waitFor(showSummary); + await driver.tap(showSummary); + + var fileNameSel = find.byValueKey("ShowFileNameOnly"); + await waitFor(fileNameSel); + await _takeScreenshot(); + await driver.tap(fileNameSel); + + // Remove the Dialog + var barrier = find.byValueKey('Hack_Back'); + await waitFor(barrier); + await driver.tap(barrier); + // Folder View Selector print("Taking Screenshots of FolderViewSelector"); var folderViewSelector = find.byValueKey("FolderViewSelector"); + await waitFor(folderViewSelector); + await _takeScreenshot(); + await driver.tap(folderViewSelector); await Future.delayed(const Duration(milliseconds: 100)); await _takeScreenshot();