Skip to content
Snippets Groups Projects
test_library.py 2.24 KiB
Newer Older
from funkwhale_api.federation import library
from funkwhale_api.federation import serializers


def test_library_scan_from_account_name(mocker, factories):
    actor = factories['federation.Actor'](
        preferred_username='library',
        domain='test.library'
    )
    get_resource_result = {'actor_url': actor.url}
    get_resource = mocker.patch(
        'funkwhale_api.federation.webfinger.get_resource',
        return_value=get_resource_result)

    actor_data = serializers.ActorSerializer(actor).data
    actor_data['manuallyApprovesFollowers'] = False
    actor_data['url'] = [{
        'type': 'Link',
        'name': 'library',
        'mediaType': 'application/activity+json',
        'href': 'https://test.library'
    }]
    get_actor_data = mocker.patch(
        'funkwhale_api.federation.actors.get_actor_data',
        return_value=actor_data)

    get_library_data_result = {'test': 'test'}
    get_library_data = mocker.patch(
        'funkwhale_api.federation.library.get_library_data',
        return_value=get_library_data_result)

    result = library.scan_from_account_name('library@test.actor')

    get_resource.assert_called_once_with('acct:library@test.actor')
    get_actor_data.assert_called_once_with(actor.url)
    get_library_data.assert_called_once_with(actor_data['url'][0]['href'])

    assert result == {
        'webfinger': get_resource_result,
        'actor': actor_data,
        'library': get_library_data_result,
        'local': {
            'following': False,
            'awaiting_approval': False,
        },
    }


def test_get_library_data(r_mock, factories):
    actor = factories['federation.Actor']()
    url = 'https://test.library'
    conf = {
        'id': url,
        'items': [],
        'actor': actor,
        'page_size': 5,
    }
    data = serializers.PaginatedCollectionSerializer(conf).data
    r_mock.get(url, json=data)

    result = library.get_library_data(url)
    for f in ['totalItems', 'actor', 'id', 'type']:
        assert result[f] == data[f]


def test_get_library_data_requires_authentication(r_mock, factories):
    url = 'https://test.library'
    r_mock.get(url, status_code=403)
    result = library.get_library_data(url)
    assert result['errors'] == ['Permission denied while scanning library']