Improve quick composer defaults and due filter
This commit is contained in:
+33
-5
@@ -1,11 +1,13 @@
|
||||
import shutil
|
||||
import tempfile
|
||||
from datetime import datetime, time, timedelta
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.core.files.uploadedfile import SimpleUploadedFile
|
||||
from django.test import TestCase, override_settings
|
||||
from django.urls import reverse
|
||||
from django.utils import timezone
|
||||
|
||||
from .models import ApiKey, Attachment, Collection, CollectionSection, Item, Tag, Team, TeamMembership, UserPreference
|
||||
from .templatetags.markdown_extras import markdown, markdown_title
|
||||
@@ -49,6 +51,11 @@ class DefaultItemKindTests(TestCase):
|
||||
self.assertRedirects(response, reverse('index'))
|
||||
self.assertEqual(Item.objects.get().kind, Item.Kind.TODO)
|
||||
|
||||
def test_quick_create_can_override_default_from_composer(self):
|
||||
response = self.client.post(reverse('index'), {'content': 'Composer note', 'default_item_kind': Item.Kind.NOTE})
|
||||
self.assertRedirects(response, reverse('index'))
|
||||
self.assertEqual(Item.objects.get().kind, Item.Kind.NOTE)
|
||||
|
||||
def test_explicit_command_overrides_default(self):
|
||||
kind, _, content, _ = parse_quick_content('/note Explicit note', Item.Kind.TODO)
|
||||
self.assertEqual(kind, Item.Kind.NOTE)
|
||||
@@ -203,7 +210,8 @@ class NavigationAndLayoutTests(TestCase):
|
||||
def test_preference_selects_are_stacked(self):
|
||||
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">'), 3)
|
||||
self.assertEqual(preferences.count('<div class="col-12"><label class="form-label">'), 2)
|
||||
self.assertNotContains(response, 'name="default_item_kind"')
|
||||
|
||||
def test_composer_menu_is_before_toolbar_and_file_controls(self):
|
||||
response = self.client.get(reverse('index'))
|
||||
@@ -222,7 +230,7 @@ class NavigationAndLayoutTests(TestCase):
|
||||
response = self.client.get(reverse('edit_item', args=[item.id]))
|
||||
self.assertContains(response, 'inline-edit-form')
|
||||
|
||||
def test_tag_filter_list_depends_on_current_filters(self):
|
||||
def test_tag_filter_list_depends_on_current_filters_but_composer_gets_all_tags(self):
|
||||
open_todo = Item.objects.create(owner=self.user, kind=Item.Kind.TODO, content='Open #openonly')
|
||||
open_todo.sync_metadata()
|
||||
done_todo = Item.objects.create(owner=self.user, kind=Item.Kind.TODO, content='Done #archiveonly', is_done=True)
|
||||
@@ -231,14 +239,34 @@ class NavigationAndLayoutTests(TestCase):
|
||||
note.sync_metadata()
|
||||
|
||||
response = self.client.get(f'{reverse("index")}?status=archive')
|
||||
self.assertContains(response, '#archiveonly')
|
||||
self.assertNotContains(response, '#openonly')
|
||||
self.assertNotContains(response, '#noteonly')
|
||||
html = response.content.decode()
|
||||
filter_tags = html.split('id="tag-list"', 1)[1].split('</div>', 1)[0]
|
||||
self.assertIn('#archiveonly', filter_tags)
|
||||
self.assertNotIn('#openonly', filter_tags)
|
||||
self.assertNotIn('#noteonly', filter_tags)
|
||||
self.assertIn("'openonly'", html)
|
||||
self.assertIn("'noteonly'", html)
|
||||
|
||||
response = self.client.get(f'{reverse("tag_list")}?status=archive')
|
||||
self.assertContains(response, '#archiveonly')
|
||||
self.assertNotContains(response, '#openonly')
|
||||
|
||||
def test_due_filter_also_shows_next_seven_days_separately(self):
|
||||
today = timezone.localdate()
|
||||
due = timezone.make_aware(datetime.combine(today, time(12, 0)))
|
||||
upcoming = timezone.make_aware(datetime.combine(today + timedelta(days=3), time(12, 0)))
|
||||
later = timezone.make_aware(datetime.combine(today + timedelta(days=8), time(12, 0)))
|
||||
Item.objects.create(owner=self.user, kind=Item.Kind.TODO, content='Due now', due_at=due)
|
||||
Item.objects.create(owner=self.user, kind=Item.Kind.TODO, content='Upcoming soon', due_at=upcoming)
|
||||
Item.objects.create(owner=self.user, kind=Item.Kind.TODO, content='Later task', due_at=later)
|
||||
|
||||
response = self.client.get(f'{reverse("index")}?status=due')
|
||||
|
||||
self.assertContains(response, 'Due now')
|
||||
self.assertContains(response, 'Upcoming soon')
|
||||
self.assertContains(response, 'Due in the next 7 days')
|
||||
self.assertNotContains(response, 'Later task')
|
||||
|
||||
|
||||
class AttachmentEditTests(TestCase):
|
||||
def setUp(self):
|
||||
|
||||
Reference in New Issue
Block a user