70 lines
2.4 KiB
Python
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_CREDS = '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
|