Skip to content

Commit 0b273be

Browse files
committed
test: added test for all files under utils/taskfunctions
1 parent bd5d719 commit 0b273be

12 files changed

+819
-0
lines changed
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:taskwarrior/app/models/json/task.dart';
3+
import 'package:taskwarrior/app/utils/taskfunctions/comparator.dart';
4+
5+
void main() {
6+
group('compareTasks', () {
7+
Task createTask(
8+
{DateTime? entry,
9+
DateTime? modified,
10+
DateTime? start,
11+
DateTime? due,
12+
String? priority,
13+
String? project,
14+
List<String>? tags}) {
15+
return Task((b) => b
16+
..uuid = '1'
17+
..description = 'Task'
18+
..entry = entry ?? DateTime.now()
19+
..modified = modified
20+
..start = start
21+
..due = due
22+
..priority = priority
23+
..project = project
24+
..status = 'pending');
25+
}
26+
27+
test('should compare tasks by Created date', () {
28+
final task1 = createTask(entry: DateTime(2022, 1, 1));
29+
final task2 = createTask(entry: DateTime(2023, 1, 1));
30+
31+
final comparator = compareTasks('Created');
32+
expect(comparator(task1, task2), lessThan(0));
33+
expect(comparator(task2, task1), greaterThan(0));
34+
});
35+
36+
test('should compare tasks by Modified date', () {
37+
final task1 = createTask(modified: DateTime(2022, 1, 1));
38+
final task2 = createTask(modified: DateTime(2023, 1, 1));
39+
40+
final comparator = compareTasks('Modified');
41+
expect(comparator(task1, task2), lessThan(0));
42+
expect(comparator(task2, task1), greaterThan(0));
43+
expect(comparator(task1, task1), equals(0));
44+
});
45+
46+
test('should compare tasks by Start Time', () {
47+
final task1 = createTask(start: DateTime(2022, 1, 1));
48+
final task2 = createTask(start: DateTime(2023, 1, 1));
49+
50+
final comparator = compareTasks('Start Time');
51+
expect(comparator(task1, task2), lessThan(0));
52+
expect(comparator(task2, task1), greaterThan(0));
53+
});
54+
55+
test('should compare tasks by Due till', () {
56+
final task1 = createTask(due: DateTime(2022, 1, 1));
57+
final task2 = createTask(due: DateTime(2023, 1, 1));
58+
59+
final comparator = compareTasks('Due till');
60+
expect(comparator(task1, task2), lessThan(0));
61+
expect(comparator(task2, task1), greaterThan(0));
62+
});
63+
64+
test('should compare tasks by Priority', () {
65+
final task1 = createTask(priority: 'H');
66+
final task2 = createTask(priority: 'L');
67+
68+
final comparator = compareTasks('Priority');
69+
expect(comparator(task1, task2), greaterThan(0));
70+
expect(comparator(task2, task1), lessThan(0));
71+
});
72+
73+
test('should compare tasks by Project', () {
74+
final task1 = createTask(project: 'ProjectA');
75+
final task2 = createTask(project: 'ProjectB');
76+
77+
final comparator = compareTasks('Project');
78+
expect(comparator(task1, task2), lessThan(0));
79+
expect(comparator(task2, task1), greaterThan(0));
80+
});
81+
82+
test('should compare tasks by Tags', () {
83+
final task1 = createTask(tags: ['Tag1', 'Tag2']);
84+
final task2 = createTask(tags: ['Tag1', 'Tag3']);
85+
86+
final comparator = compareTasks('Tags');
87+
expect(comparator(task1, task2), 0);
88+
});
89+
90+
test('should compare tasks by Urgency', () {
91+
final task1 = createTask();
92+
final task2 = createTask();
93+
94+
// Define urgency function to compare tasks
95+
int urgency(Task task) => task.entry.microsecondsSinceEpoch;
96+
97+
final comparator = compareTasks('Urgency');
98+
expect(comparator(task1, task2), equals(0));
99+
});
100+
101+
test('should return 1 for unknown column', () {
102+
final task1 = createTask();
103+
final task2 = createTask();
104+
105+
final comparator = compareTasks('Unknown');
106+
expect(comparator(task1, task2), equals(1));
107+
});
108+
});
109+
}
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:taskwarrior/app/utils/taskfunctions/datetime_differences.dart';
3+
4+
void main() {
5+
group('DateTime Differences', () {
6+
test('age function should return correct string for years', () {
7+
final now = DateTime.now();
8+
final dt = now.subtract(const Duration(days: 2 * 365));
9+
expect(age(dt), '2y ');
10+
});
11+
12+
test('age function should return correct string for months', () {
13+
final now = DateTime.now();
14+
final dt = now.subtract(const Duration(days: 2 * 30));
15+
expect(age(dt), '2mo ');
16+
});
17+
18+
test('age function should return correct string for weeks', () {
19+
final now = DateTime.now();
20+
final dt = now.subtract(const Duration(days: 2 * 7));
21+
expect(age(dt), '2w ');
22+
});
23+
24+
test('age function should return correct string for days', () {
25+
final now = DateTime.now();
26+
final dt = now.subtract(const Duration(days: 2)); // 2 days
27+
expect(age(dt), '2d ');
28+
});
29+
30+
test('age function should return correct string for hours', () {
31+
final now = DateTime.now();
32+
final dt = now.subtract(const Duration(hours: 2)); // 2 hours
33+
expect(age(dt), '2h ');
34+
});
35+
36+
test('age function should return correct string for minutes', () {
37+
final now = DateTime.now();
38+
final dt = now.subtract(const Duration(minutes: 2)); // 2 minutes
39+
expect(age(dt), '2min ');
40+
});
41+
42+
test('age function should return correct string for seconds', () {
43+
final now = DateTime.now();
44+
final dt = now.subtract(const Duration(seconds: 2)); // 2 seconds
45+
expect(age(dt), '2s ');
46+
});
47+
48+
test('when function should return correct string for future dates', () {
49+
final now = DateTime.now();
50+
final dt = now.add(const Duration(days: 2)); // 2 days from now
51+
expect(when(dt), '1d ');
52+
});
53+
54+
test(
55+
'difference function should return correct string for various durations',
56+
() {
57+
expect(difference(const Duration(days: 2 * 365)), '2y ');
58+
expect(difference(const Duration(days: 2 * 30)), '2mo ');
59+
expect(difference(const Duration(days: 2 * 7)), '2w ');
60+
expect(difference(const Duration(days: 2)), '2d ');
61+
expect(difference(const Duration(hours: 2)), '2h ');
62+
expect(difference(const Duration(minutes: 2)), '2min ');
63+
expect(difference(const Duration(seconds: 2)), '2s ');
64+
65+
expect(difference(const Duration(days: -2)), '2d ago ');
66+
expect(difference(const Duration(hours: -2)), '2h ago ');
67+
expect(difference(const Duration(minutes: -2)), '2min ago ');
68+
expect(difference(const Duration(seconds: -2)), '2s ago ');
69+
});
70+
});
71+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:taskwarrior/app/models/models.dart';
3+
import 'package:taskwarrior/app/utils/taskfunctions/draft.dart';
4+
5+
void main() {
6+
group('Draft', () {
7+
late Task originalTask;
8+
late Draft draft;
9+
10+
setUp(() {
11+
originalTask = Task((b) => b
12+
..uuid = '1'
13+
..description = 'Original Task'
14+
..status = 'pending'
15+
..entry = DateTime.now());
16+
draft = Draft(originalTask);
17+
});
18+
19+
test('should initialize with original task', () {
20+
expect(draft.original, originalTask);
21+
expect(draft.draft, originalTask);
22+
});
23+
24+
test('should update draft with new values', () {
25+
draft.set('description', 'Updated Task');
26+
expect(draft.draft.description, 'Updated Task');
27+
});
28+
29+
test('should set start and end dates based on status', () {
30+
final now = DateTime.now();
31+
32+
draft.set('status', 'completed');
33+
expect(draft.draft.status, 'completed');
34+
expect(draft.draft.start, originalTask.start);
35+
expect(draft.draft.end?.isAfter(now), isTrue);
36+
37+
draft.set('status', 'pending');
38+
expect(draft.draft.status, 'pending');
39+
expect(draft.draft.end, isNull);
40+
});
41+
});
42+
}
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:taskwarrior/app/models/models.dart';
3+
import 'package:taskwarrior/app/utils/taskfunctions/modify.dart';
4+
5+
void main() {
6+
group('Modify', () {
7+
late Task originalTask;
8+
late Modify modify;
9+
late Task Function(String) getTask;
10+
late void Function(Task) mergeTask;
11+
late String uuid;
12+
13+
setUp(() {
14+
uuid = '1';
15+
originalTask = Task((b) => b
16+
..uuid = uuid
17+
..description = 'Original Task'
18+
..status = 'pending'
19+
..entry = DateTime.now());
20+
21+
getTask = (String id) => originalTask;
22+
mergeTask = (Task task) {
23+
originalTask = task;
24+
};
25+
26+
modify = Modify(getTask: getTask, mergeTask: mergeTask, uuid: uuid);
27+
});
28+
29+
test('should initialize with original task', () {
30+
expect(modify.draft, originalTask);
31+
});
32+
33+
test('should update draft with new values', () {
34+
modify.set('description', 'Updated Task');
35+
expect(modify.draft.description, 'Updated Task');
36+
});
37+
38+
test('should save changes correctly', () {
39+
final now = DateTime.now();
40+
modify.set('description', 'Updated Task');
41+
modify.save(modified: () => now);
42+
43+
expect(modify.draft.description, 'Updated Task');
44+
expect(modify.draft.modified, now);
45+
});
46+
});
47+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
import 'package:flutter_test/flutter_test.dart';
2+
import 'package:taskwarrior/app/models/models.dart';
3+
import 'package:taskwarrior/app/utils/taskfunctions/patch.dart';
4+
import 'package:built_collection/built_collection.dart';
5+
6+
void main() {
7+
group('patch', () {
8+
late Task originalTask;
9+
10+
setUp(() {
11+
originalTask = Task((b) => b
12+
..uuid = '1'
13+
..description = 'Original Task'
14+
..status = 'pending'
15+
..entry = DateTime.now()
16+
..tags = ListBuilder<String>(['tag1', 'tag2']));
17+
});
18+
19+
test('should update description', () {
20+
final updatedTask = patch(originalTask, {'description': 'Updated Task'});
21+
expect(updatedTask.description, 'Updated Task');
22+
});
23+
24+
test('should update status', () {
25+
final updatedTask = patch(originalTask, {'status': 'completed'});
26+
expect(updatedTask.status, 'completed');
27+
});
28+
29+
test('should update start date', () {
30+
final newStart = DateTime.now().add(const Duration(days: 1));
31+
final updatedTask = patch(originalTask, {'start': newStart});
32+
expect(updatedTask.start, newStart);
33+
});
34+
35+
test('should update end date', () {
36+
final newEnd = DateTime.now().add(const Duration(days: 1));
37+
final updatedTask = patch(originalTask, {'end': newEnd});
38+
expect(updatedTask.end, newEnd);
39+
});
40+
41+
test('should update due date', () {
42+
final newDue = DateTime.now().add(const Duration(days: 1));
43+
final updatedTask = patch(originalTask, {'due': newDue});
44+
expect(updatedTask.due, newDue);
45+
});
46+
47+
test('should update wait date', () {
48+
final newWait = DateTime.now().add(const Duration(days: 1));
49+
final updatedTask = patch(originalTask, {'wait': newWait});
50+
expect(updatedTask.wait, newWait);
51+
});
52+
53+
test('should update until date', () {
54+
final newUntil = DateTime.now().add(const Duration(days: 1));
55+
final updatedTask = patch(originalTask, {'until': newUntil});
56+
expect(updatedTask.until, newUntil);
57+
});
58+
59+
test('should update modified date', () {
60+
final newModified = DateTime.now().add(const Duration(days: 1));
61+
final updatedTask = patch(originalTask, {'modified': newModified});
62+
expect(updatedTask.modified, newModified);
63+
});
64+
65+
test('should update priority', () {
66+
final updatedTask = patch(originalTask, {'priority': 'H'});
67+
expect(updatedTask.priority, 'H');
68+
});
69+
70+
test('should update project', () {
71+
final updatedTask = patch(originalTask, {'project': 'New Project'});
72+
expect(updatedTask.project, 'New Project');
73+
});
74+
75+
test('should update tags', () {
76+
final newTags = ListBuilder<String>(['tag3', 'tag4']);
77+
final updatedTask = patch(originalTask, {'tags': newTags});
78+
expect(updatedTask.tags?.rebuild((b) => b).toList(), ['tag3', 'tag4']);
79+
});
80+
});
81+
}

0 commit comments

Comments
 (0)