2023-09-21 20:37:17 +00:00
|
|
|
"""Unit tests for ids.py."""
|
|
|
|
from activitypub import ActivityPub
|
|
|
|
from atproto import ATProto
|
2023-09-22 18:41:30 +00:00
|
|
|
from ids import convert_handle, convert_id
|
2023-09-21 20:37:17 +00:00
|
|
|
from models import Target
|
|
|
|
from web import Web
|
|
|
|
from .testutil import Fake, TestCase
|
|
|
|
|
|
|
|
|
|
|
|
class IdsTest(TestCase):
|
|
|
|
def test_convert_id(self):
|
|
|
|
Web(id='user.com', atproto_did='did:plc:123',
|
|
|
|
copies=[Target(uri='did:plc:123', protocol='atproto')]).put()
|
2023-09-25 13:42:31 +00:00
|
|
|
ActivityPub(id='https://inst/user', atproto_did='did:plc:456',
|
2023-09-21 20:37:17 +00:00
|
|
|
copies=[Target(uri='did:plc:456', protocol='atproto')]).put()
|
|
|
|
Fake(id='fake:user', atproto_did='did:plc:789',
|
|
|
|
copies=[Target(uri='did:plc:789', protocol='atproto')]).put()
|
|
|
|
|
|
|
|
for from_, id, to, expected in [
|
2023-09-25 13:42:31 +00:00
|
|
|
(ActivityPub, 'https://inst/user', ActivityPub, 'https://inst/user'),
|
|
|
|
(ActivityPub, 'https://inst/user', ATProto, 'did:plc:456'),
|
|
|
|
(ActivityPub, 'https://inst/user', Fake, 'fake:https://inst/user'),
|
|
|
|
(ActivityPub, 'https://inst/user', Web, 'https://inst/user'),
|
2023-09-21 20:37:17 +00:00
|
|
|
(ATProto, 'did:plc:123', Web, 'user.com'),
|
2023-09-25 13:42:31 +00:00
|
|
|
(ATProto, 'did:plc:456', ActivityPub, 'https://inst/user'),
|
|
|
|
(ATProto, 'did:plc:456', ATProto, 'did:plc:456'),
|
2023-09-21 20:37:17 +00:00
|
|
|
(ATProto, 'did:plc:789', Fake, 'fake:user'),
|
|
|
|
(Fake, 'fake:user', ActivityPub, 'http://localhost/fa/ap/fake:user'),
|
|
|
|
(Fake, 'fake:user', ATProto, 'did:plc:789'),
|
2023-09-25 13:42:31 +00:00
|
|
|
(Fake, 'fake:user', Fake, 'fake:user'),
|
|
|
|
(Fake, 'fake:user', Web, 'fake:user'),
|
|
|
|
(Web, 'user.com', ActivityPub, 'http://localhost/web/ap/user.com'),
|
|
|
|
(Web, 'user.com', ATProto, 'did:plc:123'),
|
|
|
|
(Web, 'user.com', Fake, 'fake:user.com'),
|
|
|
|
(Web, 'user.com', Web, 'user.com'),
|
2023-09-21 20:37:17 +00:00
|
|
|
]:
|
|
|
|
with self.subTest(from_=from_.LABEL, to=to.LABEL):
|
|
|
|
self.assertEqual(expected, convert_id(
|
|
|
|
id=id, from_proto=from_, to_proto=to))
|
|
|
|
|
|
|
|
def test_convert_id_no_atproto_did_stored(self):
|
2023-09-22 18:41:30 +00:00
|
|
|
for proto, id in [
|
|
|
|
(Web, 'user.com'),
|
|
|
|
(ActivityPub, 'https://instance/user'),
|
|
|
|
(Fake, 'fake:user'),
|
|
|
|
]:
|
2023-09-21 20:37:17 +00:00
|
|
|
with self.subTest(proto=proto.LABEL):
|
|
|
|
self.assertIsNone(convert_id(
|
2023-09-22 18:41:30 +00:00
|
|
|
id=id, from_proto=proto, to_proto=ATProto))
|
2023-09-21 20:37:17 +00:00
|
|
|
self.assertIsNone(convert_id(
|
|
|
|
id='did:plc:123', from_proto=ATProto, to_proto=proto))
|
2023-09-22 18:41:30 +00:00
|
|
|
|
|
|
|
def test_convert_handle(self):
|
|
|
|
for from_, handle, to, expected in [
|
|
|
|
# basic
|
|
|
|
(Web, 'user.com', ActivityPub, '@user.com@web.brid.gy'),
|
|
|
|
(Web, 'user.com', ATProto, 'user.com.web.brid.gy'),
|
2023-09-22 21:53:36 +00:00
|
|
|
(Web, 'user.com', Fake, 'fake:handle:user.com'),
|
2023-09-25 13:42:31 +00:00
|
|
|
(Web, 'user.com', Web, 'user.com'),
|
2023-09-22 18:41:30 +00:00
|
|
|
# # TODO: enhanced
|
|
|
|
# (Web, 'user.com', ActivityPub, '@user.com@user.com'),
|
2023-09-22 21:53:36 +00:00
|
|
|
# (Web, 'user.com', Fake, 'fake:handle:user.com'),
|
2023-09-22 18:41:30 +00:00
|
|
|
|
|
|
|
# TODO: webfinger lookup
|
2023-09-25 13:42:31 +00:00
|
|
|
(ActivityPub, '@user@instance', ActivityPub, '@user@instance'),
|
2023-09-22 18:41:30 +00:00
|
|
|
(ActivityPub, '@user@instance', ATProto, 'user.instance.ap.brid.gy'),
|
2023-09-22 21:53:36 +00:00
|
|
|
(ActivityPub, '@user@instance', Fake, 'fake:handle:@user@instance'),
|
2023-09-25 13:42:31 +00:00
|
|
|
(ActivityPub, '@user@instance', Web, 'instance/@user'),
|
2023-09-22 18:41:30 +00:00
|
|
|
# # # TODO: enhanced
|
|
|
|
# (ActivityPub, '@user@instance', Web, 'https://instance/user'),
|
2023-09-22 21:53:36 +00:00
|
|
|
# (ActivityPub, '@user@instance', Fake,
|
|
|
|
# 'fake:handle:https://instance/user'),
|
2023-09-22 18:41:30 +00:00
|
|
|
|
|
|
|
(ATProto, 'user.com', ActivityPub, '@user.com@atproto.brid.gy'),
|
2023-09-25 13:42:31 +00:00
|
|
|
(ATProto, 'user.com', ATProto, 'user.com'),
|
2023-09-22 21:53:36 +00:00
|
|
|
(ATProto, 'user.com', Fake, 'fake:handle:user.com'),
|
2023-09-25 13:42:31 +00:00
|
|
|
(ATProto, 'user.com', Web, 'user.com'),
|
2023-09-22 18:41:30 +00:00
|
|
|
# # # TODO: enhanced
|
|
|
|
# (ATProto, '@user@instance', ActivityPub, 'user.com'),
|
|
|
|
|
2023-09-22 21:53:36 +00:00
|
|
|
(Fake, 'fake:handle:user', ActivityPub, '@fake:handle:user@fa.brid.gy'),
|
|
|
|
(Fake, 'fake:handle:user', ATProto, 'fake:handle:user.fa.brid.gy'),
|
2023-09-25 13:42:31 +00:00
|
|
|
(Fake, 'fake:handle:user', Fake, 'fake:handle:user'),
|
|
|
|
(Fake, 'fake:handle:user', Web, 'fake:handle:user'),
|
2023-09-22 18:41:30 +00:00
|
|
|
]:
|
|
|
|
with self.subTest(from_=from_.LABEL, to=to.LABEL):
|
|
|
|
self.assertEqual(expected, convert_handle(
|
|
|
|
handle=handle, from_proto=from_, to_proto=to))
|