Add configurable due time suggestions

This commit is contained in:
rucki
2026-09-11 17:36:38 +02:00
parent 1cd2d06b4b
commit 504f58aa36
8 changed files with 90 additions and 7 deletions
+34
View File
@@ -392,8 +392,42 @@ class NavigationAndLayoutTests(TestCase):
response = self.client.get(reverse('settings'))
preferences = response.content.decode().split('id="preferences"', 1)[1].split('name="due_first"', 1)[0]
self.assertEqual(preferences.count('<div class="col-12"><label class="form-label">'), 2)
self.assertContains(response, 'name="due_time_suggestions"')
self.assertNotContains(response, 'name="default_item_kind"')
def test_default_due_time_suggestions_use_half_hour_steps(self):
item = Item.objects.create(owner=self.user, kind=Item.Kind.TODO, content='Timed')
response = self.client.get(reverse('edit_item', args=[item.id]))
self.assertContains(response, '<option value="08:00">')
self.assertContains(response, '<option value="08:30">')
self.assertContains(response, '<option value="23:30">')
def test_custom_due_time_suggestions_are_used_in_edit_forms(self):
self.preferences.due_time_suggestions = '08:00 Morgen\n12:00 Mittag\n17:30 Abend'
self.preferences.save(update_fields=['due_time_suggestions'])
item = Item.objects.create(owner=self.user, kind=Item.Kind.TODO, content='Timed')
response = self.client.get(reverse('edit_item', args=[item.id]))
self.assertContains(response, '<option value="08:00" label="Morgen">')
self.assertContains(response, '<option value="12:00" label="Mittag">')
self.assertNotContains(response, '<option value="08:30">')
def test_due_time_field_still_accepts_custom_time(self):
item = Item.objects.create(owner=self.user, kind=Item.Kind.TODO, content='Timed')
due_date = timezone.localdate().isoformat()
response = self.client.post(reverse('edit_item', args=[item.id]), {
'content': item.content, 'comment': '', 'visibility': Item.Visibility.PRIVATE,
'due_date': due_date, 'due_time': '10:17',
})
self.assertEqual(response.status_code, 200)
item.refresh_from_db()
self.assertEqual(timezone.localtime(item.due_at).time().replace(second=0, microsecond=0), time(10, 17))
def test_composer_menu_is_before_toolbar_and_file_controls(self):
response = self.client.get(reverse('index'))
html = response.content.decode()