summaryrefslogtreecommitdiffstats
path: root/tests/users/models/test_system_actor.py
blob: 855d2f6fea147b6270ea6a11314e31e54db7dc87 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import pytest
from asgiref.sync import async_to_sync
from django.test.client import RequestFactory
from pytest_httpx import HTTPXMock

from core.signatures import HttpSignature
from users.models import SystemActor


@pytest.mark.django_db
def test_system_actor_signed(config_system, httpx_mock: HTTPXMock):
    """
    Tests that the system actor signs requests properly
    """
    system_actor = SystemActor()
    system_actor.generate_keys()
    # Send a fake outbound request
    httpx_mock.add_response()
    async_to_sync(system_actor.signed_request)(
        method="get",
        uri="http://example.com/test-actor",
    )
    # Retrieve it and construct a fake request object
    outbound_request = httpx_mock.get_request()
    fake_request = RequestFactory().get(
        path="/test-actor",
        HTTP_HOST="example.com",
        HTTP_DATE=outbound_request.headers["date"],
        HTTP_SIGNATURE=outbound_request.headers["signature"],
        HTTP_ACCEPT=outbound_request.headers["accept"],
    )
    # Verify that
    HttpSignature.verify_request(fake_request, system_actor.public_key)