TI-46: Display error in visual reports (day,week,month)

- Fix calculation of end_mins
- Add tests
This commit is contained in:
Thomas Lauf 2017-02-18 23:04:44 +01:00
parent c7cf7d7b46
commit 58f07d0266
3 changed files with 111 additions and 3 deletions

View file

@ -10,6 +10,8 @@
(thanks to Jan Stolarek)
- TI-42 refresh holiday script throws an error on nb-NO locale
(thanks to Jelle van der Waa).
- TI-46 Display error in visual reports (day,week,month)
(thanks to Michael Meier)
- TI-47 first call successfully creates new database but returns exit status 1
(thanks to Georg Sauthoff).
- TI-49 new theme files aren't installed

View file

@ -543,13 +543,14 @@ static void renderInterval (
auto start_mins = (clipped.range.start.hour () - first_hour) * 60 + clipped.range.start.minute ();
auto end_mins = (clipped.range.end.hour () - first_hour) * 60 + clipped.range.end.minute ();
if (end_mins == 0)
end_mins = (23 * 60) + 59;
if (clipped.range.end.hour () == 0)
end_mins += (clipped.range.end.day() - clipped.range.start.day()) * 24 * 60;
work = clipped.range.total ();
auto start_block = quantizeToNMinutes (start_mins, cell) / cell;
auto end_block = quantizeToNMinutes (end_mins == 0 ? 60 : end_mins, cell) / cell;
auto end_block = quantizeToNMinutes (end_mins == start_mins ? start_mins + 60 : end_mins, cell) / cell;
int start_offset = start_block + (spacing * (start_mins / 60));
int end_offset = end_block + (spacing * (end_mins / 60));

View file

@ -93,6 +93,111 @@ class TestChart(TestCase):
self.assertIn("Invalid value for 'reports.month.cell': 'foobar'", err)
def test_chart_day_with_less_than_one_minute_interval_at_day_start(self):
self.t("track 2016-01-15T00:00:00 - 2016-01-15T00:00:40 XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO")
code, out, err = self.t("day 2016-01-15 - 2016-01-16")
self.assertIn("""\
\nFri 15 XOXO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \
\n XOXO \
\n
Tracked 0:00:40
Available 23:59:20
Total 24:00:00
""", out)
def test_chart_day_with_less_than_one_minute_interval(self):
self.t(
"track 2016-01-15T02:00:00 - 2016-01-15T02:00:40 XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO")
code, out, err = self.t("day 2016-01-15 - 2016-01-16")
self.assertIn("""\
\nFri 15 0 1 XOXO 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \
\n XOXO \
\n
Tracked 0:00:40
Available 23:59:20
Total 24:00:00
""", out)
def test_chart_day_with_less_than_one_hour_interval_at_day_start(self):
self.t(
"track 2016-01-15T00:00:00 - 2016-01-15T00:30:00 XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO")
code, out, err = self.t("day 2016-01-15 - 2016-01-16")
self.assertIn("""\
\nFri 15 XO 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \
\n XO \
\n
Tracked 0:30:00
Available 23:30:00
Total 24:00:00
""", out)
def test_chart_day_with_less_than_one_hour_interval(self):
self.t(
"track 2016-01-15T02:00:00 - 2016-01-15T02:30:00 XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO")
code, out, err = self.t("day 2016-01-15 - 2016-01-16")
self.assertIn("""\
\nFri 15 0 1 XO 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \
\n XO \
\n
Tracked 0:30:00
Available 23:30:00
Total 24:00:00
""", out)
def test_chart_day_with_interval_over_day_border(self):
self.t(
"track 2016-01-15T23:00:00 - 2016-01-16T01:00:00 XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO")
code, out, err = self.t("day 2016-01-15 - 2016-01-17")
self.assertIn("""\
\nFri 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 XOXOX\
\n OXOXO\
\nSat 16 XOXOX1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \
\n OXOXO \
\n
Tracked 2:00:00
Available 46:00:00
Total 48:00:00
""", out)
def test_chart_day_with_interval_over_day_border(self):
self.t("track 2016-01-15T23:00:00 - 2016-01-16T01:00:00 XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO")
code, out, err = self.t("day 2016-01-15 - 2016-01-17")
self.assertIn("""\
\nFri 15 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 XOXOX\
\n OXOXO\
\nSat 16 XOXOX1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 \
\n OXOXO \
\n
Tracked 2:00:00
Available 46:00:00
Total 48:00:00
""", out)
def test_chart_day_with_interval_over_whole_day(self):
self.t("track 2016-01-15T00:00:00 - 2016-01-16T00:00:00 XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO")
code, out, err = self.t("day 2016-01-15 - 2016-01-16")
self.assertIn("""\
\nFri 15 XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO\
\n XOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXOXO\
\n
Tracked 24:00:00
Available 0:00:00
Total 24:00:00
""", out)
if __name__ == "__main__":
from simpletap import TAPTestRunner