petale/tests/test_commands.py

70 lines
2.4 KiB
Python

from unittest import mock
import pytest
from django.core.files.base import ContentFile
from django.core.management import call_command
from petale.api_views import check_unknown_cuts
from petale.models import CUT, Partner, Petal
@pytest.fixture(autouse=True)
def settings(settings):
settings.PETALE_AUTHENTIC_URL = 'https://authentic.example.com/'
settings.PETALE_AUTHENTIC_AUTH = 'admin:admin'
@pytest.fixture
def requests_post():
post_return_value = mock.Mock()
post_return_value.json.return_value = None
with mock.patch('requests.post', return_value=post_return_value) as requests_post:
yield requests_post
def test_check_unknown_cuts(requests_post):
requests_post.return_value.json.return_value = {'unknown_uuids': ['1']}
assert check_unknown_cuts(['1']) == ['1']
assert requests_post.call_args[0] == ('https://authentic.example.com/api/users/synchronization/',)
assert requests_post.call_args[1] == {
'auth': 'admin:admin',
'json': {'known_uuids': ['1']},
'verify': False,
}
class TestClean:
uuids = {str(i) for i in range(10)}
unknown_uuids = {str(i) for i in range(5)}
@pytest.fixture
def partner(self, db):
return Partner.objects.create(name='partner')
@pytest.fixture
def cuts(self, partner):
for uuid in self.uuids:
cut = CUT.objects.create(uuid=uuid)
petal = Petal.objects.create(name='petal', partner=partner, cut=cut, size=0)
petal.data.save('petal.dat', ContentFile(b'1234'))
@pytest.fixture
def requests_post(self, requests_post):
requests_post.return_value.json.return_value = {'unknown_uuids': self.unknown_uuids}
return requests_post
def test_dry(self, cuts, partner, requests_post):
call_command('clean')
assert set(requests_post.call_args[1]['json']['known_uuids']) == self.uuids
assert set(CUT.objects.values_list('uuid', flat=True)) == self.uuids
def test_delete(self, cuts, partner, requests_post):
call_command('clean', '--delete')
assert set(requests_post.call_args[1]['json']['known_uuids']) == self.uuids
assert set(CUT.objects.values_list('uuid', flat=True)) == self.uuids - self.unknown_uuids
call_command('clean', '--delete')
assert set(requests_post.call_args[1]['json']['known_uuids']) == self.uuids - self.unknown_uuids