Commit 57a7642

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-12-30 15:20:10
test intake history serialization
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 592bc1c
Changed files (2)
lib
model
blood_pressure
test
lib/model/blood_pressure/medicine/intake_history.dart
@@ -28,8 +28,6 @@ class IntakeHistory extends ChangeNotifier {
 
   /// Serializes the current state of the object into a string.
   String serialize() => _medicineIntakes.map((e) => e.serialize()).join('\n');
-  // TODO test serialization
-
   /// List of all medicine intakes sorted in ascending order.
   ///
   /// Can contain multiple medicine intakes at the same time.
@@ -125,4 +123,18 @@ class IntakeHistory extends ChangeNotifier {
 
     return idx + 1;
   }
+
+  @override
+  bool operator ==(Object other) =>
+      identical(this, other) ||
+      other is IntakeHistory && runtimeType == other.runtimeType &&
+        (){
+          for (final e in _medicineIntakes) {
+            if (!other._medicineIntakes.contains(e)) return false;
+          }
+          return true;
+        }();
+
+  @override
+  int get hashCode => _medicineIntakes.hashCode;
 }
\ No newline at end of file
test/model/medicine/intake_history_test.dart
@@ -3,6 +3,7 @@ import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 
 import 'medicine_intake_test.dart';
+import 'medicine_test.dart';
 
 void main() {
   group('IntakeHistory', () { 
@@ -149,5 +150,23 @@ void main() {
       ));
       expect(found.length, 0);
     });
+    test('should serialize and deserialize', () {
+      final meds = [mockMedicine(defaultDosis: 1), mockMedicine(defaultDosis: 2),mockMedicine(defaultDosis: 3), mockMedicine(defaultDosis: 4)];
+      final history = IntakeHistory([
+        mockIntake(dosis: 123, timeMs: 1235, medicine: meds[0]),
+        mockIntake(dosis: 123, timeMs: 1235, medicine: meds[0]),
+        mockIntake(dosis: 123, timeMs: 1235, medicine: meds[1]),
+        mockIntake(dosis: 123, timeMs: 1235, medicine: meds[2]),
+        mockIntake(dosis: 123, timeMs: 132, medicine: meds[3]),
+        mockIntake(dosis: 1232, timeMs: 132, medicine: meds[3]),
+        mockIntake(dosis: 1232, timeMs: 132, medicine: meds[3]),
+        mockIntake(dosis: 1232, timeMs: 132, medicine: meds[3]),
+        mockIntake(dosis: 123, timeMs: 1235, medicine: meds[3]),
+      ]);
+      final deserializedHistory = IntakeHistory.deserialize(history.serialize(), meds);
+
+      expect(deserializedHistory.serialize(), history.serialize());
+      expect(deserializedHistory, history);
+    });
   });
 }
\ No newline at end of file