Commit f2e311e

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-03-17 09:35:39
implement DatabaseManager tests
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent bed485c
Changed files (2)
health_data_store/test/src/database_manager_test.dart
@@ -3,24 +3,165 @@ import 'package:sqflite_common/sqflite.dart';
 import 'package:sqflite_common_ffi/sqflite_ffi.dart';
 import 'package:test/test.dart';
 
+/// Initialize sqflite for test.
+void sqfliteTestInit() {
+  // Initialize ffi implementation
+  sqfliteFfiInit();
+  // Set global factory
+  databaseFactory = databaseFactoryFfi;
+}
+
 void main() {
-  group('DatabaseManager', () {
-    setUpAll(() => databaseFactory = databaseFactoryFfi);
-    test('should initialize without issues', () async {
-      final db = await DatabaseManager.load(await openDatabase(
-        inMemoryDatabasePath,
-      ));
-      expect(db.db.isOpen, isTrue);
+  sqfliteTestInit();
+  test('should initialize without issues', () async {
+    final db = await DatabaseManager.load(await openDatabase(
+      inMemoryDatabasePath,
+    ));
+    addTearDown(db.close);
+    expect(db.db.isOpen, isTrue);
+  });
+  test('should close', () async {
+    final db = await DatabaseManager.load(await openDatabase(
+      inMemoryDatabasePath,
+    ));
+    expect(db.db.isOpen, isTrue);
+    await db.close();
+    expect(db.db.isOpen, isFalse);
+  });
+  test('should setup medicine table', () async {
+    final db = await DatabaseManager.load(await openDatabase(
+      inMemoryDatabasePath,
+    ));
+    addTearDown(db.close);
+
+    final result = await db.db
+        .query('medicine', columns: ['medID', 'designation', 'defaultDose']);
+    expect(result, isEmpty);
+
+    final item1 = {
+      'medID': 1,
+      'designation': 'test',
+      'defaultDose': 42,
+    };
+    final id1 = await db.db.insert('medicine', item1);
+
+    final item2 = {
+      'medID': 2,
+      'designation': 'test2',
+      'defaultDose': 4.2,
+    };
+    final id2 = await db.db.insert('medicine', item2);
+
+    final item3 = {
+      'medID': 3,
+      'designation': 'test2',
+      'defaultDose': null
+    };
+    final id3 = await db.db.insert('medicine', item3);
+    expect(id2, greaterThan(id1));
+    expect(id3, greaterThan(id2));
+
+    final resultCols = await db.db
+        .query('medicine', columns: ['medID', 'designation', 'defaultDose']);
+    expect(resultCols, hasLength(equals(3)));
+    expect(resultCols.first.keys, containsAll([
+      'medID',
+      'designation',
+      'defaultDose',
+    ]));
+    expect(resultCols, containsAllInOrder([item1, item2, item3,]));
+
+    final resultAll = await db.db.query('medicine');
+    expect(resultAll, hasLength(equals(3)));
+    expect(resultCols.first.keys, containsAll([
+      'medID',
+      'designation',
+      'defaultDose',
+    ]));
+    expect(
+      resultCols.first.keys,
+      hasLength(resultCols.first.keys.length),
+      reason: 'no extra columns.'
+    );
+
+    final item4 = {
+      'medID': 1,
+      'designation': null,
+      'defaultDose': null
+    };
+    await expectLater(() async => db.db.insert('medicine', item4),
+        throwsException);
+  });
+  test('should create timestamps table correctly', () async {
+    final db = await DatabaseManager.load(await openDatabase(
+      inMemoryDatabasePath,
+    ));
+    addTearDown(db.close);
+    await db.db.insert('Timestamps', {
+      'entryID': 1,
+      'timestampUnixS': DateTime.now().millisecondsSinceEpoch ~/ 1000,
     });
-    test('should close', () async {
-      final db = await DatabaseManager.load(await openDatabase(
-        inMemoryDatabasePath,
-      ));
-      expect(db.db.isOpen, isTrue);
-      await db.close();
-      expect(db.db.isOpen, isFalse);
+    final data = await db.db.query('Timestamps');
+    expect(data, hasLength(1));
+    expect(data.first.keys, hasLength(2));
+
+    await expectLater(() async => db.db.insert('Timestamps', {
+      'entryID': 1,
+      'timestampUnixS': DateTime.now().millisecondsSinceEpoch ~/ 1000,
+    }), throwsException);
+    await expectLater(() async => db.db.insert('Timestamps', {
+      'entryID': 1,
+      'timestampUnixS': null,
+    }), throwsException);
+  });
+  test('should create intake table correctly', () async {
+    final db = await DatabaseManager.load(await openDatabase(
+      inMemoryDatabasePath,
+    ));
+    addTearDown(db.close);
+
+    await db.db.insert('Intake', {
+      'entryID': 2,
+      'medID': 1,
+      'dosis': 1,
+    });
+    final data = await db.db.query('Intake');
+    expect(data, hasLength(1));
+    expect(data.first.keys, hasLength(3));
+  });
+  test('should create timestamps sys,dia,pul tables correctly', () async {
+    final db = await DatabaseManager.load(await openDatabase(
+      inMemoryDatabasePath,
+    ));
+    addTearDown(db.close);
+    for (final t in ['Systolic', 'Diastolic', 'Pulse']) {
+      await db.db.insert(t, {
+        'entryID': 1,
+        'value': 1,
+      });
+      await db.db.insert(t, {
+        'entryID': 2,
+        'value': null,
+      });
+      final data = await db.db.query(t);
+      expect(data, hasLength(2));
+      expect(data.first.keys, hasLength(2));
+    }
+  });
+  test('should create notes table correctly', () async {
+    final db = await DatabaseManager.load(await openDatabase(
+      inMemoryDatabasePath,
+    ));
+    addTearDown(db.close);
+
+    await db.db.insert('Notes', {
+      'entryID': 2,
+      'note': 'This was a triumph',
+      'color': 0xFF990098,
     });
-    // TODO: test more
-    throw UnimplementedError('TODO');
+    final data = await db.db.query('Notes');
+    expect(data, hasLength(1));
+    expect(data.first.keys, hasLength(3));
+    expect(data.first['color'], equals(0xFF990098));
   });
 }
health_data_store/analysis_options.yaml
@@ -9,6 +9,7 @@ linter:
     - comment_references
     - no_wildcard_variable_uses
     - prefer_void_to_null
+    - unawaited_futures
 
     # Style:
     - always_declare_return_types