Files
GitJournal/test/share_test.dart
Vishesh Handa c5e9cc7821 Bump to flutter 3.19.6
We have a newer version of Flutter out, but I prefer to wait a few
months before all the relevant packages upgrade, as I'm already getting
tons of errors.
2024-05-15 07:45:10 +02:00

148 lines
4.5 KiB
Dart

/*
* SPDX-FileCopyrightText: 2022 Vishesh Handa <me@vhanda.in>
*
* SPDX-License-Identifier: AGPL-3.0-or-later
*/
import 'dart:io';
import 'package:dart_git/plumbing/git_hash.dart';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:gitjournal/app.dart';
import 'package:gitjournal/change_notifiers.dart';
import 'package:gitjournal/core/folder/notes_folder_config.dart';
import 'package:gitjournal/editors/note_title_editor.dart';
import 'package:gitjournal/repository.dart';
import 'package:gitjournal/repository_manager.dart';
import 'package:gitjournal/settings/app_config.dart';
import 'package:path/path.dart' as p;
import 'package:receive_sharing_intent/receive_sharing_intent.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'lib.dart';
void main() {
late GitJournalRepo repo;
late RepositoryManager repoManager;
late SharedPreferences pref;
late String repoPath;
setUpAll(gjSetupAllTests);
Future<void> _setup(
String head, {
Map<String, Object> sharedPrefValues = const {},
}) async {
var td = await TestData.load(
headHash: GitHash(head),
sharedPrefValues: sharedPrefValues,
);
repo = td.repo;
repoManager = td.repoManager;
pref = td.pref;
repoPath = td.repoPath;
}
Widget _buildApp() {
return GitJournalChangeNotifiers(
appConfig: AppConfig(),
repoManager: repoManager,
pref: pref,
child: JournalApp(repoManager: repoManager),
);
}
testWidgets('Sharing text works', (tester) async {
await tester.runAsync(
() async => await _setup('7fc65b59170bdc91013eb56cdc65fa3307f2e7de'),
);
// Set the custom option!
var folderConfig = NotesFolderConfig(repoManager.currentId, pref);
folderConfig.load();
folderConfig.yamlHeaderEnabled = false;
await folderConfig.save();
repo.rootFolder.config.load();
await tester.pumpWidget(_buildApp());
await tester.pumpAndSettle();
var appState = tester.state(find.byType(JournalApp)) as JournalAppState;
await tester.runAsync(() async {
var media = SharedMediaFile(path: "foo", type: SharedMediaType.text);
appState.handleSharedMedia([media]);
await Future.delayed(const Duration(milliseconds: 100));
});
await tester.pumpAndSettle();
var titleFinder = find.byType(NoteTitleEditor);
expect(titleFinder, findsOneWidget);
await tester.enterText(titleFinder, "Fake-Title");
await tester.pump();
await tester.runAsync(() async {
var saveButtonFinder = find.byKey(const ValueKey('NewEntry'));
expect(saveButtonFinder, findsOneWidget);
await tester.tap(saveButtonFinder);
await tester.pumpAndSettle();
await Future.delayed(const Duration(milliseconds: 100));
});
var file = File(p.join(repoPath, 'Fake-Title.md'));
expect(file.existsSync(), true);
expect(file.readAsStringSync(), "foo\n");
}, skip: true);
testWidgets('Sharing image works', (tester) async {
await tester.runAsync(
() async => await _setup('7fc65b59170bdc91013eb56cdc65fa3307f2e7de'),
);
// Set the custom option!
var folderConfig = NotesFolderConfig(repoManager.currentId, pref);
folderConfig.load();
folderConfig.yamlHeaderEnabled = false;
await folderConfig.save();
repo.rootFolder.config.load();
await tester.pumpWidget(_buildApp());
await tester.pumpAndSettle();
// Create a fake image
var tempDir = Directory.systemTemp.createTempSync();
var imagePath = p.join(tempDir.path, "test-image.png");
File(imagePath).writeAsStringSync("");
var appState = tester.state(find.byType(JournalApp)) as JournalAppState;
await tester.runAsync(() async {
var media = SharedMediaFile(path: imagePath, type: SharedMediaType.image);
appState.handleSharedMedia([media]);
await Future.delayed(const Duration(milliseconds: 200));
});
await tester.pumpAndSettle();
var titleFinder = find.byType(NoteTitleEditor);
expect(titleFinder, findsOneWidget);
await tester.enterText(titleFinder, "Fake-Title");
await tester.pump();
await tester.runAsync(() async {
var saveButtonFinder = find.byKey(const ValueKey('NewEntry'));
expect(saveButtonFinder, findsOneWidget);
await tester.tap(saveButtonFinder);
await tester.pumpAndSettle();
await Future.delayed(const Duration(milliseconds: 100));
});
var file = File(p.join(repoPath, 'Fake-Title.md'));
expect(file.existsSync(), true);
expect(file.readAsStringSync(), "foo\n");
}, skip: true);
}