forked from vikunja/app
Added unit tests for date parsing
This commit is contained in:
parent
9bc5f30345
commit
ee9728c756
|
@ -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<TaskEditPage> {
|
|||
|
||||
@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<TaskEditPage> {
|
|||
: _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<TaskEditPage> {
|
|||
}
|
||||
|
||||
_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();
|
||||
|
|
44
lib/utils/repeat_after_parse.dart
Normal file
44
lib/utils/repeat_after_parse.dart
Normal file
|
@ -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;
|
||||
}
|
46
test/parse_repeat_after_test.dart
Normal file
46
test/parse_repeat_after_test.dart
Normal file
|
@ -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);
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue
Block a user