Merge branch 'main' into form-perms
This commit is contained in:
commit
b0236b95bd
88 changed files with 4213 additions and 2669 deletions
45
bookwyrm/tests/views/admin/test_celery.py
Normal file
45
bookwyrm/tests/views/admin/test_celery.py
Normal file
|
@ -0,0 +1,45 @@
|
|||
""" test for app action functionality """
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.contrib.auth.models import Group
|
||||
from django.template.response import TemplateResponse
|
||||
from django.test import TestCase
|
||||
from django.test.client import RequestFactory
|
||||
|
||||
from bookwyrm import models, views
|
||||
from bookwyrm.management.commands import initdb
|
||||
from bookwyrm.tests.validate_html import validate_html
|
||||
|
||||
|
||||
class CeleryStatusViews(TestCase):
|
||||
"""every response to a get request, html or json"""
|
||||
|
||||
def setUp(self):
|
||||
"""we need basic test data and mocks"""
|
||||
self.factory = RequestFactory()
|
||||
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
|
||||
"bookwyrm.activitystreams.populate_stream_task.delay"
|
||||
), patch("bookwyrm.lists_stream.populate_lists_task.delay"):
|
||||
self.local_user = models.User.objects.create_user(
|
||||
"mouse@local.com",
|
||||
"mouse@mouse.mouse",
|
||||
"password",
|
||||
local=True,
|
||||
localname="mouse",
|
||||
)
|
||||
initdb.init_groups()
|
||||
initdb.init_permissions()
|
||||
group = Group.objects.get(name="admin")
|
||||
self.local_user.groups.set([group])
|
||||
models.SiteSettings.objects.create()
|
||||
|
||||
def test_celery_status_get(self):
|
||||
"""there are so many views, this just makes sure it LOADS"""
|
||||
view = views.CeleryStatus.as_view()
|
||||
request = self.factory.get("")
|
||||
request.user = self.local_user
|
||||
|
||||
result = view(request)
|
||||
self.assertIsInstance(result, TemplateResponse)
|
||||
validate_html(result.render())
|
||||
self.assertEqual(result.status_code, 200)
|
|
@ -13,7 +13,7 @@ from bookwyrm.tests.validate_html import validate_html
|
|||
class LandingViews(TestCase):
|
||||
"""pages you land on without really trying"""
|
||||
|
||||
def setUp(self):
|
||||
def setUp(self): # pylint: disable=invalid-name
|
||||
"""we need basic test data and mocks"""
|
||||
self.factory = RequestFactory()
|
||||
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
|
||||
|
|
|
@ -7,13 +7,14 @@ from django.test import TestCase
|
|||
from django.test.client import RequestFactory
|
||||
|
||||
from bookwyrm import models, views
|
||||
from bookwyrm.tests.validate_html import validate_html
|
||||
from bookwyrm.settings import DOMAIN
|
||||
|
||||
|
||||
class IsbnViews(TestCase):
|
||||
"""tag views"""
|
||||
|
||||
def setUp(self):
|
||||
def setUp(self): # pylint: disable=invalid-name
|
||||
"""we need basic test data and mocks"""
|
||||
self.factory = RequestFactory()
|
||||
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
|
||||
|
@ -58,4 +59,4 @@ class IsbnViews(TestCase):
|
|||
is_api.return_value = False
|
||||
response = view(request, isbn="1234567890123")
|
||||
self.assertEqual(response.status_code, 200)
|
||||
response.render()
|
||||
validate_html(response.render())
|
||||
|
|
|
@ -17,7 +17,7 @@ from bookwyrm.tests.validate_html import validate_html
|
|||
class Views(TestCase):
|
||||
"""tag views"""
|
||||
|
||||
def setUp(self):
|
||||
def setUp(self): # pylint: disable=invalid-name
|
||||
"""we need basic test data and mocks"""
|
||||
self.factory = RequestFactory()
|
||||
with patch("bookwyrm.suggested_users.rerank_suggestions_task.delay"), patch(
|
||||
|
@ -90,13 +90,29 @@ class Views(TestCase):
|
|||
|
||||
self.assertIsInstance(response, TemplateResponse)
|
||||
validate_html(response.render())
|
||||
connector_results = response.context_data["results"]
|
||||
self.assertEqual(len(connector_results), 2)
|
||||
self.assertEqual(connector_results[0]["results"][0].title, "Test Book")
|
||||
self.assertEqual(connector_results[1]["results"][0].title, "Mock Book")
|
||||
|
||||
# don't search remote
|
||||
local_results = response.context_data["results"]
|
||||
self.assertEqual(local_results[0].title, "Test Book")
|
||||
|
||||
connector_results = response.context_data["remote_results"]
|
||||
self.assertEqual(connector_results[0]["results"][0].title, "Mock Book")
|
||||
|
||||
def test_search_book_anonymous(self):
|
||||
"""Don't search remote for logged out user"""
|
||||
view = views.Search.as_view()
|
||||
|
||||
connector = models.Connector.objects.create(
|
||||
identifier="example.com",
|
||||
connector_file="openlibrary",
|
||||
base_url="https://example.com",
|
||||
books_url="https://example.com/books",
|
||||
covers_url="https://example.com/covers",
|
||||
search_url="https://example.com/search?q=",
|
||||
)
|
||||
mock_result = SearchResult(title="Mock Book", connector=connector, key="hello")
|
||||
|
||||
request = self.factory.get("", {"q": "Test Book", "remote": True})
|
||||
|
||||
anonymous_user = AnonymousUser
|
||||
anonymous_user.is_authenticated = False
|
||||
request.user = anonymous_user
|
||||
|
@ -107,11 +123,15 @@ class Views(TestCase):
|
|||
{"results": [mock_result], "connector": connector}
|
||||
]
|
||||
response = view(request)
|
||||
|
||||
self.assertIsInstance(response, TemplateResponse)
|
||||
validate_html(response.render())
|
||||
connector_results = response.context_data["results"]
|
||||
self.assertEqual(len(connector_results), 1)
|
||||
self.assertEqual(connector_results[0]["results"][0].title, "Test Book")
|
||||
|
||||
local_results = response.context_data["results"]
|
||||
self.assertEqual(local_results[0].title, "Test Book")
|
||||
|
||||
connector_results = response.context_data.get("remote_results")
|
||||
self.assertIsNone(connector_results)
|
||||
|
||||
def test_search_users(self):
|
||||
"""searches remote connectors"""
|
||||
|
|
|
@ -6,6 +6,7 @@ from django.test import TestCase
|
|||
from django.test.client import RequestFactory
|
||||
|
||||
from bookwyrm import forms, models, views
|
||||
from bookwyrm.views.status import find_mentions
|
||||
from bookwyrm.settings import DOMAIN
|
||||
from bookwyrm.tests.validate_html import validate_html
|
||||
|
||||
|
@ -34,6 +35,13 @@ class StatusViews(TestCase):
|
|||
localname="mouse",
|
||||
remote_id="https://example.com/users/mouse",
|
||||
)
|
||||
self.another_user = models.User.objects.create_user(
|
||||
f"nutria@{DOMAIN}",
|
||||
"nutria@nutria.com",
|
||||
"password",
|
||||
local=True,
|
||||
localname="nutria",
|
||||
)
|
||||
with patch("bookwyrm.models.user.set_remote_server"):
|
||||
self.remote_user = models.User.objects.create_user(
|
||||
"rat",
|
||||
|
@ -211,51 +219,66 @@ class StatusViews(TestCase):
|
|||
self.assertFalse(self.remote_user in reply.mention_users.all())
|
||||
self.assertTrue(self.local_user in reply.mention_users.all())
|
||||
|
||||
def test_find_mentions(self, *_):
|
||||
def test_find_mentions_local(self, *_):
|
||||
"""detect and look up @ mentions of users"""
|
||||
user = models.User.objects.create_user(
|
||||
f"nutria@{DOMAIN}",
|
||||
"nutria@nutria.com",
|
||||
"password",
|
||||
local=True,
|
||||
localname="nutria",
|
||||
)
|
||||
self.assertEqual(user.username, f"nutria@{DOMAIN}")
|
||||
result = find_mentions(self.local_user, "@nutria")
|
||||
self.assertEqual(result["@nutria"], self.another_user)
|
||||
self.assertEqual(result[f"@nutria@{DOMAIN}"], self.another_user)
|
||||
|
||||
result = find_mentions(self.local_user, f"@nutria@{DOMAIN}")
|
||||
self.assertEqual(result["@nutria"], self.another_user)
|
||||
self.assertEqual(result[f"@nutria@{DOMAIN}"], self.another_user)
|
||||
|
||||
result = find_mentions(self.local_user, "leading text @nutria")
|
||||
self.assertEqual(result["@nutria"], self.another_user)
|
||||
self.assertEqual(result[f"@nutria@{DOMAIN}"], self.another_user)
|
||||
|
||||
result = find_mentions(self.local_user, "leading @nutria trailing")
|
||||
self.assertEqual(result["@nutria"], self.another_user)
|
||||
self.assertEqual(result[f"@nutria@{DOMAIN}"], self.another_user)
|
||||
|
||||
self.assertEqual(find_mentions(self.local_user, "leading@nutria"), {})
|
||||
|
||||
def test_find_mentions_remote(self, *_):
|
||||
"""detect and look up @ mentions of users"""
|
||||
self.assertEqual(
|
||||
list(views.status.find_mentions("@nutria"))[0], ("@nutria", user)
|
||||
)
|
||||
self.assertEqual(
|
||||
list(views.status.find_mentions("leading text @nutria"))[0],
|
||||
("@nutria", user),
|
||||
)
|
||||
self.assertEqual(
|
||||
list(views.status.find_mentions("leading @nutria trailing text"))[0],
|
||||
("@nutria", user),
|
||||
)
|
||||
self.assertEqual(
|
||||
list(views.status.find_mentions("@rat@example.com"))[0],
|
||||
("@rat@example.com", self.remote_user),
|
||||
find_mentions(self.local_user, "@rat@example.com"),
|
||||
{"@rat@example.com": self.remote_user},
|
||||
)
|
||||
|
||||
multiple = list(views.status.find_mentions("@nutria and @rat@example.com"))
|
||||
self.assertEqual(multiple[0], ("@nutria", user))
|
||||
self.assertEqual(multiple[1], ("@rat@example.com", self.remote_user))
|
||||
def test_find_mentions_multiple(self, *_):
|
||||
"""detect and look up @ mentions of users"""
|
||||
multiple = find_mentions(self.local_user, "@nutria and @rat@example.com")
|
||||
self.assertEqual(multiple["@nutria"], self.another_user)
|
||||
self.assertEqual(multiple[f"@nutria@{DOMAIN}"], self.another_user)
|
||||
self.assertEqual(multiple["@rat@example.com"], self.remote_user)
|
||||
self.assertIsNone(multiple.get("@rat"))
|
||||
|
||||
def test_find_mentions_unknown(self, *_):
|
||||
"""detect and look up @ mentions of users"""
|
||||
multiple = find_mentions(self.local_user, "@nutria and @rdkjfgh")
|
||||
self.assertEqual(multiple["@nutria"], self.another_user)
|
||||
self.assertEqual(multiple[f"@nutria@{DOMAIN}"], self.another_user)
|
||||
|
||||
def test_find_mentions_blocked(self, *_):
|
||||
"""detect and look up @ mentions of users"""
|
||||
self.another_user.blocks.add(self.local_user)
|
||||
|
||||
result = find_mentions(self.local_user, "@nutria hello")
|
||||
self.assertEqual(result, {})
|
||||
|
||||
def test_find_mentions_unknown_remote(self, *_):
|
||||
"""mention a user that isn't in the database"""
|
||||
with patch("bookwyrm.views.status.handle_remote_webfinger") as rw:
|
||||
rw.return_value = self.local_user
|
||||
self.assertEqual(
|
||||
list(views.status.find_mentions("@beep@beep.com"))[0],
|
||||
("@beep@beep.com", self.local_user),
|
||||
)
|
||||
rw.return_value = self.another_user
|
||||
result = find_mentions(self.local_user, "@beep@beep.com")
|
||||
self.assertEqual(result["@nutria"], self.another_user)
|
||||
self.assertEqual(result[f"@nutria@{DOMAIN}"], self.another_user)
|
||||
|
||||
with patch("bookwyrm.views.status.handle_remote_webfinger") as rw:
|
||||
rw.return_value = None
|
||||
self.assertEqual(list(views.status.find_mentions("@beep@beep.com")), [])
|
||||
|
||||
self.assertEqual(
|
||||
list(views.status.find_mentions(f"@nutria@{DOMAIN}"))[0],
|
||||
(f"@nutria@{DOMAIN}", user),
|
||||
)
|
||||
result = find_mentions(self.local_user, "@beep@beep.com")
|
||||
self.assertEqual(result, {})
|
||||
|
||||
def test_format_links_simple_url(self, *_):
|
||||
"""find and format urls into a tags"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue