chore: initial snapshot of tubco people portal
This commit is contained in:
73
backend/workflows/tests/test_nextcloud_service.py
Normal file
73
backend/workflows/tests/test_nextcloud_service.py
Normal file
@@ -0,0 +1,73 @@
|
||||
from pathlib import Path
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from workflows.models import WorkflowConfig
|
||||
from workflows.services import upload_to_nextcloud
|
||||
|
||||
|
||||
class NextcloudServiceTests(TestCase):
|
||||
@override_settings(NEXTCLOUD_ENABLED=False)
|
||||
@patch('workflows.services.requests.put')
|
||||
def test_upload_returns_false_when_disabled(self, mock_put):
|
||||
result = upload_to_nextcloud(Path('/tmp/nonexistent.txt'), 'x.txt')
|
||||
self.assertFalse(result)
|
||||
mock_put.assert_not_called()
|
||||
|
||||
@override_settings(
|
||||
NEXTCLOUD_ENABLED=True,
|
||||
NEXTCLOUD_BASE_URL='https://cloud.example/remote.php/dav/files/test-user',
|
||||
NEXTCLOUD_DIRECTORY='Onboarding',
|
||||
NEXTCLOUD_USERNAME='u',
|
||||
NEXTCLOUD_PASSWORD='p',
|
||||
)
|
||||
@patch('workflows.services.requests.put')
|
||||
def test_upload_calls_webdav_and_accepts_201(self, mock_put):
|
||||
temp_file = Path('/tmp/nextcloud_mock_upload.txt')
|
||||
temp_file.write_text('hello', encoding='utf-8')
|
||||
mock_put.return_value.status_code = 201
|
||||
|
||||
try:
|
||||
result = upload_to_nextcloud(temp_file, 'target.txt')
|
||||
finally:
|
||||
temp_file.unlink(missing_ok=True)
|
||||
|
||||
self.assertTrue(result)
|
||||
self.assertEqual(mock_put.call_count, 1)
|
||||
called_url = mock_put.call_args.kwargs['url'] if 'url' in mock_put.call_args.kwargs else mock_put.call_args.args[0]
|
||||
self.assertTrue(called_url.endswith('/Onboarding/target.txt'))
|
||||
|
||||
@override_settings(
|
||||
NEXTCLOUD_ENABLED=True,
|
||||
NEXTCLOUD_BASE_URL='https://cloud.example/remote.php/dav/files/env-user',
|
||||
NEXTCLOUD_DIRECTORY='EnvFolder',
|
||||
NEXTCLOUD_USERNAME='env-user',
|
||||
NEXTCLOUD_PASSWORD='env-pass',
|
||||
)
|
||||
@patch('workflows.services.requests.put')
|
||||
def test_upload_prefers_workflowconfig_overrides(self, mock_put):
|
||||
WorkflowConfig.objects.update_or_create(
|
||||
name='Default',
|
||||
defaults={
|
||||
'nextcloud_enabled_override': True,
|
||||
'nextcloud_base_url_override': 'https://cloud.example/remote.php/dav/files/admin-user',
|
||||
'nextcloud_directory_override': 'AdminFolder',
|
||||
'nextcloud_username_override': 'admin-user',
|
||||
'nextcloud_password_override': 'admin-pass',
|
||||
},
|
||||
)
|
||||
temp_file = Path('/tmp/nextcloud_override_upload.txt')
|
||||
temp_file.write_text('hello', encoding='utf-8')
|
||||
mock_put.return_value.status_code = 201
|
||||
|
||||
try:
|
||||
result = upload_to_nextcloud(temp_file, 'override.txt')
|
||||
finally:
|
||||
temp_file.unlink(missing_ok=True)
|
||||
|
||||
self.assertTrue(result)
|
||||
called_url = mock_put.call_args.kwargs['url'] if 'url' in mock_put.call_args.kwargs else mock_put.call_args.args[0]
|
||||
self.assertTrue(called_url.endswith('/AdminFolder/override.txt'))
|
||||
auth = mock_put.call_args.kwargs.get('auth')
|
||||
self.assertEqual(auth, ('admin-user', 'admin-pass'))
|
||||
Reference in New Issue
Block a user