85 lines
3.3 KiB
Python
85 lines
3.3 KiB
Python
from unittest import mock
|
|
|
|
import pytest
|
|
from django.core.files.base import ContentFile
|
|
from django.core.management import call_command
|
|
|
|
from petale.management.commands.clean import check_unknown_cuts
|
|
from petale.models import CUT, Partner, Petal
|
|
|
|
|
|
@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'], ('admin', 'admin')) == ['1']
|
|
assert requests_post.call_args[0] == ('http://example.net/idp/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 other_partner(self, db):
|
|
return Partner.objects.create(name='other')
|
|
|
|
@pytest.fixture
|
|
def partner(self, db):
|
|
return Partner.objects.create(name='partner')
|
|
|
|
@pytest.fixture
|
|
def cuts(self, partner, other_partner, media):
|
|
for uuid in ['a', 'b', 'c']:
|
|
cut = CUT.objects.create(uuid=uuid)
|
|
petal = Petal.objects.create(name='petal', partner=other_partner, cut=cut, size=0)
|
|
petal.data.save('petal.dat', ContentFile(b'1234'))
|
|
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'))
|
|
assert len(list(media.rglob('petal'))) == 13
|
|
assert len(list(media.glob('*/*/*/*'))) == 13
|
|
|
|
@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, media):
|
|
call_command('clean', 'partner', '1234', '5678')
|
|
assert set(requests_post.call_args[1]['json']['known_uuids']) == self.uuids
|
|
assert set(CUT.objects.filter(petal__partner=partner).values_list('uuid', flat=True)) == self.uuids
|
|
assert len(list(media.rglob('petal'))) == 13
|
|
assert len(list(media.glob('*/*/*/*'))) == 13
|
|
|
|
def test_delete(self, cuts, partner, requests_post, media):
|
|
call_command('clean', '--delete', 'partner', '1234', '5678')
|
|
assert set(requests_post.call_args[1]['json']['known_uuids']) == self.uuids
|
|
assert (
|
|
set(CUT.objects.filter(petal__partner=partner).values_list('uuid', flat=True))
|
|
== self.uuids - self.unknown_uuids
|
|
)
|
|
assert len(list(media.rglob('petal'))) == 8
|
|
assert len(list(media.glob('*/*/*/*'))) == 8
|
|
|
|
call_command('clean', '--delete', 'partner', '1234', '5678')
|
|
assert set(requests_post.call_args[1]['json']['known_uuids']) == self.uuids - self.unknown_uuids
|
|
assert len(list(media.rglob('*/partner/**/petal'))) == 5
|
|
assert len(list(media.glob('*/partner/*/*'))) == 5
|
|
assert len(list(media.rglob('*/*/**/petal'))) == 8
|
|
assert len(list(media.glob('*/*/*/*'))) == 8
|