From 1a208873a390e6d93b3e7b94edf47f0587699b18 Mon Sep 17 00:00:00 2001 From: doodlezucc <electerminator@gmail.com> Date: Tue, 21 Nov 2023 11:19:28 +0100 Subject: [PATCH] improve start of week calculation --- lib/util/date_extension.dart | 3 ++- test/start_of_week_test.dart | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 test/start_of_week_test.dart diff --git a/lib/util/date_extension.dart b/lib/util/date_extension.dart index c7042b8..bf12ddb 100644 --- a/lib/util/date_extension.dart +++ b/lib/util/date_extension.dart @@ -24,6 +24,7 @@ extension DateExtension on DateTime { } DateTime atStartOfWeek() { - return subtract(Duration(days: weekday - 1)); + final date = subtract(Duration(days: weekday - 1)); + return DateTime(date.year, date.month, date.day); } } diff --git a/test/start_of_week_test.dart b/test/start_of_week_test.dart new file mode 100644 index 0000000..745f47b --- /dev/null +++ b/test/start_of_week_test.dart @@ -0,0 +1,33 @@ +import 'package:better_untis/util/date_extension.dart'; +import 'package:flutter_test/flutter_test.dart'; + +void main() { + final startOfMonday = DateTime(2023, 3, 20, 0, 0); + + test('Start of week at start of monday', () { + final startOfWeek = startOfMonday.atStartOfWeek(); + + expect(startOfWeek, startOfMonday); + }); + + test('Start of week at end of tuesday', () { + final endOfTuesday = DateTime(2023, 3, 21, 23, 59); + final startOfWeek = endOfTuesday.atStartOfWeek(); + + expect(startOfWeek, startOfMonday); + }); + + test('Start of week at end of sunday', () { + final endOfSaturday = DateTime(2023, 3, 26, 23, 59); + final startOfWeek = endOfSaturday.atStartOfWeek(); + + expect(startOfWeek, startOfMonday); + }); + + test('Start of week at end of next monday', () { + final startOfNextMonday = DateTime(2023, 3, 27, 0, 0); + final startOfWeek = startOfNextMonday.atStartOfWeek(); + + expect(startOfWeek, startOfNextMonday); + }); +} -- GitLab