Skip to content
Snippets Groups Projects
test_models.py 2.15 KiB
Newer Older
  • Learn to ignore specific revisions
  • import pytest
    
    import uuid
    
    
    from django import db
    
    from funkwhale_api.federation import models
    
    from funkwhale_api.federation import serializers
    
    
    
    def test_cannot_duplicate_actor(factories):
        actor = factories['federation.Actor']()
    
        with pytest.raises(db.IntegrityError):
            factories['federation.Actor'](
                domain=actor.domain,
                preferred_username=actor.preferred_username,
            )
    
    
    def test_cannot_duplicate_follow(factories):
        follow = factories['federation.Follow']()
    
        with pytest.raises(db.IntegrityError):
            factories['federation.Follow'](
                target=follow.target,
                actor=follow.actor,
            )
    
    
    def test_follow_federation_url(factories):
        follow = factories['federation.Follow'](local=True)
        expected = '{}#follows/{}'.format(
            follow.actor.url, follow.uuid)
    
        assert follow.get_federation_url() == expected
    
    
    
    def test_follow_request_approve(mocker, factories):
        uid = uuid.uuid4()
        mocker.patch('uuid.uuid4', return_value=uid)
        accept_follow = mocker.patch(
            'funkwhale_api.federation.activity.accept_follow')
        fr = factories['federation.FollowRequest'](target__local=True)
        fr.approve()
    
        follow = {
            '@context': serializers.AP_CONTEXT,
            'actor': fr.actor.url,
            'id': fr.actor.url + '#follows/{}'.format(uid),
            'object': fr.target.url,
            'type': 'Follow'
        }
    
        assert fr.approved is True
        assert list(fr.target.followers.all()) == [fr.actor]
        accept_follow.assert_called_once_with(
            fr.target, follow, fr.actor
        )
    
    
    def test_follow_request_approve_non_local(mocker, factories):
        uid = uuid.uuid4()
        mocker.patch('uuid.uuid4', return_value=uid)
        accept_follow = mocker.patch(
            'funkwhale_api.federation.activity.accept_follow')
        fr = factories['federation.FollowRequest']()
        fr.approve()
    
        assert fr.approved is True
        assert list(fr.target.followers.all()) == [fr.actor]
        accept_follow.assert_not_called()
    
    
    def test_follow_request_refused(mocker, factories):
        fr = factories['federation.FollowRequest']()
        fr.refuse()
    
        assert fr.approved is False
        assert fr.target.followers.count() == 0