from __future__ import annotations from io import StringIO from unittest.mock import patch from django.test import SimpleTestCase from pobsync.cli import main class ConsoleEntrypointTests(SimpleTestCase): def test_version_prints_package_version(self) -> None: stdout = StringIO() with patch("sys.stdout", stdout): exit_code = main(["--version"]) self.assertEqual(exit_code, 0) self.assertEqual(stdout.getvalue().strip(), "pobsync 1.0.0") def test_maps_backup_alias_to_django_command(self) -> None: with patch("pobsync.cli.execute_from_command_line") as execute: exit_code = main(["backup", "web-01", "--dry-run"]) self.assertEqual(exit_code, 0) execute.assert_called_once_with(["pobsync", "run_pobsync_backup", "web-01", "--dry-run"]) def test_unknown_command_returns_usage_error(self) -> None: stderr = StringIO() with patch("sys.stderr", stderr): exit_code = main(["run-scheduled", "web-01"]) self.assertEqual(exit_code, 2) self.assertIn("Unknown pobsync command", stderr.getvalue()) def test_django_passthrough_keeps_management_command_name(self) -> None: with patch("pobsync.cli.execute_from_command_line") as execute: exit_code = main(["django", "check"]) self.assertEqual(exit_code, 0) execute.assert_called_once_with(["pobsync", "check"]) def test_maps_discover_snapshots_alias_to_django_command(self) -> None: with patch("pobsync.cli.execute_from_command_line") as execute: exit_code = main(["discover-snapshots", "--host", "web-01"]) self.assertEqual(exit_code, 0) execute.assert_called_once_with(["pobsync", "discover_pobsync_snapshots", "--host", "web-01"]) def test_maps_worker_alias_to_django_command(self) -> None: with patch("pobsync.cli.execute_from_command_line") as execute: exit_code = main(["worker", "--once"]) self.assertEqual(exit_code, 0) execute.assert_called_once_with(["pobsync", "run_pobsync_worker", "--once"]) def test_configuration_aliases_are_not_public_commands(self) -> None: stderr = StringIO() with patch("sys.stderr", stderr): exit_code = main(["schedule", "web-01", "--cron", "15 2 * * *"]) self.assertEqual(exit_code, 2) self.assertIn("Unknown pobsync command", stderr.getvalue()) self.assertIn("pobsync django ", stderr.getvalue())