2021-02-16 22:58:42 +00:00
|
|
|
# trilby_api/tests/__init__.py
|
|
|
|
#
|
|
|
|
# Part of kepi.
|
|
|
|
# Copyright (c) 2018-2021 Marnanel Thurman.
|
|
|
|
# Licensed under the GNU Public License v2.
|
|
|
|
|
2023-09-22 18:18:39 +00:00
|
|
|
from django.test import Client
|
|
|
|
from kepi.kepi.testing import KepiTestCase
|
2020-04-03 16:57:03 +00:00
|
|
|
from rest_framework.test import force_authenticate, APIClient
|
2020-03-16 17:54:02 +00:00
|
|
|
from kepi.trilby_api.models import *
|
2020-04-16 15:39:38 +00:00
|
|
|
from django.conf import settings
|
2020-04-19 15:10:08 +00:00
|
|
|
import json
|
2020-04-16 15:39:38 +00:00
|
|
|
|
2021-02-16 22:58:42 +00:00
|
|
|
import logging
|
|
|
|
logger = logging.getLogger(name='kepi')
|
|
|
|
|
2020-04-19 16:01:19 +00:00
|
|
|
ACCOUNT_EXPECTED = {
|
|
|
|
'username': 'alice',
|
2020-04-23 19:07:27 +00:00
|
|
|
'acct': 'alice',
|
2020-04-19 16:01:19 +00:00
|
|
|
'display_name': 'alice',
|
|
|
|
'locked': False,
|
|
|
|
|
|
|
|
'followers_count': 0,
|
|
|
|
'following_count': 0,
|
|
|
|
'statuses_count': 0,
|
|
|
|
'note': '',
|
|
|
|
'url': 'https://testserver/users/alice',
|
2020-04-24 13:21:42 +00:00
|
|
|
'uri': 'https://testserver/users/alice',
|
2020-04-19 16:01:19 +00:00
|
|
|
'fields': [],
|
|
|
|
'emojis': [],
|
|
|
|
|
|
|
|
'avatar': 'https://testserver/static/defaults/avatar_1.jpg',
|
|
|
|
'header': 'https://testserver/static/defaults/header.jpg',
|
|
|
|
'avatar_static': 'https://testserver/static/defaults/avatar_1.jpg',
|
|
|
|
'header_static': 'https://testserver/static/defaults/header.jpg',
|
|
|
|
|
|
|
|
'bot': False,
|
|
|
|
}
|
|
|
|
|
|
|
|
ACCOUNT_SOURCE_EXPECTED = {
|
|
|
|
'privacy': 'A',
|
|
|
|
'sensitive': False,
|
|
|
|
'language': settings.KEPI['LANGUAGES'][0], # FIXME
|
|
|
|
}
|
|
|
|
|
|
|
|
STATUS_EXPECTED = {
|
|
|
|
'in_reply_to_account_id': None,
|
2020-04-25 15:40:06 +00:00
|
|
|
'content': '<p>Hello world.</p>',
|
2020-04-19 16:01:19 +00:00
|
|
|
'emojis': [],
|
|
|
|
'reblogs_count': 0,
|
|
|
|
'favourites_count': 0,
|
|
|
|
'reblogged': False,
|
|
|
|
'favourited': False,
|
|
|
|
'muted': False,
|
|
|
|
'sensitive': False,
|
|
|
|
'spoiler_text': '',
|
|
|
|
'visibility': 'A',
|
|
|
|
'media_attachments': [],
|
|
|
|
'tags': [],
|
|
|
|
'card': None,
|
|
|
|
'poll': None,
|
2020-04-25 15:12:04 +00:00
|
|
|
# FIXME: See the note about "application" in
|
|
|
|
# trilby_api/serializers.py.
|
|
|
|
# 'application': None,
|
2020-04-19 16:01:19 +00:00
|
|
|
'language': 'en',
|
|
|
|
'pinned': False,
|
|
|
|
}
|
2020-04-16 16:25:17 +00:00
|
|
|
|
2023-09-22 18:18:39 +00:00
|
|
|
class TrilbyTestCase(KepiTestCase):
|
2020-04-16 15:39:38 +00:00
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
|
|
|
|
settings.KEPI['LOCAL_OBJECT_HOSTNAME'] = 'testserver'
|
|
|
|
|
|
|
|
super().setUp()
|
2019-10-25 19:14:30 +00:00
|
|
|
|
2020-04-16 16:25:17 +00:00
|
|
|
def _create_alice(self):
|
|
|
|
|
|
|
|
# TODO: this should be replaced with a general-case "_create_user()"
|
|
|
|
# that then gets used everywhere
|
|
|
|
|
|
|
|
result = create_local_person('alice')
|
|
|
|
self._alice = result
|
|
|
|
return result
|
|
|
|
|
|
|
|
def request(self, verb, path,
|
2021-02-14 22:00:18 +00:00
|
|
|
data = None,
|
2020-04-16 16:25:17 +00:00
|
|
|
as_user=None,
|
2020-04-19 15:10:08 +00:00
|
|
|
expect_result=200,
|
|
|
|
parse_result=True,
|
2021-02-14 22:00:18 +00:00
|
|
|
**extra,
|
2020-04-16 16:25:17 +00:00
|
|
|
):
|
|
|
|
|
|
|
|
c = APIClient()
|
|
|
|
|
|
|
|
if as_user:
|
|
|
|
c.force_authenticate(as_user.local_user)
|
|
|
|
|
|
|
|
command = getattr(c, verb)
|
|
|
|
|
|
|
|
result = command(
|
2020-04-18 22:57:47 +00:00
|
|
|
path=path,
|
|
|
|
data=data,
|
|
|
|
format='json',
|
2021-02-14 22:00:18 +00:00
|
|
|
extra=extra,
|
2020-04-16 16:25:17 +00:00
|
|
|
)
|
|
|
|
|
2020-04-19 15:10:08 +00:00
|
|
|
if expect_result is not None:
|
|
|
|
self.assertEqual(
|
|
|
|
result.status_code,
|
|
|
|
expect_result,
|
2020-04-22 16:10:57 +00:00
|
|
|
msg = f"Got {result.status_code} from "+\
|
|
|
|
f"{path}; expected {expect_result}.",
|
2020-04-19 15:10:08 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
if parse_result:
|
|
|
|
result = json.loads(result.content)
|
|
|
|
|
2020-04-16 16:25:17 +00:00
|
|
|
return result
|
|
|
|
|
|
|
|
def get(self, *args, **kwargs):
|
|
|
|
return self.request('get', *args, **kwargs)
|
|
|
|
|
|
|
|
def post(self, *args, **kwargs):
|
|
|
|
return self.request('post', *args, **kwargs)
|
|
|
|
|
|
|
|
def patch(self, *args, **kwargs):
|
|
|
|
return self.request('patch', *args, **kwargs)
|
|
|
|
|
|
|
|
def delete(self, *args, **kwargs):
|
|
|
|
return self.request('delete', *args, **kwargs)
|
|
|
|
|
2020-04-22 16:10:57 +00:00
|
|
|
def create_local_person(name='jemima',
|
2020-09-16 00:10:23 +00:00
|
|
|
load_default_keys_from='kepi/bowler_pub/tests/keys/keys-0003.json',
|
2020-04-22 16:10:57 +00:00
|
|
|
**kwargs):
|
2019-10-20 23:20:11 +00:00
|
|
|
|
2020-09-16 00:10:23 +00:00
|
|
|
if 'publicKey' or 'privateKey' not in kwargs:
|
|
|
|
keys = json.load(open(load_default_keys_from, 'r'))
|
|
|
|
|
|
|
|
if 'publicKey' not in kwargs:
|
|
|
|
kwargs['publicKey'] = keys['public']
|
|
|
|
|
|
|
|
if 'privateKey' not in kwargs:
|
|
|
|
kwargs['privateKey'] = keys['private']
|
|
|
|
|
2020-05-13 00:38:06 +00:00
|
|
|
result = LocalPerson(
|
2020-04-18 23:13:50 +00:00
|
|
|
username = name,
|
2020-04-22 16:10:57 +00:00
|
|
|
**kwargs,
|
2020-03-16 17:54:02 +00:00
|
|
|
)
|
2020-03-20 15:45:09 +00:00
|
|
|
result.save()
|
2019-10-20 23:20:11 +00:00
|
|
|
|
|
|
|
return result
|
2019-10-25 19:14:30 +00:00
|
|
|
|
2020-09-16 00:10:23 +00:00
|
|
|
def create_local_status(
|
|
|
|
content = 'This is just a test',
|
|
|
|
posted_by = None,
|
2020-10-24 22:17:13 +00:00
|
|
|
send_signal = False,
|
2020-04-04 19:51:20 +00:00
|
|
|
**kwargs,
|
2019-12-25 23:21:43 +00:00
|
|
|
):
|
2019-10-25 19:14:30 +00:00
|
|
|
|
|
|
|
if isinstance(posted_by, TrilbyUser):
|
2020-03-27 22:38:05 +00:00
|
|
|
posted_by = posted_by.person
|
|
|
|
|
|
|
|
result = Status(
|
|
|
|
remote_url = None,
|
|
|
|
account = posted_by,
|
2021-02-16 22:58:42 +00:00
|
|
|
content_source = content,
|
2020-04-04 19:51:20 +00:00
|
|
|
**kwargs,
|
2020-03-27 22:38:05 +00:00
|
|
|
)
|
2019-10-25 19:14:30 +00:00
|
|
|
|
2020-10-24 22:17:13 +00:00
|
|
|
result.save(
|
|
|
|
send_signal = send_signal,
|
|
|
|
)
|
2020-03-27 22:38:05 +00:00
|
|
|
|
|
|
|
return result
|
2020-09-16 00:10:23 +00:00
|
|
|
|
|
|
|
def create_local_like(
|
|
|
|
liked_by,
|
|
|
|
**kwargs):
|
|
|
|
|
|
|
|
note = create_local_status()
|
|
|
|
|
|
|
|
result = Like(
|
|
|
|
liker = note,
|
|
|
|
liked = liked_by,
|
|
|
|
)
|
|
|
|
|
|
|
|
return result
|