""" Test workspace creation validation for Issue #11: Setup TDD workspace infrastructure This test validates that the TDD workspace infrastructure can successfully create and manage workspaces for issue-driven development. Issue Reference: #11 - Setup TDD workspace infrastructure """ import pytest import os import json import tempfile import shutil from pathlib import Path from unittest.mock import patch, MagicMock from tddai import WorkspaceManager, WorkspaceStatus, WorkspaceError class TestWorkspaceCreationValidation: """Test workspace creation and basic infrastructure validation.""" def setup_method(self): """Set up test environment with temporary workspace.""" self.test_dir = tempfile.mkdtemp() self.workspace_dir = Path(self.test_dir) / '.markitect_workspace' self.workspace_manager = WorkspaceManager(str(self.workspace_dir)) def teardown_method(self): """Clean up test environment.""" if os.path.exists(self.test_dir): shutil.rmtree(self.test_dir) def test_workspace_creation_from_issue_data(self): """Test that workspace can be created from issue data.""" # Arrange issue_data = { 'number': 11, 'title': 'Setup TDD workspace infrastructure', 'body': 'Test workspace creation and management', 'state': 'open' } # Act workspace_path = self.workspace_manager.create_workspace(issue_data) # Assert assert workspace_path.exists() assert (workspace_path / 'requirements.md').exists() assert (workspace_path / 'test_plan.md').exists() assert (workspace_path / 'tests').exists() assert (workspace_path / 'tests').is_dir() def test_workspace_metadata_persistence(self): """Test that workspace metadata is properly persisted.""" # Arrange issue_data = { 'number': 11, 'title': 'Setup TDD workspace infrastructure', 'body': 'Test workspace metadata', 'state': 'open' } # Act self.workspace_manager.create_workspace(issue_data) # Assert current_issue_file = self.workspace_dir / 'current_issue.json' assert current_issue_file.exists() with open(current_issue_file, 'r') as f: metadata = json.load(f) assert metadata['issue_number'] == 11 assert metadata['title'] == 'Setup TDD workspace infrastructure' assert 'workspace_path' in metadata assert 'created_at' in metadata def test_workspace_status_reporting(self): """Test that workspace status can be accurately reported.""" # Arrange issue_data = { 'number': 11, 'title': 'Setup TDD workspace infrastructure', 'body': 'Test status reporting', 'state': 'open' } # Act self.workspace_manager.create_workspace(issue_data) status = self.workspace_manager.get_workspace_status() # Assert assert isinstance(status, WorkspaceStatus) assert status.issue_number == 11 assert status.title == 'Setup TDD workspace infrastructure' assert status.state == 'open' assert len(status.generated_tests) == 0 # No tests generated yet def test_multiple_workspace_prevention(self): """Test that only one workspace can be active at a time.""" # Arrange issue_data_1 = {'number': 11, 'title': 'First Issue', 'body': 'Test', 'state': 'open'} issue_data_2 = {'number': 12, 'title': 'Second Issue', 'body': 'Test', 'state': 'open'} # Act self.workspace_manager.create_workspace(issue_data_1) # Assert with pytest.raises(WorkspaceError, match="workspace already exists"): self.workspace_manager.create_workspace(issue_data_2) def test_workspace_test_directory_structure(self): """Test that workspace creates proper test directory structure.""" # Arrange issue_data = { 'number': 11, 'title': 'Setup TDD workspace infrastructure', 'body': 'Test directory structure', 'state': 'open' } # Act workspace_path = self.workspace_manager.create_workspace(issue_data) tests_dir = workspace_path / 'tests' # Assert assert tests_dir.exists() assert tests_dir.is_dir() # Test directory should be empty initially assert len(list(tests_dir.iterdir())) == 0 def test_workspace_cleanup_capability(self): """Test that workspace can be properly cleaned up.""" # Arrange issue_data = { 'number': 11, 'title': 'Setup TDD workspace infrastructure', 'body': 'Test cleanup', 'state': 'open' } # Act workspace_path = self.workspace_manager.create_workspace(issue_data) assert workspace_path.exists() self.workspace_manager.cleanup_workspace() # Assert assert not workspace_path.exists() current_issue_file = self.workspace_dir / 'current_issue.json' assert not current_issue_file.exists() if __name__ == '__main__': pytest.main([__file__, '-v'])