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