Merge branch 'main' into inbox-refactor
This commit is contained in:
commit
cad19ee878
58 changed files with 472 additions and 317 deletions
|
@ -1,16 +1,18 @@
|
|||
''' testing models '''
|
||||
from unittest.mock import patch
|
||||
from django.test import TestCase
|
||||
import responses
|
||||
|
||||
from bookwyrm import models
|
||||
from bookwyrm.settings import DOMAIN
|
||||
|
||||
|
||||
# pylint: disable=missing-class-docstring
|
||||
# pylint: disable=missing-function-docstring
|
||||
class User(TestCase):
|
||||
def setUp(self):
|
||||
self.user = models.User.objects.create_user(
|
||||
'mouse@%s' % DOMAIN, 'mouse@mouse.mouse', 'mouseword',
|
||||
local=True, localname='mouse', name='hi')
|
||||
local=True, localname='mouse', name='hi', bookwyrm_user=False)
|
||||
|
||||
def test_computed_fields(self):
|
||||
''' username instead of id here '''
|
||||
|
@ -28,7 +30,7 @@ class User(TestCase):
|
|||
with patch('bookwyrm.models.user.set_remote_server.delay'):
|
||||
user = models.User.objects.create_user(
|
||||
'rat', 'rat@rat.rat', 'ratword', local=False,
|
||||
remote_id='https://example.com/dfjkg')
|
||||
remote_id='https://example.com/dfjkg', bookwyrm_user=False)
|
||||
self.assertEqual(user.username, 'rat@example.com')
|
||||
|
||||
|
||||
|
@ -62,7 +64,7 @@ class User(TestCase):
|
|||
self.assertEqual(activity['name'], self.user.name)
|
||||
self.assertEqual(activity['inbox'], self.user.inbox)
|
||||
self.assertEqual(activity['outbox'], self.user.outbox)
|
||||
self.assertEqual(activity['bookwyrmUser'], True)
|
||||
self.assertEqual(activity['bookwyrmUser'], False)
|
||||
self.assertEqual(activity['discoverable'], True)
|
||||
self.assertEqual(activity['type'], 'Person')
|
||||
|
||||
|
@ -71,3 +73,83 @@ class User(TestCase):
|
|||
self.assertEqual(activity['type'], 'OrderedCollection')
|
||||
self.assertEqual(activity['id'], self.user.outbox)
|
||||
self.assertEqual(activity['totalItems'], 0)
|
||||
|
||||
|
||||
def test_set_remote_server(self):
|
||||
server = models.FederatedServer.objects.create(
|
||||
server_name=DOMAIN,
|
||||
application_type='test type',
|
||||
application_version=3
|
||||
)
|
||||
|
||||
models.user.set_remote_server(self.user.id)
|
||||
self.user.refresh_from_db()
|
||||
|
||||
self.assertEqual(self.user.federated_server, server)
|
||||
|
||||
@responses.activate
|
||||
def test_get_or_create_remote_server(self):
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'https://%s/.well-known/nodeinfo' % DOMAIN,
|
||||
json={'links': [{'href': 'http://www.example.com'}, {}]}
|
||||
)
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'http://www.example.com',
|
||||
json={'software': {'name': 'hi', 'version': '2'}},
|
||||
)
|
||||
|
||||
server = models.user.get_or_create_remote_server(DOMAIN)
|
||||
self.assertEqual(server.server_name, DOMAIN)
|
||||
self.assertEqual(server.application_type, 'hi')
|
||||
self.assertEqual(server.application_version, '2')
|
||||
|
||||
@responses.activate
|
||||
def test_get_or_create_remote_server_no_wellknown(self):
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'https://%s/.well-known/nodeinfo' % DOMAIN,
|
||||
status=404
|
||||
)
|
||||
|
||||
server = models.user.get_or_create_remote_server(DOMAIN)
|
||||
self.assertEqual(server.server_name, DOMAIN)
|
||||
self.assertIsNone(server.application_type)
|
||||
self.assertIsNone(server.application_version)
|
||||
|
||||
@responses.activate
|
||||
def test_get_or_create_remote_server_no_links(self):
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'https://%s/.well-known/nodeinfo' % DOMAIN,
|
||||
json={'links': [{'href': 'http://www.example.com'}, {}]}
|
||||
)
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'http://www.example.com',
|
||||
status=404
|
||||
)
|
||||
|
||||
server = models.user.get_or_create_remote_server(DOMAIN)
|
||||
self.assertEqual(server.server_name, DOMAIN)
|
||||
self.assertIsNone(server.application_type)
|
||||
self.assertIsNone(server.application_version)
|
||||
|
||||
@responses.activate
|
||||
def test_get_or_create_remote_server_unknown_format(self):
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'https://%s/.well-known/nodeinfo' % DOMAIN,
|
||||
json={'links': [{'href': 'http://www.example.com'}, {}]}
|
||||
)
|
||||
responses.add(
|
||||
responses.GET,
|
||||
'http://www.example.com',
|
||||
json={'fish': 'salmon'}
|
||||
)
|
||||
|
||||
server = models.user.get_or_create_remote_server(DOMAIN)
|
||||
self.assertEqual(server.server_name, DOMAIN)
|
||||
self.assertIsNone(server.application_type)
|
||||
self.assertIsNone(server.application_version)
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
''' test for app action functionality '''
|
||||
from unittest.mock import patch
|
||||
from django.utils import timezone
|
||||
|
||||
from django.contrib.auth.models import AnonymousUser
|
||||
from django.template.response import TemplateResponse
|
||||
|
@ -30,6 +31,7 @@ class GoalViews(TestCase):
|
|||
)
|
||||
self.anonymous_user = AnonymousUser
|
||||
self.anonymous_user.is_authenticated = False
|
||||
models.SiteSettings.objects.create()
|
||||
|
||||
|
||||
def test_goal_page_no_goal(self):
|
||||
|
@ -48,6 +50,7 @@ class GoalViews(TestCase):
|
|||
request.user = self.local_user
|
||||
|
||||
result = view(request, self.local_user.localname, 2020)
|
||||
result.render()
|
||||
self.assertIsInstance(result, TemplateResponse)
|
||||
|
||||
|
||||
|
@ -62,16 +65,23 @@ class GoalViews(TestCase):
|
|||
|
||||
def test_goal_page_public(self):
|
||||
''' view a user's public goal '''
|
||||
models.ReadThrough.objects.create(
|
||||
finish_date=timezone.now(),
|
||||
user=self.local_user,
|
||||
book=self.book,
|
||||
)
|
||||
|
||||
models.AnnualGoal.objects.create(
|
||||
user=self.local_user,
|
||||
year=2020,
|
||||
year=timezone.now().year,
|
||||
goal=128937123,
|
||||
privacy='public')
|
||||
view = views.Goal.as_view()
|
||||
request = self.factory.get('')
|
||||
request.user = self.rat
|
||||
|
||||
result = view(request, self.local_user.localname, 2020)
|
||||
result = view(request, self.local_user.localname, timezone.now().year)
|
||||
result.render()
|
||||
self.assertIsInstance(result, TemplateResponse)
|
||||
|
||||
def test_goal_page_private(self):
|
||||
|
|
|
@ -56,12 +56,14 @@ class ViewsHelpers(TestCase):
|
|||
def test_get_user_from_username(self):
|
||||
''' works for either localname or username '''
|
||||
self.assertEqual(
|
||||
views.helpers.get_user_from_username('mouse'), self.local_user)
|
||||
views.helpers.get_user_from_username(
|
||||
self.local_user, 'mouse'), self.local_user)
|
||||
self.assertEqual(
|
||||
views.helpers.get_user_from_username(
|
||||
'mouse@local.com'), self.local_user)
|
||||
self.local_user, 'mouse@local.com'), self.local_user)
|
||||
with self.assertRaises(models.User.DoesNotExist):
|
||||
views.helpers.get_user_from_username('mojfse@example.com')
|
||||
views.helpers.get_user_from_username(
|
||||
self.local_user, 'mojfse@example.com')
|
||||
|
||||
|
||||
def test_is_api_request(self):
|
||||
|
@ -188,18 +190,18 @@ class ViewsHelpers(TestCase):
|
|||
def test_is_bookwyrm_request(self):
|
||||
''' checks if a request came from a bookwyrm instance '''
|
||||
request = self.factory.get('', {'q': 'Test Book'})
|
||||
self.assertFalse(views.helpers.is_bookworm_request(request))
|
||||
self.assertFalse(views.helpers.is_bookwyrm_request(request))
|
||||
|
||||
request = self.factory.get(
|
||||
'', {'q': 'Test Book'},
|
||||
HTTP_USER_AGENT=\
|
||||
"http.rb/4.4.1 (Mastodon/3.3.0; +https://mastodon.social/)"
|
||||
)
|
||||
self.assertFalse(views.helpers.is_bookworm_request(request))
|
||||
self.assertFalse(views.helpers.is_bookwyrm_request(request))
|
||||
|
||||
request = self.factory.get(
|
||||
'', {'q': 'Test Book'}, HTTP_USER_AGENT=USER_AGENT)
|
||||
self.assertTrue(views.helpers.is_bookworm_request(request))
|
||||
self.assertTrue(views.helpers.is_bookwyrm_request(request))
|
||||
|
||||
|
||||
def test_existing_user(self):
|
||||
|
|
|
@ -7,6 +7,7 @@ from django.test import TestCase
|
|||
from django.test.client import RequestFactory
|
||||
|
||||
from bookwyrm import models, views
|
||||
from bookwyrm.settings import USER_AGENT
|
||||
|
||||
|
||||
# pylint: disable=too-many-public-methods
|
||||
|
@ -90,3 +91,39 @@ class OutboxView(TestCase):
|
|||
data = json.loads(result.content)
|
||||
self.assertEqual(data['type'], 'OrderedCollection')
|
||||
self.assertEqual(data['totalItems'], 1)
|
||||
|
||||
def test_outbox_bookwyrm_request_true(self):
|
||||
''' should differentiate between bookwyrm and outside requests '''
|
||||
with patch('bookwyrm.models.activitypub_mixin.broadcast_task.delay'):
|
||||
models.Review.objects.create(
|
||||
name='hi',
|
||||
content='look at this',
|
||||
user=self.local_user,
|
||||
book=self.book,
|
||||
privacy='public',
|
||||
)
|
||||
|
||||
request = self.factory.get('', {'page': 1}, HTTP_USER_AGENT=USER_AGENT)
|
||||
result = views.Outbox.as_view()(request, 'mouse')
|
||||
|
||||
data = json.loads(result.content)
|
||||
self.assertEqual(len(data['orderedItems']), 1)
|
||||
self.assertEqual(data['orderedItems'][0]['type'], 'Review')
|
||||
|
||||
def test_outbox_bookwyrm_request_false(self):
|
||||
''' should differentiate between bookwyrm and outside requests '''
|
||||
with patch('bookwyrm.models.activitypub_mixin.broadcast_task.delay'):
|
||||
models.Review.objects.create(
|
||||
name='hi',
|
||||
content='look at this',
|
||||
user=self.local_user,
|
||||
book=self.book,
|
||||
privacy='public',
|
||||
)
|
||||
|
||||
request = self.factory.get('', {'page': 1})
|
||||
result = views.Outbox.as_view()(request, 'mouse')
|
||||
|
||||
data = json.loads(result.content)
|
||||
self.assertEqual(len(data['orderedItems']), 1)
|
||||
self.assertEqual(data['orderedItems'][0]['type'], 'Article')
|
||||
|
|
|
@ -41,6 +41,7 @@ class RssFeedView(TestCase):
|
|||
''' load an rss feed '''
|
||||
view = rss_feed.RssFeed()
|
||||
request = self.factory.get('/user/rss_user/rss')
|
||||
request.user = self.user
|
||||
with patch("bookwyrm.models.SiteSettings.objects.get") as site:
|
||||
site.return_value = self.site
|
||||
result = view(request, username=self.user.username)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue