Add desktop note collections
This commit is contained in:
+82
-1
@@ -2,7 +2,7 @@ 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 .models import Collection, CollectionSection, Item, Tag, Team, TeamMembership, UserPreference
|
||||
from .templatetags.markdown_extras import markdown
|
||||
from .views import parse_due_command, parse_quick_content
|
||||
|
||||
@@ -147,6 +147,87 @@ class NavigationAndLayoutTests(TestCase):
|
||||
self.assertLess(toolbar_position, file_position)
|
||||
|
||||
|
||||
class CollectionTests(TestCase):
|
||||
def setUp(self):
|
||||
self.user = get_user_model().objects.create_user(username='collector', password='secret')
|
||||
self.client.force_login(self.user)
|
||||
|
||||
def test_create_collection_and_add_compatible_note(self):
|
||||
response = self.client.post(reverse('collection_create'), {
|
||||
'title': 'Documentation', 'description': 'Guide', 'visibility': Item.Visibility.PRIVATE,
|
||||
})
|
||||
collection = Collection.objects.get()
|
||||
self.assertRedirects(response, collection.get_absolute_url())
|
||||
note = Item.objects.create(owner=self.user, kind=Item.Kind.NOTE, content='Introduction')
|
||||
response = self.client.post(collection.get_absolute_url(), {'action': 'add', 'item_id': note.id})
|
||||
self.assertRedirects(response, collection.get_absolute_url())
|
||||
self.assertTrue(CollectionSection.objects.filter(collection=collection, item=note).exists())
|
||||
|
||||
def test_public_collection_asks_before_copying_private_note(self):
|
||||
collection = Collection.objects.create(owner=self.user, title='Public guide', visibility=Item.Visibility.PUBLIC)
|
||||
note = Item.objects.create(owner=self.user, kind=Item.Kind.NOTE, content='Private section')
|
||||
response = self.client.post(collection.get_absolute_url(), {'action': 'add', 'item_id': note.id})
|
||||
self.assertContains(response, 'name="mode" value="copy"')
|
||||
|
||||
response = self.client.post(collection.get_absolute_url(), {
|
||||
'action': 'confirm_add', 'item_id': note.id, 'mode': 'copy',
|
||||
})
|
||||
self.assertRedirects(response, collection.get_absolute_url())
|
||||
copied = collection.sections.get().item
|
||||
self.assertNotEqual(copied.id, note.id)
|
||||
self.assertEqual(copied.visibility, Item.Visibility.PUBLIC)
|
||||
note.refresh_from_db()
|
||||
self.assertEqual(note.visibility, Item.Visibility.PRIVATE)
|
||||
|
||||
def test_note_used_by_collection_cannot_be_deleted(self):
|
||||
collection = Collection.objects.create(owner=self.user, title='Protected')
|
||||
note = Item.objects.create(owner=self.user, kind=Item.Kind.NOTE, content='Do not delete')
|
||||
CollectionSection.objects.create(collection=collection, item=note, position=0)
|
||||
response = self.client.post(reverse('delete_item', args=[note.id]))
|
||||
self.assertEqual(response.status_code, 409)
|
||||
self.assertTrue(Item.objects.filter(pk=note.id).exists())
|
||||
|
||||
def test_team_tag_creates_team_collection(self):
|
||||
team = Team.objects.create(name='Docs team', slug='docs', owner=self.user)
|
||||
TeamMembership.objects.create(team=team, user=self.user, role=TeamMembership.Role.OWNER)
|
||||
tag = Tag.objects.create(name='docs')
|
||||
response = self.client.post(reverse('collection_create'), {
|
||||
'title': 'Team guide', 'visibility': Item.Visibility.PRIVATE, 'tags': [tag.id],
|
||||
})
|
||||
collection = Collection.objects.get()
|
||||
self.assertRedirects(response, collection.get_absolute_url())
|
||||
self.assertEqual(collection.team, team)
|
||||
self.assertEqual(collection.visibility, Item.Visibility.TEAM)
|
||||
|
||||
def test_public_collection_is_visible_without_login(self):
|
||||
collection = Collection.objects.create(owner=self.user, title='Public', visibility=Item.Visibility.PUBLIC)
|
||||
self.client.logout()
|
||||
self.assertEqual(self.client.get(collection.get_absolute_url()).status_code, 200)
|
||||
|
||||
def test_collection_tag_is_not_removed_as_unused(self):
|
||||
tag = Tag.objects.create(name='documentation')
|
||||
collection = Collection.objects.create(owner=self.user, title='Tagged')
|
||||
collection.tags.add(tag)
|
||||
note = Item.objects.create(owner=self.user, content='#temporary')
|
||||
note.sync_metadata()
|
||||
note.content = ''
|
||||
note.save()
|
||||
note.sync_metadata()
|
||||
self.assertTrue(Tag.objects.filter(pk=tag.pk).exists())
|
||||
|
||||
def test_api_cannot_make_collection_note_incompatible(self):
|
||||
collection = Collection.objects.create(owner=self.user, title='Public', visibility=Item.Visibility.PUBLIC)
|
||||
note = Item.objects.create(owner=self.user, kind=Item.Kind.NOTE, content='Published', visibility=Item.Visibility.PUBLIC)
|
||||
CollectionSection.objects.create(collection=collection, item=note, position=0)
|
||||
response = self.client.patch(
|
||||
reverse('api_item_detail', args=[note.id]),
|
||||
data='{"visibility":"private"}', content_type='application/json',
|
||||
)
|
||||
self.assertEqual(response.status_code, 409)
|
||||
note.refresh_from_db()
|
||||
self.assertEqual(note.visibility, Item.Visibility.PUBLIC)
|
||||
|
||||
|
||||
class CopyButtonTests(TestCase):
|
||||
def test_item_has_copy_button_with_original_text(self):
|
||||
user = get_user_model().objects.create_user(username='tester', password='secret')
|
||||
|
||||
Reference in New Issue
Block a user