Commit d62e21d

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-12-09 17:37:49
test and fix ExportColumnsManager
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 062e27b
Changed files (4)
lib/model/export_import/column.dart
@@ -8,64 +8,60 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart';
 
 /// Converters for [BloodPressureRecord] attributes.
 class NativeColumn extends ExportColumn {
-  NativeColumn._create(this._csvTitle, this._restoreableType, this._encode, this._decode) {
-    allColumns.add(this);
-  }
-  static final List<NativeColumn> allColumns = [];
-  
-  final String _csvTitle;
-  final RowDataFieldType _restoreableType;
-  final String Function(BloodPressureRecord record) _encode;
-  final Object? Function(String pattern) _decode;
-  
-  static final NativeColumn timestamp = NativeColumn._create(
-    'timestampUnixMs',
-    RowDataFieldType.timestamp,
-    (record) => record.creationTime.millisecondsSinceEpoch.toString(),
-    (pattern) {
-      final value = int.tryParse(pattern);
-      return (value == null) ? null : DateTime.fromMillisecondsSinceEpoch(value);
-    }
-  );
-  static final NativeColumn systolic = NativeColumn._create(
-    'systolic',
-    RowDataFieldType.sys,
-    (record) => record.systolic.toString(),
-    (pattern) => int.tryParse(pattern)
-  );
-  static final NativeColumn diastolic = NativeColumn._create(
-    'diastolic',
-    RowDataFieldType.dia,
-    (record) => record.diastolic.toString(),
-    (pattern) => int.tryParse(pattern)
-  );
-  static final NativeColumn pulse = NativeColumn._create(
-    'pulse',
-    RowDataFieldType.pul,
-    (record) => record.pulse.toString(),
-    (pattern) => int.tryParse(pattern)
-  );
-  static final NativeColumn notes = NativeColumn._create(
-    'notes',
-    RowDataFieldType.notes,
-    (record) => record.notes,
-    (pattern) => pattern
-  );
-  static final NativeColumn color = NativeColumn._create(
-    'color',
-    RowDataFieldType.needlePin,
-    (record) => record.needlePin?.color.value.toString() ?? '',
-    (pattern) {
-      final value = int.tryParse(pattern);
-      if (value == null) return null;
-      return MeasurementNeedlePin(Color(value));
-    }
-  );
-  static final NativeColumn needlePin = NativeColumn._create(
+  NativeColumn._create(this._csvTitle, this._restoreableType, this._encode, this._decode);
+
+  /// All native columns that exist.
+  ///
+  /// They are all part of [ExportImportPreset.bloodPressureApp].
+  static final List<NativeColumn> allColumns = [
+    NativeColumn._create(
+      'timestampUnixMs',
+      RowDataFieldType.timestamp,
+          (record) => record.creationTime.millisecondsSinceEpoch.toString(),
+          (pattern) {
+        final value = int.tryParse(pattern);
+        return (value == null) ? null : DateTime.fromMillisecondsSinceEpoch(value);
+      }
+    ),
+    NativeColumn._create(
+      'systolic',
+      RowDataFieldType.sys,
+      (record) => record.systolic.toString(),
+      (pattern) => int.tryParse(pattern)
+    ),
+    NativeColumn._create(
+      'diastolic',
+      RowDataFieldType.dia,
+      (record) => record.diastolic.toString(),
+      (pattern) => int.tryParse(pattern)
+    ),
+    NativeColumn._create(
+      'pulse',
+      RowDataFieldType.pul,
+      (record) => record.pulse.toString(),
+      (pattern) => int.tryParse(pattern)
+    ),
+    NativeColumn._create(
+      'notes',
+      RowDataFieldType.notes,
+      (record) => record.notes,
+      (pattern) => pattern
+    ),
+    NativeColumn._create(
+      'color',
+      RowDataFieldType.needlePin,
+          (record) => record.needlePin?.color.value.toString() ?? '',
+          (pattern) {
+        final value = int.tryParse(pattern);
+        if (value == null) return null;
+        return MeasurementNeedlePin(Color(value));
+      }
+    ),
+    NativeColumn._create(
       'needlePin',
       RowDataFieldType.needlePin,
-      (record) => jsonEncode(record.needlePin?.toJson()),
-      (pattern) {
+          (record) => jsonEncode(record.needlePin?.toJson()),
+          (pattern) {
         final json = jsonDecode(pattern);
         if (json is! Map<String, dynamic>) return null;
         try {
@@ -74,7 +70,13 @@ class NativeColumn extends ExportColumn {
           return null;
         }
       }
-  );
+    )
+  ];
+  
+  final String _csvTitle;
+  final RowDataFieldType _restoreableType;
+  final String Function(BloodPressureRecord record) _encode;
+  final Object? Function(String pattern) _decode;
 
   @override
   String get csvTitle => _csvTitle;
@@ -107,11 +109,19 @@ class NativeColumn extends ExportColumn {
 /// Useful columns that are present by default and recreatable through a formatPattern.
 class BuildInColumn extends ExportColumn {
   /// Creates a build in column and adds it to allColumns.
-  BuildInColumn._create(this.internalIdentifier, this.csvTitle, String formatString, this._userTitle) {
-    allColumns.add(this);
-  }
+  BuildInColumn._create(this.internalIdentifier, this.csvTitle, String formatString, this._userTitle);
   
-  static final List<BuildInColumn> allColumns = [];
+  static final List<BuildInColumn> allColumns = [
+    pulsePressure,
+    mhDate,
+    mhSys,
+    mhDia,
+    mhPul,
+    mhDesc,
+    mhTags,
+    mhWeight,
+    mhOxygen,
+  ];
   
   static final pulsePressure = BuildInColumn._create(
       'buildin.pulsePressure',
lib/model/export_import/export_configuration.dart
@@ -51,14 +51,7 @@ class ActiveExportColumnConfiguration extends ChangeNotifier {
   UnmodifiableListView<ExportColumn> getActiveColumns(ExportColumnsManager availableColumns) => UnmodifiableListView(
     switch (_activePreset) {
       ExportImportPreset.none => _userSelectedColumns.map((e) => availableColumns.getColumn(e)).whereNotNull(),
-      ExportImportPreset.bloodPressureApp => [
-        NativeColumn.timestamp,
-        NativeColumn.systolic,
-        NativeColumn.diastolic,
-        NativeColumn.pulse,
-        NativeColumn.notes,
-        NativeColumn.color,
-      ],
+      ExportImportPreset.bloodPressureApp => NativeColumn.allColumns,
       ExportImportPreset.myHeart => [
         BuildInColumn.mhDate,
         BuildInColumn.mhSys,
@@ -79,6 +72,8 @@ enum ExportImportPreset {
   none,
 
   /// Default preset, that ensures working exports and restoration.
+  ///
+  /// All [NativeColumn]s.
   bloodPressureApp,
   myHeart;
 
lib/model/storage/export_columns_store.dart
@@ -41,12 +41,10 @@ class ExportColumnsManager extends ChangeNotifier { // TODO: separate ExportColu
     notifyListeners();
   }
 
-  // TODO test
   /// Get any defined column (user or build in) by identifier.
   ExportColumn? getColumn(String identifier) => 
       firstWhere((c) => c.internalIdentifier == identifier);
-  
-  // TODO test / fix
+
   /// Get the first of column that satisfies [test].
   /// 
   /// Checks in the order: 
test/model/export_import/export_columns_store_test.dart
@@ -0,0 +1,28 @@
+
+import 'package:blood_pressure_app/model/export_import/column.dart';
+import 'package:blood_pressure_app/model/storage/export_columns_store.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+  group('ExportColumnsManager', () {
+    test('should get user column by id', () {
+      final manager = ExportColumnsManager();
+      final column = UserColumn('customColumn', '', '');
+      manager.addOrUpdate(column);
+      final returnedColumn = manager.getColumn(column.internalIdentifier);
+      expect(returnedColumn, column);
+    });
+    test('should get NativeColumn by id', () {
+      final manager = ExportColumnsManager();
+      final column = NativeColumn.allColumns.first;
+      final returnedColumn = manager.getColumn(column.internalIdentifier);
+      expect(returnedColumn, column);
+    });
+    test('should get BuildInColumn by id', () {
+      final manager = ExportColumnsManager();
+      final column = BuildInColumn.allColumns.first;
+      final returnedColumn = manager.getColumn(column.internalIdentifier);
+      expect(returnedColumn, column);
+    });
+  });
+}