diff --git a/tests/test_outbox.py b/tests/test_outbox.py new file mode 100644 index 0000000..b28c01d --- /dev/null +++ b/tests/test_outbox.py @@ -0,0 +1,52 @@ +#!/usr/bin/env python3 +import pytest +import fastapi +import respx +import httpx +from uuid import uuid4 +from tests import factories + +from unittest import mock +from app.main import app +from app.utils import precheck +from fastapi.testclient import TestClient +from sqlalchemy.orm import Session +from app import activitypub as ap, httpsig +from app.config import AP_CONTENT_TYPE +from app import models +from sqlalchemy import select + + +@pytest.mark.asyncio +async def test_outbox_send_follow_request( + db: Session, + client: TestClient, + respx_mock: respx.MockRouter, +) -> None: + # build test actor + ra = factories.RemoteActorFactory( + base_url="https://example.com", + username="test", + public_key="pk", + ) + + remote_ap_id = ra.ap_id # type: ignore + app.dependency_overrides[precheck.inbox_prechecker] = \ + factories.inbox_prechecker + + # mock request + respx_mock.get(remote_ap_id).mock( + return_value=httpx.Response(200,json=ra.ap_actor)) + respx_mock.post(remote_ap_id + "/inbox").mock( + return_value=httpx.Response(202)) + + from app.database import async_session + from app.boxes import send_follow + + async with async_session() as db_session: #type: ignore + await send_follow(db_session, remote_ap_id) + + # And the Follow activity was created in the outbox + outbox_object = db.execute(select(models.OutboxObject)).scalar_one() + assert outbox_object.ap_type == "Follow" + assert outbox_object.activity_object_ap_id == remote_ap_id