main
  1
  2import 'package:blood_pressure_app/model/blood_pressure_analyzer.dart';
  3import 'package:flutter_test/flutter_test.dart';
  4import 'package:health_data_store/health_data_store.dart';
  5
  6void main() {
  7  test('should return averages', () {
  8    final m = BloodPressureAnalyser([
  9      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(1), 122, 87, 65),
 10      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62),
 11      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73),
 12    ]);
 13
 14    expect(m.avgSys?.mmHg, 111);
 15    expect(m.avgDia?.mmHg, 73);
 16    expect(m.avgPul, 66);
 17  });
 18
 19  test('should return max', () {
 20    final a = BloodPressureAnalyser([
 21      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(1), 123, 87, 65),
 22      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62),
 23      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73),
 24      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(4), 111, 73, 73),
 25    ]);
 26
 27    expect(a.maxSys?.mmHg, 123);
 28    expect(a.maxDia?.mmHg, 87);
 29    expect(a.maxPul, 73);
 30  });
 31
 32  test('should return min', () {
 33    final a = BloodPressureAnalyser([
 34      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(1), 123, 87, 65),
 35      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(2), 100, 60, 62),
 36      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(3), 111, 73, 73),
 37      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(4), 100, 60, 62),
 38    ]);
 39
 40    expect(a.minSys?.mmHg, 100);
 41    expect(a.minDia?.mmHg, 60);
 42    expect(a.minPul, 62);
 43  });
 44
 45  test('should know count', () {
 46    final m = BloodPressureAnalyser([
 47      for (int i = 1; i < 101; i++)
 48        mockRecordPos(DateTime.fromMillisecondsSinceEpoch(i), 0, 0, 0),
 49    ]);
 50    expect(m.count, 100);
 51  });
 52
 53  test('should determine special days', () {
 54    final m = BloodPressureAnalyser([mockRecordPos(DateTime.fromMillisecondsSinceEpoch(100), 0, 0, 0),
 55      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(20), 0, 0, 0),
 56      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(9000000), 0, 0, 0),
 57      mockRecordPos(DateTime.fromMillisecondsSinceEpoch(3124159), 0, 0, 0),
 58    ]);
 59
 60    expect((m.firstDay), DateTime.fromMillisecondsSinceEpoch(20));
 61    expect((m.lastDay), DateTime.fromMillisecondsSinceEpoch(9000000));
 62  });
 63  
 64  test('groups analyzers for all hours', () {
 65    final analyzer = BloodPressureAnalyser([]);
 66    final groups = analyzer.groupAnalysers();
 67    expect(groups, hasLength(24));
 68    expect(groups, everyElement(isA<BloodPressureAnalyser>().having((a) => a.count, 'count', 0)));
 69  });
 70
 71  test('creates groups correctly', () {
 72    final analyzer = BloodPressureAnalyser([
 73      mockRecordPos(DateTime(2000, 1, 1, 5), 123),
 74      mockRecordPos(DateTime(2000, 1, 1, 5), 123),
 75      mockRecordPos(DateTime(2000, 1, 1, 5), 123),
 76      mockRecordPos(DateTime(2000, 1, 1, 8), 123),
 77      mockRecordPos(DateTime(2000, 1, 1, 12), 123),
 78      mockRecordPos(DateTime(2000, 1, 1, 12), 123),
 79      mockRecordPos(DateTime(2000, 1, 1, 19), 123),
 80      mockRecordPos(DateTime(2000, 1, 1, 19), 0, 122),
 81      mockRecord(time: DateTime(2000, 1, 1, 19), pul: 12),
 82      mockRecordPos(DateTime(2000, 1, 1, 23, 40), 123),
 83    ]);
 84    final groups = analyzer.groupAnalysers();
 85    expect(groups[5].count, 3);
 86    expect(groups[8].count, 1);
 87    expect(groups[12].count, 2);
 88    expect(groups[19].count, 3);
 89    expect(groups[0].count, 1);
 90
 91    for (final i in [1,2,3,4,6,7,9,10,11,3,14,15,16,17,18,20,21,22,23]) {
 92      expect(groups[i].count, 0);
 93    }
 94  });
 95}
 96
 97BloodPressureRecord mockRecordPos([
 98  DateTime? time,
 99  int? sys,
100  int? dia,
101  int? pul,
102]) => mockRecord(
103  time: time ?? DateTime.now(),
104  sys: sys,
105  dia: dia,
106  pul: pul,
107);
108
109BloodPressureRecord mockRecord({
110  DateTime? time,
111  int? sys,
112  int? dia,
113  int? pul,
114}) => BloodPressureRecord(
115  time: time ?? DateTime.now(),
116  sys: sys == null ? null : Pressure.mmHg(sys),
117  dia: dia == null ? null : Pressure.mmHg(dia),
118  pul: pul,
119);