Source code for test_backup

"""Test suite for the BackupOptions model."""
from django.test import TestCase
from django.core.exceptions import ValidationError

from management.forms import BackupOptionsForm
from management.models import BackupOptions


[docs] class BackupOptionsModelTest(TestCase): """Test suite for the BackupOptions model, ensuring that it enforces singleton behavior."""
[docs] def test_singleton_creation(self) -> None: """Test that attempts to create more than one BackupOptions instance.""" BackupOptions.objects.create( host="localhost", port=22, user="user", local_storage=True ) with self.assertRaises(ValidationError): BackupOptions.objects.create( host="remote", port=22, user="another_user", local_storage=False )
[docs] def test_singleton_save_overwrite(self) -> None: """Test that saving an existing BackupOptions instance overwrites its values.""" instance = BackupOptions.objects.create( host="localhost", port=22, user="user", local_storage=True ) instance.host = "updated_host" instance.save() self.assertEqual(BackupOptions.objects.count(), 1) self.assertEqual(BackupOptions.objects.first().host, "updated_host")
[docs] class BackupOptionsFormTest(TestCase): """Test suite for the BackupOptionsForm, ensuring validation logic."""
[docs] def test_invalid_sftp_configuration(self) -> None: """Test that enabling SFTP storage without providing required fields.""" # SFTP is enabled but without necessary fields like host and user form_data = { 'local_storage': False, 'sftp_storage': True, 'host': '', 'port': 2222, 'user': '', 'auth_method': '', } form = BackupOptionsForm(data=form_data) self.assertFalse(form.is_valid()) error_message = form.errors.as_text() self.assertIn("Host", error_message) self.assertIn("Username", error_message) self.assertIn("Remote Directory", error_message)
[docs] def test_sftp_password_auth_without_password(self) -> None: """Test validation fails when password is not provided for PASSWORD auth method.""" form_data = { 'local_storage': False, 'sftp_storage': True, 'host': 'localhost', 'port': 22, 'user': 'user', 'auth_method': BackupOptions.AuthMethod.PASSWORD, 'password': '', # Missing password } form = BackupOptionsForm(data=form_data) self.assertFalse(form.is_valid()) self.assertIn("Password is required when using password authentication.", form.errors['password'])
[docs] def test_sftp_ssh_key_auth_without_private_key(self) -> None: """Test validation fails when private_key is not provided for SSH_KEY auth method.""" form_data = { 'local_storage': False, 'sftp_storage': True, 'host': 'localhost', 'port': 22, 'user': 'user', 'auth_method': BackupOptions.AuthMethod.SSH_KEY, 'private_key': '', # Missing private key } form = BackupOptionsForm(data=form_data) self.assertFalse(form.is_valid()) self.assertIn("Private key is required when using SSH Key authentication.", form.errors['private_key'])
[docs] def test_valid_sftp_password_auth(self) -> None: """Test that SFTP with PASSWORD auth method and valid password passes validation.""" form_data = { 'local_storage': False, 'sftp_storage': True, 'host': 'localhost', 'port': 22, 'user': 'user', 'auth_method': BackupOptions.AuthMethod.PASSWORD, 'password': 'secure_password', 'remote_directory': '/backups/', } form = BackupOptionsForm(data=form_data) self.assertTrue(form.is_valid())
[docs] def test_valid_sftp_ssh_key_auth(self) -> None: """Test that SFTP with SSH_KEY auth method and valid private_key passes validation.""" form_data = { 'local_storage': False, 'sftp_storage': True, 'host': 'localhost', 'port': 22, 'user': 'user', 'auth_method': BackupOptions.AuthMethod.SSH_KEY, 'private_key': 'secure_private_key', 'remote_directory': '/backups/', } form = BackupOptionsForm(data=form_data) self.assertTrue(form.is_valid())