Complete open my2dos tasks

This commit is contained in:
rucki
2026-08-27 09:39:03 +02:00
parent 733568a33e
commit ee332a11a8
10 changed files with 178 additions and 13 deletions
+63
View File
@@ -0,0 +1,63 @@
from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
from .models import Item, Tag, UserPreference
from .views import parse_quick_content
class ItemMetadataTests(TestCase):
def setUp(self):
self.user = get_user_model().objects.create_user(username='tester', password='secret')
def test_code_sections_are_ignored_when_extracting_tags(self):
item = Item.objects.create(
owner=self.user,
content='Outside #real\n```python\n# fenced\n```\nInline `#inline` text',
)
item.sync_metadata()
self.assertEqual(list(item.tags.values_list('name', flat=True)), ['real'])
self.assertFalse(Tag.objects.filter(name__in=['fenced', 'inline']).exists())
def test_unused_tags_are_removed_after_sync_and_delete(self):
item = Item.objects.create(owner=self.user, content='#old')
item.sync_metadata()
item.content = '#new'
item.save()
item.sync_metadata()
self.assertFalse(Tag.objects.filter(name='old').exists())
self.assertTrue(Tag.objects.filter(name='new').exists())
item.delete()
self.assertFalse(Tag.objects.filter(name='new').exists())
class DefaultItemKindTests(TestCase):
def setUp(self):
self.user = get_user_model().objects.create_user(username='tester', password='secret')
self.client.force_login(self.user)
self.preferences = UserPreference.objects.create(user=self.user, default_item_kind=Item.Kind.TODO)
def test_quick_create_uses_user_default(self):
response = self.client.post(reverse('index'), {'content': 'Default task'})
self.assertRedirects(response, reverse('index'))
self.assertEqual(Item.objects.get().kind, Item.Kind.TODO)
def test_explicit_command_overrides_default(self):
kind, _, content, _ = parse_quick_content('/note Explicit note', Item.Kind.TODO)
self.assertEqual(kind, Item.Kind.NOTE)
self.assertEqual(content, 'Explicit note')
def test_new_item_editor_uses_user_default(self):
response = self.client.get(reverse('new_item'))
self.assertEqual(response.context['requested_kind'], Item.Kind.TODO)
class CopyButtonTests(TestCase):
def test_item_has_copy_button_with_original_text(self):
user = get_user_model().objects.create_user(username='tester', password='secret')
item = Item.objects.create(owner=user, content='Text to copy')
self.client.force_login(user)
response = self.client.get(reverse('item_detail', args=[item.pk]))
self.assertContains(response, 'class="copy-item')
self.assertContains(response, 'Text to copy')