mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-28 09:47:35 +08:00
Add a trivial integration test which just takes a screenshot
This required refactoring the code. With this we can now write an integration test to test the main parts of the app, but more importantly we can automate the process of generating the screenshots.
This commit is contained in:
49
lib/app.dart
49
lib/app.dart
@ -1,8 +1,10 @@
|
||||
import 'package:firebase_analytics/firebase_analytics.dart';
|
||||
import 'package:firebase_analytics/observer.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:journal/apis/git.dart';
|
||||
import 'package:journal/screens/home_screen.dart';
|
||||
import 'package:journal/screens/settings_screen.dart';
|
||||
import 'package:journal/settings.dart';
|
||||
import 'package:journal/state_container.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
@ -10,6 +12,53 @@ import 'screens/githostsetup_screens.dart';
|
||||
import 'screens/onboarding_screens.dart';
|
||||
|
||||
class JournalApp extends StatelessWidget {
|
||||
static Future main() async {
|
||||
var pref = await SharedPreferences.getInstance();
|
||||
JournalApp.preferences = pref;
|
||||
|
||||
var localGitRepoConfigured =
|
||||
pref.getBool("localGitRepoConfigured") ?? false;
|
||||
var remoteGitRepoConfigured =
|
||||
pref.getBool("remoteGitRepoConfigured") ?? false;
|
||||
var localGitRepoPath = pref.getString("localGitRepoPath") ?? "";
|
||||
var remoteGitRepoFolderName = pref.getString("remoteGitRepoPath") ?? "";
|
||||
var remoteGitRepoSubFolder = pref.getString("remoteGitRepoSubFolder") ?? "";
|
||||
var onBoardingCompleted =
|
||||
true; //pref.getBool("onBoardingCompleted") ?? false;
|
||||
|
||||
if (JournalApp.isInDebugMode) {
|
||||
if (JournalApp.analytics.android != null) {
|
||||
JournalApp.analytics.android.setAnalyticsCollectionEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (localGitRepoConfigured == false) {
|
||||
// FIXME: What about exceptions!
|
||||
localGitRepoPath = "journal_local";
|
||||
await gitInit(localGitRepoPath);
|
||||
|
||||
localGitRepoConfigured = true;
|
||||
|
||||
await pref.setBool("localGitRepoConfigured", localGitRepoConfigured);
|
||||
await pref.setString("localGitRepoPath", localGitRepoPath);
|
||||
}
|
||||
|
||||
var dir = await getGitBaseDirectory();
|
||||
|
||||
await Settings.instance.load();
|
||||
|
||||
runApp(StateContainer(
|
||||
localGitRepoConfigured: localGitRepoConfigured,
|
||||
remoteGitRepoConfigured: remoteGitRepoConfigured,
|
||||
localGitRepoPath: localGitRepoPath,
|
||||
remoteGitRepoFolderName: remoteGitRepoFolderName,
|
||||
remoteGitRepoSubFolder: remoteGitRepoSubFolder,
|
||||
gitBaseDirectory: dir.path,
|
||||
onBoardingCompleted: onBoardingCompleted,
|
||||
child: JournalApp(),
|
||||
));
|
||||
}
|
||||
|
||||
static FirebaseAnalytics analytics = FirebaseAnalytics();
|
||||
static FirebaseAnalyticsObserver observer =
|
||||
FirebaseAnalyticsObserver(analytics: analytics);
|
||||
|
@ -2,11 +2,7 @@ import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_crashlytics/flutter_crashlytics.dart';
|
||||
import 'package:journal/apis/git.dart';
|
||||
import 'package:journal/app.dart';
|
||||
import 'package:journal/settings.dart';
|
||||
import 'package:journal/state_container.dart';
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
void main() async {
|
||||
FlutterError.onError = (FlutterErrorDetails details) {
|
||||
@ -22,55 +18,9 @@ void main() async {
|
||||
}
|
||||
|
||||
runZoned<Future<void>>(() async {
|
||||
await runJournalApp();
|
||||
await JournalApp.main();
|
||||
}, onError: (Object error, StackTrace stackTrace) async {
|
||||
await FlutterCrashlytics()
|
||||
.reportCrash(error, stackTrace, forceCrash: false);
|
||||
});
|
||||
}
|
||||
|
||||
Future runJournalApp() async {
|
||||
var pref = await SharedPreferences.getInstance();
|
||||
JournalApp.preferences = pref;
|
||||
|
||||
var localGitRepoConfigured = pref.getBool("localGitRepoConfigured") ?? false;
|
||||
var remoteGitRepoConfigured =
|
||||
pref.getBool("remoteGitRepoConfigured") ?? false;
|
||||
var localGitRepoPath = pref.getString("localGitRepoPath") ?? "";
|
||||
var remoteGitRepoFolderName = pref.getString("remoteGitRepoPath") ?? "";
|
||||
var remoteGitRepoSubFolder = pref.getString("remoteGitRepoSubFolder") ?? "";
|
||||
var onBoardingCompleted =
|
||||
true; //pref.getBool("onBoardingCompleted") ?? false;
|
||||
|
||||
if (JournalApp.isInDebugMode) {
|
||||
if (JournalApp.analytics.android != null) {
|
||||
JournalApp.analytics.android.setAnalyticsCollectionEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (localGitRepoConfigured == false) {
|
||||
// FIXME: What about exceptions!
|
||||
localGitRepoPath = "journal_local";
|
||||
await gitInit(localGitRepoPath);
|
||||
|
||||
localGitRepoConfigured = true;
|
||||
|
||||
await pref.setBool("localGitRepoConfigured", localGitRepoConfigured);
|
||||
await pref.setString("localGitRepoPath", localGitRepoPath);
|
||||
}
|
||||
|
||||
var dir = await getGitBaseDirectory();
|
||||
|
||||
await Settings.instance.load();
|
||||
|
||||
runApp(StateContainer(
|
||||
localGitRepoConfigured: localGitRepoConfigured,
|
||||
remoteGitRepoConfigured: remoteGitRepoConfigured,
|
||||
localGitRepoPath: localGitRepoPath,
|
||||
remoteGitRepoFolderName: remoteGitRepoFolderName,
|
||||
remoteGitRepoSubFolder: remoteGitRepoSubFolder,
|
||||
gitBaseDirectory: dir.path,
|
||||
onBoardingCompleted: onBoardingCompleted,
|
||||
child: JournalApp(),
|
||||
));
|
||||
}
|
||||
|
7
test_driver/main.dart
Normal file
7
test_driver/main.dart
Normal file
@ -0,0 +1,7 @@
|
||||
import 'package:flutter_driver/driver_extension.dart';
|
||||
import 'package:journal/app.dart';
|
||||
|
||||
void main() async {
|
||||
enableFlutterDriverExtension();
|
||||
await JournalApp.main();
|
||||
}
|
37
test_driver/main_test.dart
Normal file
37
test_driver/main_test.dart
Normal file
@ -0,0 +1,37 @@
|
||||
import 'dart:io';
|
||||
|
||||
import 'package:flutter_driver/flutter_driver.dart';
|
||||
import 'package:test/test.dart';
|
||||
|
||||
void main() {
|
||||
group('Test', () {
|
||||
final loadedFinder = find.text('Why not add your first\n Journal Entry?');
|
||||
|
||||
FlutterDriver driver;
|
||||
int screenshotNum = 0;
|
||||
|
||||
// Connect to the Flutter driver before running any tests
|
||||
setUpAll(() async {
|
||||
driver = await FlutterDriver.connect();
|
||||
});
|
||||
|
||||
// Close the connection to the driver after the tests have completed
|
||||
tearDownAll(() async {
|
||||
if (driver != null) {
|
||||
driver.close();
|
||||
}
|
||||
});
|
||||
|
||||
Future _takeScreenshot() async {
|
||||
var filePath = screenshotNum.toString() + ".png";
|
||||
final file = await File(filePath).create(recursive: true);
|
||||
final pixels = await driver.screenshot();
|
||||
await file.writeAsBytes(pixels);
|
||||
}
|
||||
|
||||
test('Anonymous GitClone works', () async {
|
||||
await driver.waitFor(loadedFinder, timeout: Duration(seconds: 5));
|
||||
await _takeScreenshot();
|
||||
});
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user