Use trimmedwords_html instead of a custom filter
This commit is contained in:
		@@ -2,7 +2,7 @@
 | 
				
			|||||||
{% with 0|uuid as uuid %}
 | 
					{% with 0|uuid as uuid %}
 | 
				
			||||||
{% if full %}
 | 
					{% if full %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{% with full|text_overflow as trimmed %}
 | 
					{% with full|truncatewords_html:60 as trimmed %}
 | 
				
			||||||
{% if trimmed != full %}
 | 
					{% if trimmed != full %}
 | 
				
			||||||
<div>
 | 
					<div>
 | 
				
			||||||
    <input type="radio" name="show-hide-{{ uuid }}" id="show-{{ uuid }}" class="toggle-control" checked>
 | 
					    <input type="radio" name="show-hide-{{ uuid }}" id="show-{{ uuid }}" class="toggle-control" checked>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,7 +13,7 @@ register = template.Library()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
@register.filter(name='dict_key')
 | 
					@register.filter(name='dict_key')
 | 
				
			||||||
def dict_key(d, k):
 | 
					def dict_key(d, k):
 | 
				
			||||||
    '''Returns the given key from a dictionary.'''
 | 
					    ''' Returns the given key from a dictionary. '''
 | 
				
			||||||
    return d.get(k) or 0
 | 
					    return d.get(k) or 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -117,21 +117,6 @@ def get_book_description(book):
 | 
				
			|||||||
    return book.description or book.parent_work.description
 | 
					    return book.description or book.parent_work.description
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@register.filter(name='text_overflow')
 | 
					 | 
				
			||||||
def text_overflow(text):
 | 
					 | 
				
			||||||
    ''' dont' let book descriptions run for ages '''
 | 
					 | 
				
			||||||
    if not text:
 | 
					 | 
				
			||||||
        return ''
 | 
					 | 
				
			||||||
    char_max = 400
 | 
					 | 
				
			||||||
    if text and len(text) < char_max:
 | 
					 | 
				
			||||||
        return text
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    trimmed = text[:char_max]
 | 
					 | 
				
			||||||
    # go back to the last space
 | 
					 | 
				
			||||||
    trimmed = ' '.join(trimmed.split(' ')[:-1])
 | 
					 | 
				
			||||||
    return trimmed + '...'
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
@register.filter(name='uuid')
 | 
					@register.filter(name='uuid')
 | 
				
			||||||
def get_uuid(identifier):
 | 
					def get_uuid(identifier):
 | 
				
			||||||
    ''' for avoiding clashing ids when there are many forms '''
 | 
					    ''' for avoiding clashing ids when there are many forms '''
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										209
									
								
								bookwyrm/tests/test_templatetags.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										209
									
								
								bookwyrm/tests/test_templatetags.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,209 @@
 | 
				
			|||||||
 | 
					''' style fixes and lookups for templates '''
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					from unittest.mock import patch
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from dateutil.parser import parse
 | 
				
			||||||
 | 
					from django.test import TestCase
 | 
				
			||||||
 | 
					from django.utils import timezone
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from bookwyrm import models
 | 
				
			||||||
 | 
					from bookwyrm.templatetags import bookwyrm_tags
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TemplateTags(TestCase):
 | 
				
			||||||
 | 
					    ''' lotta different things here '''
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        ''' create some filler objects '''
 | 
				
			||||||
 | 
					        self.user = models.User.objects.create_user(
 | 
				
			||||||
 | 
					            'mouse', 'mouse@mouse.mouse', 'mouseword', local=True)
 | 
				
			||||||
 | 
					        with patch('bookwyrm.models.user.set_remote_server.delay'):
 | 
				
			||||||
 | 
					            self.remote_user = models.User.objects.create_user(
 | 
				
			||||||
 | 
					                'rat', 'rat@rat.rat', 'ratword',
 | 
				
			||||||
 | 
					                remote_id='http://example.com/rat', local=False)
 | 
				
			||||||
 | 
					        self.book = models.Edition.objects.create(title='Test Book')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_dict_key(self):
 | 
				
			||||||
 | 
					        ''' just getting a value out of a dict '''
 | 
				
			||||||
 | 
					        test_dict = {'a': 1, 'b': 3}
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.dict_key(test_dict, 'a'), 1)
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.dict_key(test_dict, 'c'), 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_rating(self):
 | 
				
			||||||
 | 
					        ''' get a user's most recent rating of a book '''
 | 
				
			||||||
 | 
					        models.Review.objects.create(
 | 
				
			||||||
 | 
					            user=self.user, book=self.book, rating=3)
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_rating(self.book, self.user), 3)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_rating_doesnt_exist(self):
 | 
				
			||||||
 | 
					        ''' there is no rating available '''
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_rating(self.book, self.user), 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_user_identifer_local(self):
 | 
				
			||||||
 | 
					        ''' fall back to the simplest uid available '''
 | 
				
			||||||
 | 
					        self.assertNotEqual(self.user.username, self.user.localname)
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_user_identifier(self.user), 'mouse')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_user_identifer_remote(self):
 | 
				
			||||||
 | 
					        ''' for a remote user, should be their full username '''
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_user_identifier(self.remote_user),
 | 
				
			||||||
 | 
					            'rat@example.com')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_notification_count(self):
 | 
				
			||||||
 | 
					        ''' just countin' '''
 | 
				
			||||||
 | 
					        self.assertEqual(bookwyrm_tags.get_notification_count(self.user), 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        models.Notification.objects.create(
 | 
				
			||||||
 | 
					            user=self.user, notification_type='FOLLOW')
 | 
				
			||||||
 | 
					        models.Notification.objects.create(
 | 
				
			||||||
 | 
					            user=self.user, notification_type='FOLLOW')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        models.Notification.objects.create(
 | 
				
			||||||
 | 
					            user=self.remote_user, notification_type='FOLLOW')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(bookwyrm_tags.get_notification_count(self.user), 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_replies(self):
 | 
				
			||||||
 | 
					        ''' direct replies to a status '''
 | 
				
			||||||
 | 
					        parent = models.Review.objects.create(
 | 
				
			||||||
 | 
					            user=self.user, book=self.book)
 | 
				
			||||||
 | 
					        first_child = models.Status.objects.create(
 | 
				
			||||||
 | 
					            reply_parent=parent, user=self.user)
 | 
				
			||||||
 | 
					        second_child = models.Status.objects.create(
 | 
				
			||||||
 | 
					            reply_parent=parent, user=self.user)
 | 
				
			||||||
 | 
					        third_child = models.Status.objects.create(
 | 
				
			||||||
 | 
					            reply_parent=parent, user=self.user, deleted=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        replies = bookwyrm_tags.get_replies(parent)
 | 
				
			||||||
 | 
					        self.assertEqual(len(replies), 2)
 | 
				
			||||||
 | 
					        self.assertTrue(first_child in replies)
 | 
				
			||||||
 | 
					        self.assertTrue(second_child in replies)
 | 
				
			||||||
 | 
					        self.assertFalse(third_child in replies)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_parent(self):
 | 
				
			||||||
 | 
					        ''' get the reply parent of a status '''
 | 
				
			||||||
 | 
					        parent = models.Review.objects.create(
 | 
				
			||||||
 | 
					            user=self.user, book=self.book)
 | 
				
			||||||
 | 
					        child = models.Status.objects.create(
 | 
				
			||||||
 | 
					            reply_parent=parent, user=self.user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        result = bookwyrm_tags.get_parent(child)
 | 
				
			||||||
 | 
					        self.assertEqual(result, parent)
 | 
				
			||||||
 | 
					        self.assertIsInstance(result, models.Review)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_user_liked(self):
 | 
				
			||||||
 | 
					        ''' did a user like a status '''
 | 
				
			||||||
 | 
					        status = models.Review.objects.create(
 | 
				
			||||||
 | 
					            user=self.remote_user, book=self.book)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertFalse(bookwyrm_tags.get_user_liked(self.user, status))
 | 
				
			||||||
 | 
					        models.Favorite.objects.create(
 | 
				
			||||||
 | 
					            user=self.user,
 | 
				
			||||||
 | 
					            status=status
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        self.assertTrue(bookwyrm_tags.get_user_liked(self.user, status))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_user_boosted(self):
 | 
				
			||||||
 | 
					        ''' did a user boost a status '''
 | 
				
			||||||
 | 
					        status = models.Review.objects.create(
 | 
				
			||||||
 | 
					            user=self.remote_user, book=self.book)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertFalse(bookwyrm_tags.get_user_boosted(self.user, status))
 | 
				
			||||||
 | 
					        models.Boost.objects.create(
 | 
				
			||||||
 | 
					            user=self.user,
 | 
				
			||||||
 | 
					            boosted_status=status
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        self.assertTrue(bookwyrm_tags.get_user_boosted(self.user, status))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_follow_request_exists(self):
 | 
				
			||||||
 | 
					        ''' does a user want to follow '''
 | 
				
			||||||
 | 
					        self.assertFalse(
 | 
				
			||||||
 | 
					            bookwyrm_tags.follow_request_exists(self.user, self.remote_user))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        models.UserFollowRequest.objects.create(
 | 
				
			||||||
 | 
					            user_subject=self.user,
 | 
				
			||||||
 | 
					            user_object=self.remote_user)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertFalse(
 | 
				
			||||||
 | 
					            bookwyrm_tags.follow_request_exists(self.user, self.remote_user))
 | 
				
			||||||
 | 
					        self.assertTrue(
 | 
				
			||||||
 | 
					            bookwyrm_tags.follow_request_exists(self.remote_user, self.user))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_boosted(self):
 | 
				
			||||||
 | 
					        ''' load a boosted status '''
 | 
				
			||||||
 | 
					        status = models.Review.objects.create(
 | 
				
			||||||
 | 
					            user=self.remote_user, book=self.book)
 | 
				
			||||||
 | 
					        boost = models.Boost.objects.create(
 | 
				
			||||||
 | 
					            user=self.user,
 | 
				
			||||||
 | 
					            boosted_status=status
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        boosted = bookwyrm_tags.get_boosted(boost)
 | 
				
			||||||
 | 
					        self.assertIsInstance(boosted, models.Review)
 | 
				
			||||||
 | 
					        self.assertEqual(boosted, status)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_edition_info(self):
 | 
				
			||||||
 | 
					        ''' text slug about an edition '''
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_edition_info(self.book), '')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.book.physical_format = 'worm'
 | 
				
			||||||
 | 
					        self.book.save()
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_edition_info(self.book), 'worm')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.book.languages = ['English']
 | 
				
			||||||
 | 
					        self.book.save()
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_edition_info(self.book), 'worm')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.book.languages = ['Glorbish', 'English']
 | 
				
			||||||
 | 
					        self.book.save()
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_edition_info(self.book),
 | 
				
			||||||
 | 
					            'worm, Glorbish language')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.book.published_date = timezone.make_aware(parse('2020'))
 | 
				
			||||||
 | 
					        self.book.save()
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            bookwyrm_tags.get_edition_info(self.book),
 | 
				
			||||||
 | 
					            'worm, Glorbish language, 2020')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_book_description(self):
 | 
				
			||||||
 | 
					        ''' grab it from the edition or the parent '''
 | 
				
			||||||
 | 
					        work = models.Work.objects.create(title='Test Work')
 | 
				
			||||||
 | 
					        self.book.parent_work = work
 | 
				
			||||||
 | 
					        self.book.save()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNone(bookwyrm_tags.get_book_description(self.book))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        work.description = 'hi'
 | 
				
			||||||
 | 
					        work.save()
 | 
				
			||||||
 | 
					        self.assertEqual(bookwyrm_tags.get_book_description(self.book), 'hi')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.book.description = 'hello'
 | 
				
			||||||
 | 
					        self.book.save()
 | 
				
			||||||
 | 
					        self.assertEqual(bookwyrm_tags.get_book_description(self.book), 'hello')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_uuid(self):
 | 
				
			||||||
 | 
					        ''' uuid functionality '''
 | 
				
			||||||
 | 
					        uuid = bookwyrm_tags.get_uuid('hi')
 | 
				
			||||||
 | 
					        print(uuid)
 | 
				
			||||||
 | 
					        self.assertTrue(re.match(r'hi[A-Za-z0-9\-]', uuid))
 | 
				
			||||||
		Reference in New Issue
	
	Block a user