• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

asartalo / diligence / 8639939824

11 Apr 2024 01:02AM UTC coverage: 93.724% (-0.4%) from 94.135%
8639939824

push

github

asartalo
feat: tasks can have deadlines

Plus some refactorings. I know, I should have done this before the adding the deadline feature.

196 of 208 new or added lines in 13 files covered. (94.23%)

6 existing lines in 2 files now uncovered.

1344 of 1434 relevant lines covered (93.72%)

2.1 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

90.7
/lib/models/modified_task.dart
1
// Diligence - A Task Management App
2
//
3
// Copyright (C) 2024 Wayne Duran <asartalo@gmail.com>
4
//
5
// This program is free software: you can redistribute it and/or modify it under
6
// the terms of the GNU General Public License as published by the Free Software
7
// Foundation, either version 3 of the License, or (at your option) any later
8
// version.
9
//
10
// This program is distributed in the hope that it will be useful, but WITHOUT
11
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12
// FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
13
//
14
// You should have received a copy of the GNU General Public License along with
15
// this program. If not, see <https://www.gnu.org/licenses/>.
16

17
import 'package:clock/clock.dart';
18
import 'package:flutter/foundation.dart' show immutable;
19

20
import 'persisted_task.dart';
21
import 'task.dart';
22
import 'task_commons.dart';
23

24
bool sameTime(DateTime? a, DateTime? b) {
5✔
25
  if (a == null && b == null) return true;
26
  if (a == null || b == null) return false;
27

28
  return a.isAtSameMomentAs(b);
×
29
}
30

31
@immutable
32
class ModifiedTask with TaskCommons implements Task {
33
  final PersistedTask originalTask;
34
  final _modifiedFields = <String>{};
35

36
  @override
3✔
37
  int get id => originalTask.id;
6✔
38

39
  @override
40
  final int? parentId;
41

42
  @override
43
  final DateTime? doneAt;
44

45
  @override
4✔
46
  bool get done => doneAt != null;
4✔
47

48
  @override
49
  final String name;
50

51
  @override
52
  final String? details;
53

54
  @override
×
55
  String get uid => originalTask.uid;
×
56

57
  @override
58
  final bool expanded;
59

60
  @override
2✔
61
  DateTime get createdAt => originalTask.createdAt;
4✔
62

63
  @override
64
  final DateTime updatedAt;
65

66
  @override
67
  final DateTime? deadlineAt;
68

69
  ModifiedTask({
5✔
70
    this.parentId,
71
    this.doneAt,
72
    this.name = '',
73
    this.details,
74
    this.expanded = false,
75
    this.deadlineAt,
76
    required this.originalTask,
77
  }) : updatedAt = clock.now() {
10✔
78
    _checkModifications(
5✔
79
      originalTask,
5✔
80
      parentId: parentId,
5✔
81
      doneAt: doneAt,
5✔
82
      name: name,
5✔
83
      details: details,
5✔
84
      expanded: expanded,
5✔
85
      deadlineAt: deadlineAt,
5✔
86
    );
87
  }
88

89
  @override
3✔
90
  ModifiedTask copyWith({
91
    int? id,
92
    int? parentId,
93
    bool? done,
94
    DateTime? doneAt,
95
    String? uid,
96
    String? name,
97
    String? details,
98
    bool? expanded,
99
    DateTime? createdAt,
100
    DateTime? updatedAt,
101
    DateTime? deadlineAt,
102
  }) {
103
    return ModifiedTask(
3✔
104
      originalTask: originalTask,
3✔
105
      parentId: parentId ?? this.parentId,
3✔
106
      doneAt: normalizedDoneAt(done, doneAt),
3✔
107
      name: name ?? this.name,
3✔
108
      details: normalizedDetails(details),
3✔
109
      expanded: expanded ?? this.expanded,
3✔
110
      deadlineAt: deadlineAt ?? this.deadlineAt,
3✔
111
    );
112
  }
113

114
  void _checkModifications(
5✔
115
    Task original, {
116
    int? parentId,
117
    DateTime? doneAt,
118
    String? name,
119
    String? details,
120
    bool? expanded,
121
    DateTime? deadlineAt,
122
  }) {
123
    if (parentId != original.parentId) _modifiedFields.add('parentId');
12✔
124
    if (!sameTime(doneAt, original.doneAt)) _modifiedFields.add('doneAt');
18✔
125
    if (name != original.name) _modifiedFields.add('name');
20✔
126
    if (details != original.details) _modifiedFields.add('details');
16✔
127
    if (expanded != original.expanded) _modifiedFields.add('expanded');
14✔
128
    if (!sameTime(deadlineAt, original.deadlineAt)) {
10✔
NEW
129
      _modifiedFields.add('deadlineAt');
×
130
    }
131
  }
132

133
  Set<String> modifiedFields() {
3✔
134
    return _modifiedFields;
3✔
135
  }
136

137
  bool isModified(String field) {
3✔
138
    return modifiedFields().contains(field);
6✔
139
  }
140

141
  bool hasToggledDone() {
2✔
142
    return isModified('doneAt');
2✔
143
  }
144
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc