Skip to content
Snippets Groups Projects
test_actors.py 1.99 KiB
Newer Older
  • Learn to ignore specific revisions
  • Eliot Berriot's avatar
    Eliot Berriot committed
    from funkwhale_api.federation import actors, serializers
    
    
    
    def test_actor_fetching(r_mock):
        payload = {
    
    Eliot Berriot's avatar
    Eliot Berriot committed
            "id": "https://actor.mock/users/actor#main-key",
            "owner": "test",
            "publicKeyPem": "test_pem",
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        actor_url = "https://actor.mock/"
    
        r_mock.get(actor_url, json=payload)
        r = actors.get_actor_data(actor_url)
    
        assert r == payload
    
    
    
    def test_get_actor(factories, r_mock):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        actor = factories["federation.Actor"].build()
    
        payload = serializers.ActorSerializer(actor).data
    
        r_mock.get(actor.fid, json=payload)
        new_actor = actors.get_actor(actor.fid)
    
    
        assert new_actor.pk is not None
        assert serializers.ActorSerializer(new_actor).data == payload
    
    
    
    def test_get_actor_use_existing(factories, preferences, mocker):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        preferences["federation__actor_fetch_delay"] = 60
        actor = factories["federation.Actor"]()
        get_data = mocker.patch("funkwhale_api.federation.actors.get_actor_data")
    
        new_actor = actors.get_actor(actor.fid)
    
    
        assert new_actor == actor
        get_data.assert_not_called()
    
    
    
    def test_get_actor_refresh(factories, preferences, mocker):
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        preferences["federation__actor_fetch_delay"] = 0
        actor = factories["federation.Actor"]()
    
        payload = serializers.ActorSerializer(actor).data
        # actor changed their username in the meantime
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        payload["preferredUsername"] = "New me"
    
        mocker.patch("funkwhale_api.federation.actors.get_actor_data", return_value=payload)
    
        new_actor = actors.get_actor(actor.fid)
    
    
        assert new_actor == actor
        assert new_actor.last_fetch_date > actor.last_fetch_date
    
    Eliot Berriot's avatar
    Eliot Berriot committed
        assert new_actor.preferred_username == "New me"
    
    Eliot Berriot's avatar
    Eliot Berriot committed
    
    
    def test_get_service_actor(db, settings):
        settings.FEDERATION_HOSTNAME = "test.hello"
        settings.FEDERATION_SERVICE_ACTOR_USERNAME = "bob"
        actor = actors.get_service_actor()
    
        assert actor.preferred_username == "bob"
        assert actor.domain.name == "test.hello"
        assert actor.private_key is not None
        assert actor.type == "Service"
        assert actor.public_key is not None