#!/usr/bin/env python3
"""Tests for scitex_writer._project._create.clone_writer_project."""
import subprocess
from unittest.mock import MagicMock, patch
from scitex_writer._project._create import clone_writer_project
class TestCloneWriterProjectSuccess:
"""Tests for clone_writer_project success cases."""
def test_returns_true_on_success(self, tmp_path):
"""Verify clone_writer_project returns True on success."""
project_dir = tmp_path / "new_paper"
# Mock subprocess.run to simulate successful clone
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.return_value = MagicMock(returncode=0)
result = clone_writer_project(str(project_dir))
# Should return True when subprocess succeeds
assert result is True
def test_passes_git_strategy(self, tmp_path):
"""Verify git_strategy affects git initialization."""
project_dir = tmp_path / "new_paper"
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.return_value = MagicMock(returncode=0)
clone_writer_project(str(project_dir), git_strategy="parent")
# Function should succeed
assert True # Basic test that it doesn't crash
def test_passes_branch(self, tmp_path):
"""Verify branch parameter is handled."""
project_dir = tmp_path / "new_paper"
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.return_value = MagicMock(returncode=0)
result = clone_writer_project(str(project_dir), branch="develop")
assert result is True
def test_passes_tag(self, tmp_path):
"""Verify tag parameter is handled."""
project_dir = tmp_path / "new_paper"
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.return_value = MagicMock(returncode=0)
result = clone_writer_project(str(project_dir), tag="v1.0.0")
assert result is True
class TestCloneWriterProjectFailure:
"""Tests for clone_writer_project failure cases."""
def test_returns_false_when_clone_fails(self, tmp_path):
"""Verify returns False when git clone fails."""
project_dir = tmp_path / "new_paper"
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.side_effect = subprocess.CalledProcessError(1, "git")
result = clone_writer_project(str(project_dir))
assert result is False
def test_returns_false_on_exception(self, tmp_path):
"""Verify returns False on generic exception."""
project_dir = tmp_path / "new_paper"
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.side_effect = Exception("Test error")
result = clone_writer_project(str(project_dir))
assert result is False
class TestCloneWriterProjectGitStrategy:
"""Tests for clone_writer_project git_strategy parameter."""
def test_default_git_strategy_is_child(self, tmp_path):
"""Verify default git_strategy is 'child'."""
project_dir = tmp_path / "new_paper"
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.return_value = MagicMock(returncode=0)
result = clone_writer_project(str(project_dir))
assert result is True
def test_git_strategy_none(self, tmp_path):
"""Verify git_strategy=None works."""
project_dir = tmp_path / "new_paper"
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.return_value = MagicMock(returncode=0)
result = clone_writer_project(str(project_dir), git_strategy=None)
assert result is True
def test_git_strategy_origin(self, tmp_path):
"""Verify git_strategy='origin' works."""
project_dir = tmp_path / "new_paper"
with patch("scitex_writer._project._create.subprocess.run") as mock_run:
mock_run.return_value = MagicMock(returncode=0)
result = clone_writer_project(str(project_dir), git_strategy="origin")
assert result is True