Commit 239c286
Changed files (2)
lib
model
export_import
test
model
export_import
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);
+ });
+}
+