From ee9728c75663c1a2459966d5d89f6fb08ddb8a34 Mon Sep 17 00:00:00 2001 From: konrad Date: Sun, 17 Mar 2019 16:21:43 +0100 Subject: [PATCH] Added unit tests for date parsing --- lib/pages/list/task_edit.dart | 8 ++++-- lib/utils/repeat_after_parse.dart | 44 +++++++++++++++++++++++++++++ test/parse_repeat_after_test.dart | 46 +++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 lib/utils/repeat_after_parse.dart create mode 100644 test/parse_repeat_after_test.dart diff --git a/lib/pages/list/task_edit.dart b/lib/pages/list/task_edit.dart index ecfeba1..31d28a7 100644 --- a/lib/pages/list/task_edit.dart +++ b/lib/pages/list/task_edit.dart @@ -9,6 +9,7 @@ import 'package:vikunja_app/models/task.dart'; import 'package:vikunja_app/theme/button.dart'; import 'package:vikunja_app/theme/buttonText.dart'; import 'package:vikunja_app/theme/constants.dart'; +import 'package:vikunja_app/utils/repeat_after_parse.dart'; class TaskEditPage extends StatefulWidget { final Task task; @@ -34,6 +35,9 @@ class _TaskEditPageState extends State { @override Widget build(BuildContext ctx) { + _repeatAfterType = getRepeatAfterTypeFromDuration(widget.task.repeatAfter); + _repeatAfterValue = getRepeatAfterValueFromDuration(widget.task.repeatAfter); + return Scaffold( appBar: AppBar( title: Text('Edit Task'), @@ -112,8 +116,7 @@ class _TaskEditPageState extends State { : _repeatAfterValue.toString(), onSaved: (repeatAfter) => _repeatAfter = _makeDurationFromType( - repeatAfter, - _repeatAfterType), + repeatAfter, _repeatAfterType), decoration: new InputDecoration( labelText: 'Repeat after', border: InputBorder.none, @@ -207,7 +210,6 @@ class _TaskEditPageState extends State { } _makeDurationFromType(String value, String type) { - // Return an empty duration if either of the values is not set if (value == null || value == '' || type == null || type == '') { return Duration(); diff --git a/lib/utils/repeat_after_parse.dart b/lib/utils/repeat_after_parse.dart new file mode 100644 index 0000000..924e910 --- /dev/null +++ b/lib/utils/repeat_after_parse.dart @@ -0,0 +1,44 @@ +getRepeatAfterTypeFromDuration(Duration repeatAfter) { + if (repeatAfter == null || repeatAfter.inSeconds == 0) { + return null; + } + + // if its dividable by 24, its something with days, otherwise hours + if (repeatAfter.inHours % 24 == 0) { + if (repeatAfter.inDays % 7 == 0) { + return 'Weeks'; + } else if (repeatAfter.inDays % 365 == 0) { + return 'Years'; + } else if (repeatAfter.inDays % 30 == 0) { + return 'Months'; + } else { + return 'Days'; + } + } + return 'Hours'; +} + +getRepeatAfterValueFromDuration(Duration repeatAfter) { + if (repeatAfter == null || repeatAfter.inSeconds == 0) { + return null; + } + + // if its dividable by 24, its something with days, otherwise hours + if (repeatAfter.inHours % 24 == 0) { + if (repeatAfter.inDays % 7 == 0) { + // Weeks + return (repeatAfter.inDays / 7).round(); + } else if (repeatAfter.inDays % 365 == 0) { + // Years + return (repeatAfter.inDays / 365).round(); + } else if (repeatAfter.inDays % 30 == 0) { + // Months + return (repeatAfter.inDays / 30).round(); + } else { + return repeatAfter.inDays; // Days + } + } + + // Otherwise Hours + return repeatAfter.inHours; +} diff --git a/test/parse_repeat_after_test.dart b/test/parse_repeat_after_test.dart new file mode 100644 index 0000000..54f7373 --- /dev/null +++ b/test/parse_repeat_after_test.dart @@ -0,0 +1,46 @@ +import 'package:test/test.dart'; +import 'package:vikunja_app/utils/repeat_after_parse.dart'; + +void main() { + test('Repeat after hours', () { + Duration testDuration = Duration(hours: 6); + + expect(getRepeatAfterTypeFromDuration(testDuration), 'Hours'); + expect(getRepeatAfterValueFromDuration(testDuration), 6); + }); + + test('Repeat after days', () { + Duration testDuration = Duration(days: 6); + + expect(getRepeatAfterTypeFromDuration(testDuration), 'Days'); + expect(getRepeatAfterValueFromDuration(testDuration), 6); + }); + + test('Repeat after weeks', () { + Duration testDuration = Duration(days: 6 * 7); + + expect(getRepeatAfterTypeFromDuration(testDuration), 'Weeks'); + expect(getRepeatAfterValueFromDuration(testDuration), 6); + }); + + test('Repeat after months', () { + Duration testDuration = Duration(days: 6 * 30); + + expect(getRepeatAfterTypeFromDuration(testDuration), 'Months'); + expect(getRepeatAfterValueFromDuration(testDuration), 6); + }); + + test('Repeat after years', () { + Duration testDuration = Duration(days: 6 * 365); + + expect(getRepeatAfterTypeFromDuration(testDuration), 'Years'); + expect(getRepeatAfterValueFromDuration(testDuration), 6); + }); + + test('Repeat null value', () { + Duration testDuration = Duration(); + + expect(getRepeatAfterTypeFromDuration(testDuration), null); + expect(getRepeatAfterValueFromDuration(testDuration), null); + }); +} \ No newline at end of file