Commit 239c286

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-03-08 14:37:22
test record parsing result
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 2ae7d98
Changed files (2)
lib
model
test
lib/model/export_import/record_parsing_result.dart
@@ -21,7 +21,11 @@ class RecordParsingResult {
   /// Indicates that there is no result.
   bool hasError() => _error != null;
 
-  /// Returns the passed list on success or the result of [errorHandler] in case a error is present.
+  /// The returned error, if present.
+  RecordParsingError? get error => _error;
+
+  /// Returns the passed list on success or the result of [errorHandler] in case
+  /// a error is present.
   ///
   /// When [errorHandler] returns null a empty list is passed.
   List<BloodPressureRecord> getOr(List<BloodPressureRecord>? Function(RecordParsingError error) errorHandler) {
test/model/export_import/record_parsing_result_test.dart
@@ -0,0 +1,56 @@
+
+import 'package:blood_pressure_app/model/export_import/record_parsing_result.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'record_formatter_test.dart';
+
+void main() {
+  test('should indicate when error is present', () async {
+    final result = RecordParsingResult.err(RecordParsingErrorEmptyFile());
+    expect(result.hasError(), isTrue);
+  });
+  test('should indicate when no error is present', () async {
+    final result = RecordParsingResult.ok([mockRecord()]);
+    expect(result.hasError(), isFalse);
+  });
+  test('should return error through getter', () async {
+    final okResult = RecordParsingResult.ok([mockRecord()]);
+    expect(okResult.error, isNull);
+
+    final errResult = RecordParsingResult.err(RecordParsingErrorUnparsableField(42, 'fieldContents'));
+    expect(errResult.error, isNotNull);
+    expect(errResult.error, isA<RecordParsingErrorUnparsableField>()
+      .having((p0) => p0.lineNumber, 'line number', 42)
+      .having((p0) => p0.fieldContents, 'contents', 'fieldContents'),);
+  });
+  test('should normally return value when no error is present', () async {
+    final record = mockRecord();
+
+    final result = RecordParsingResult.ok([record]);
+    final value = result.getOr((error) {
+      fail('Error function called incorrectly.');
+    });
+    expect(value.length, 1);
+    expect(value.first, record);
+  });
+  test('should call error function when error is present', () async {
+    final result = RecordParsingResult.err(RecordParsingErrorExpectedMoreFields(123));
+    final value = result.getOr((error) {
+      expect(error, isA<RecordParsingErrorExpectedMoreFields>()
+          .having((p0) => p0.lineNumber, 'line number', 123),);
+      return [mockRecord(sys: 1234567)];
+    });
+    expect(value.length, 1);
+    expect(value.first.systolic, 1234567);
+  });
+  test('should return empty list when error function returns null', () async {
+    final result = RecordParsingResult.err(RecordParsingErrorExpectedMoreFields(123));
+    final value = result.getOr((error) {
+      expect(error, isA<RecordParsingErrorExpectedMoreFields>()
+          .having((p0) => p0.lineNumber, 'line number', 123),);
+      return null;
+    });
+    expect(value, isEmpty);
+  });
+}
+