import urllib.parse from typing import List from django.contrib.auth.models import User from django.test import TestCase from django.urls import reverse from bookmarks.models import Bookmark, Tag, UserProfile from bookmarks.tests.helpers import BookmarkFactoryMixin, HtmlTestMixin, collapse_whitespace class BookmarkIndexViewTestCase(TestCase, BookmarkFactoryMixin, HtmlTestMixin): def setUp(self) -> None: user = self.get_or_create_test_user() self.client.force_login(user) def assertVisibleBookmarks(self, response, bookmarks: List[Bookmark], link_target: str = '_blank'): html = response.content.decode() self.assertContains(response, '
  • ', count=len(bookmarks)) for bookmark in bookmarks: self.assertInHTML( f'{bookmark.resolved_title}', html ) def assertInvisibleBookmarks(self, response, bookmarks: List[Bookmark], link_target: str = '_blank'): html = response.content.decode() for bookmark in bookmarks: self.assertInHTML( f'{bookmark.resolved_title}', html, count=0 ) def assertVisibleTags(self, response, tags: List[Tag]): self.assertContains(response, 'data-is-tag-item', count=len(tags)) for tag in tags: self.assertContains(response, tag.name) def assertInvisibleTags(self, response, tags: List[Tag]): for tag in tags: self.assertNotContains(response, tag.name) def assertSelectedTags(self, response, tags: List[Tag]): soup = self.make_soup(response.content.decode()) selected_tags = soup.select('p.selected-tags')[0] self.assertIsNotNone(selected_tags) tag_list = selected_tags.select('a') self.assertEqual(len(tag_list), len(tags)) for tag in tags: self.assertTrue(tag.name in selected_tags.text, msg=f'Selected tags do not contain: {tag.name}') def assertEditLink(self, response, url): html = response.content.decode() self.assertInHTML(f''' Edit ''', html) def assertBulkActionForm(self, response, url: str): html = collapse_whitespace(response.content.decode()) needle = collapse_whitespace(f'''
    ''') self.assertIn(needle, html) def test_should_list_unarchived_and_user_owned_bookmarks(self): other_user = User.objects.create_user('otheruser', 'otheruser@example.com', 'password123') visible_bookmarks = [ self.setup_bookmark(), self.setup_bookmark(), self.setup_bookmark() ] invisible_bookmarks = [ self.setup_bookmark(is_archived=True), self.setup_bookmark(user=other_user), ] response = self.client.get(reverse('bookmarks:index')) html = collapse_whitespace(response.content.decode()) # Should render list self.assertIn('