fixed reverse chronological ordering in a pair of FTs clogging the pipeline; added ActivityPub to project; new apps.ap for WebFinger, Actor, Outbox views; apps.lyric.models now contains ap_public_key, ap_private_key fields + ensure_keypair(); new apps.lyric migration accordingly; new in drama.models are to_activity() w. JoinGate, SelectRole, Create compat. & None verb support; new core.urls for /.well-known/webfinger + /ap/ included; cryptography installed, added to reqs.txt; 24 new green UTs & ITs; in sum, project is now read-only ActivityPub node
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
88
src/apps/ap/tests/unit/test_activity.py
Normal file
88
src/apps/ap/tests/unit/test_activity.py
Normal file
@@ -0,0 +1,88 @@
|
||||
from django.test import TestCase
|
||||
|
||||
from apps.drama.models import GameEvent, record
|
||||
from apps.epic.models import Room
|
||||
from apps.lyric.models import User
|
||||
|
||||
|
||||
BASE = "https://earthmanrpg.me"
|
||||
|
||||
|
||||
class ToActivityTest(TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.user = User.objects.create(email="actor@test.io", username="testactor")
|
||||
self.room = Room.objects.create(name="Test Room", owner=self.user)
|
||||
|
||||
def _record(self, verb, **data):
|
||||
return record(self.room, verb, actor=self.user, **data)
|
||||
|
||||
def test_slot_filled_returns_join_gate_activity(self):
|
||||
event = self._record(
|
||||
GameEvent.SLOT_FILLED,
|
||||
slot_number=1, token_type="coin",
|
||||
token_display="Coin", renewal_days=7,
|
||||
)
|
||||
activity = event.to_activity(BASE)
|
||||
self.assertIsNotNone(activity)
|
||||
self.assertEqual(activity["type"], "earthman:JoinGate")
|
||||
|
||||
def test_role_selected_returns_select_role_activity(self):
|
||||
event = self._record(
|
||||
GameEvent.ROLE_SELECTED,
|
||||
role="PC", slot_number=1, role_display="Player",
|
||||
)
|
||||
activity = event.to_activity(BASE)
|
||||
self.assertIsNotNone(activity)
|
||||
self.assertEqual(activity["type"], "earthman:SelectRole")
|
||||
|
||||
def test_room_created_returns_create_activity(self):
|
||||
event = self._record(GameEvent.ROOM_CREATED)
|
||||
activity = event.to_activity(BASE)
|
||||
self.assertIsNotNone(activity)
|
||||
self.assertEqual(activity["type"], "Create")
|
||||
|
||||
def test_unsupported_verb_returns_none(self):
|
||||
event = self._record(GameEvent.INVITE_SENT)
|
||||
self.assertIsNone(event.to_activity(BASE))
|
||||
|
||||
def test_activity_contains_actor_url(self):
|
||||
event = self._record(
|
||||
GameEvent.ROLE_SELECTED,
|
||||
role="PC", slot_number=1, role_display="Player",
|
||||
)
|
||||
activity = event.to_activity(BASE)
|
||||
self.assertIn(BASE, activity["actor"])
|
||||
|
||||
def test_activity_contains_object_url(self):
|
||||
event = self._record(
|
||||
GameEvent.SLOT_FILLED,
|
||||
slot_number=1, token_type="coin",
|
||||
token_display="Coin", renewal_days=7,
|
||||
)
|
||||
activity = event.to_activity(BASE)
|
||||
self.assertIn(str(self.room.id), activity["object"])
|
||||
|
||||
|
||||
class EnsureKeypairTest(TestCase):
|
||||
|
||||
def test_ensure_keypair_populates_both_fields(self):
|
||||
user = User.objects.create(email="keys@test.io")
|
||||
self.assertEqual(user.ap_public_key, "")
|
||||
self.assertEqual(user.ap_private_key, "")
|
||||
user.ensure_keypair()
|
||||
self.assertTrue(user.ap_public_key.startswith("-----BEGIN PUBLIC KEY-----"))
|
||||
self.assertTrue(user.ap_private_key.startswith("-----BEGIN PRIVATE KEY-----"))
|
||||
|
||||
def test_ensure_keypair_persists_to_db(self):
|
||||
user = User.objects.create(email="persist@test.io")
|
||||
user.ensure_keypair()
|
||||
refreshed = User.objects.get(pk=user.pk)
|
||||
self.assertTrue(refreshed.ap_public_key.startswith("-----BEGIN PUBLIC KEY-----"))
|
||||
|
||||
def test_ensure_keypair_is_idempotent(self):
|
||||
user = User.objects.create(email="idem@test.io")
|
||||
user.ensure_keypair()
|
||||
original_pub = user.ap_public_key
|
||||
user.ensure_keypair()
|
||||
self.assertEqual(user.ap_public_key, original_pub)
|
||||
Reference in New Issue
Block a user