Commit 966aa35
Changed files (5)
.github
workflows
lib
model
screens
.github/workflows/CI.yml
@@ -2,7 +2,7 @@ name: CI
on:
push:
- branches: [ "main" ]
+ branches: '**'
jobs:
test:
lib/model/blood_pressure.dart
@@ -17,9 +17,11 @@ class BloodPressureModel extends ChangeNotifier {
late final Database _database;
BloodPressureModel._create();
- Future<void> _asyncInit() async {
+ Future<void> _asyncInit(String? dbPath) async {
+ dbPath ??= await getDatabasesPath();
+
_database = await openDatabase(
- join(await getDatabasesPath(), 'blood_pressure.db'),
+ join(dbPath, 'blood_pressure.db'),
// runs when the database is first created
onCreate: (db, version) {
return db.execute('CREATE TABLE bloodPressureModel(timestamp INTEGER(14) PRIMARY KEY, systolic INTEGER, diastolic INTEGER, pulse INTEGER, notes STRING)');
@@ -28,7 +30,7 @@ class BloodPressureModel extends ChangeNotifier {
);
}
// factory method, to allow for async contructor
- static Future<BloodPressureModel> create() async {
+ static Future<BloodPressureModel> create({String? dbPath}) async {
if (Platform.isWindows || Platform.isLinux) {
// Initialize FFI
sqfliteFfiInit();
@@ -37,7 +39,7 @@ class BloodPressureModel extends ChangeNotifier {
}
final component = BloodPressureModel._create();
- await component._asyncInit();
+ await component._asyncInit(dbPath);
return component;
}
@@ -176,6 +178,10 @@ class BloodPressureModel extends ChangeNotifier {
return callback(false, 'no file opened');
}
}
+
+ void close() {
+ _database.close();
+ }
}
@immutable
lib/screens/enter_timeformat.dart
@@ -1,9 +1,6 @@
-import 'package:blood_pressure_app/model/blood_pressure.dart';
import 'package:blood_pressure_app/model/settings.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
-import 'package:flutter/services.dart';
-import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
import 'package:url_launcher/url_launcher.dart' show launch;
@@ -69,7 +66,7 @@ class _EnterTimeFormatScreenState extends State<EnterTimeFormatScreen> {
);
}
),
- SizedBox(height: 25,),
+ const SizedBox(height: 25,),
Row(
children: [
ElevatedButton(
test/model/bood_pressure_test.dart
@@ -1,7 +1,6 @@
import 'package:blood_pressure_app/model/blood_pressure.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
-import 'dart:io';
void main() {
group('BloodPressureRecord', () {
@@ -36,12 +35,11 @@ void main() {
databaseFactory = databaseFactoryFfi;
test('should initialize', () async {
- await clearDbDir();
- expect(() async { await BloodPressureModel.create(); }, returnsNormally);
+ expect(() async { await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_init');
+ }, returnsNormally);
});
test('should start empty', () async {
- await clearDbDir();
- var m = await BloodPressureModel.create();
+ var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_start_empty');
expect((await m.getLastX(100)).length, 0);
expect((await m.getInTimeRange(DateTime.fromMillisecondsSinceEpoch(0), DateTime.now())).length, 0);
@@ -49,28 +47,23 @@ void main() {
});
test('should notify when adding entries', () async {
- await clearDbDir();
- var m = await BloodPressureModel.create();
+ var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_notify_when_add');
int listenerCalls = 0;
- int added = 0;
m.addListener(() {
listenerCalls++;
- expect(listenerCalls, added);
});
- m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(0), 0, 0, 0, ''));
- added++;
- m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 0, 0, 0, ''));
- added++;
- m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 0, 0, 0, ''));
- added++;
+ await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(0), 0, 0, 0, ''));
+ await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(1), 0, 0, 0, ''));
+ await m.add(BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(2), 0, 0, 0, ''));
+ print(listenerCalls);
+ expect(listenerCalls, 3); // TODO: FAILS
});
test('should return entries as added', () async {
- await clearDbDir();
- var m = await BloodPressureModel.create();
+ var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_return_as_added');
var r = BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(31415926), -172, 10000, 0, "((V⍳V)=⍳⍴V)/V←,V ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈๏ แผ่นดินฮั่นเABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ–—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвг, \n \t д∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა");
m.addListener(() async {
@@ -81,19 +74,18 @@ void main() {
expect(res.diastolic, r.diastolic);
expect(res.pulse, r.pulse);
expect(res.notes, r.notes);
+ return;
});
m.add(r);
});
test('should save and load between objects/sessions', () async {
- await clearDbDir();
-
- var m = await BloodPressureModel.create();
+ var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_store_between_sessions');
var r = BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(31415926), -172, 10000, 0, "((V⍳V)=⍳⍴V)/V←,V ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈๏ แผ่นดินฮั่นเABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ–—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвг, \n \t д∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა");
await m.add(r);
- var m2 = await BloodPressureModel.create();
+ var m2 = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_store_between_sessions');
var res = (await m2.getLastX(1)).first;
expect(res.creationTime, r.creationTime);
@@ -104,8 +96,7 @@ void main() {
});
test('should import exported values', () async {
- await clearDbDir();
- var m = await BloodPressureModel.create();
+ var m = await BloodPressureModel.create(dbPath: '/tmp/bp_test/should_import_exported');
var r = BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(31415926), -172, 10000, 0, "((V⍳V)=⍳⍴V)/V←,V ⌷←⍳→⍴∆∇⊃‾⍎⍕⌈๏ แผ่นดินฮั่นเABCDEFGHIJKLMNOPQRSTUVWXYZ /0123456789abcdefghijklmnopqrstuvwxyz £©µÀÆÖÞßéöÿ–—‘“”„†•…‰™œŠŸž€ ΑΒΓΔΩαβγδω АБВГДабвг, \n \t д∀∂∈ℝ∧∪≡∞ ↑↗↨↻⇣ ┐┼╔╘░►☺♀ fi�⑀₂ἠḂӥẄɐː⍎אԱა");
await m.add(r);
@@ -115,14 +106,4 @@ void main() {
});
});
});
-}
-
-Future<void> clearDbDir() async {
- databaseFactory.setDatabasesPath((await getDatabasesPath()).replaceAll('databases', 'test_databases'));
- try {
- Directory(await getDatabasesPath()).deleteSync(recursive: true);
- } catch (e) {
- print('no directory to delete!');
- }
- Directory(await getDatabasesPath()).create(recursive: true);
}
\ No newline at end of file
test/model/settings_test.dart
@@ -1,6 +1,3 @@
-import 'dart:io';
-import 'dart:math';
-
import 'package:blood_pressure_app/model/settings.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
@@ -20,13 +17,10 @@ void main() {
databaseFactory = databaseFactoryFfi;
test('should initialize', () async {
- await clearDbDir();
- expect(() async { await Settings.create(); }, returnsNormally);
+ expect(() async { await Settings.create(dbPath: '/tmp/setting_test/should_init'); }, returnsNormally);
});
test('fields defaults should be set after initialization', () async {
- await clearDbDir();
-
- var s = await Settings.create();
+ var s = await Settings.create(dbPath: '/tmp/setting_test/should_default');
expect(s.graphStepSize, TimeStep.day);
expect(s.graphStart, DateTime.fromMillisecondsSinceEpoch(-1));
expect(s.graphEnd, DateTime.fromMillisecondsSinceEpoch(-1));
@@ -41,9 +35,8 @@ void main() {
expect(s.useExportCompatability, false);
});
- test('setting fields should notify listeners and change values', () async {
- await clearDbDir();
- var s = await Settings.create();
+ test('setting fields should save changes', () async {
+ var s = await Settings.create(dbPath: '/tmp/setting_test/should_save');
int i = 0;
s.addListener(() {
@@ -80,11 +73,10 @@ void main() {
expect(s.pulColor.value, 0xFF942DA7);
expect(s.allowManualTimeInput, false);
expect(s.useExportCompatability, true);
-
});
+
test('setting fields should notify listeners and change values', () async {
- await clearDbDir();
- var s = await Settings.create();
+ var s = await Settings.create(dbPath: '/tmp/setting_test/should_notify');
int i = 0;
s.addListener(() {
@@ -103,19 +95,9 @@ void main() {
s.allowManualTimeInput = false;
s.dateFormatString = 'yy:dd @ H:mm.ss';
s.useExportCompatability = true;
-
+
expect(i, 12);
});
});
-}
-
-Future<void> clearDbDir() async {
- databaseFactory.setDatabasesPath((await getDatabasesPath()).replaceAll('databases', 'test_databases'));
- try {
- Directory(await getDatabasesPath()).deleteSync(recursive: true);
- } catch (e) {
- print('no directory to delete!');
- }
- Directory(await getDatabasesPath()).create(recursive: true);
}
\ No newline at end of file