Files
markitect-main/tests/test_l2_application_workspace_validation.py
tegwick 1358ca17ec
Some checks failed
Test Suite / unit-tests (3.11) (push) Has been cancelled
Test Suite / unit-tests (3.12) (push) Has been cancelled
Test Suite / integration-tests (push) Has been cancelled
Test Suite / e2e-tests (push) Has been cancelled
Test Suite / performance-tests (push) Has been cancelled
Test Suite / code-quality (push) Has been cancelled
Test Suite / security-scan (push) Has been cancelled
Test Suite / test-summary (push) Has been cancelled
refactor: Remove circular test dependencies and meta-testing anti-patterns
Clean up test infrastructure by removing problematic tests that create
circular dependencies and execute the test suite from within tests.

Key removals:
- Delete test_issue_57_test_efficiency_improvements.py entirely (12 tests)
  - Contained tests that ran `make test-tdd`, `make test-status` etc.
  - Created circular dependencies where tests execute the entire test suite
  - Violated separation of concerns between testing and test infrastructure

- Remove self-execution blocks from 11 test files
  - Eliminated `if __name__ == '__main__': pytest.main([__file__, '-v'])` patterns
  - Prevents confusion and potential circular execution paths
  - Test files should be run via pytest, not as standalone scripts

Test Infrastructure Improvements:
- Reduced test count from 701 to 689 tests (removed 12 problematic tests)
- Eliminated subprocess calls to `make test-*` commands from within tests
- Removed `pytest.main()` calls that could cause circular execution
- Maintained clean separation between test infrastructure and actual tests

Impact:
- No more tests testing tests (circular dependency elimination)
- Cleaner test execution without subprocess complexity
- Proper test isolation and independence
- Faster and more reliable test runs

The proper way to test infrastructure is to test the underlying functions
directly, not to execute the entire test suite from within a test.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 21:05:36 +02:00

159 lines
5.3 KiB
Python

"""
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
from tddai.config import TddaiConfig
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.config = TddaiConfig(workspace_dir=self.workspace_dir)
self.workspace_manager = WorkspaceManager(self.config)
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 = self.workspace_manager.create_workspace(issue_data)
# Assert
assert workspace.issue_dir.exists()
assert workspace.requirements_file.exists()
assert workspace.test_plan_file.exists()
assert workspace.tests_dir.exists()
assert workspace.tests_dir.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['number'] == 11
assert metadata['title'] == 'Setup TDD workspace infrastructure'
assert metadata['body'] == 'Test workspace 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 == WorkspaceStatus.ACTIVE
# Verify we can get the workspace details
workspace = self.workspace_manager.get_current_workspace()
assert workspace.issue_number == 11
assert workspace.issue_title == 'Setup TDD workspace infrastructure'
assert workspace.issue_state == 'open'
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 active"):
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 = self.workspace_manager.create_workspace(issue_data)
# Assert
assert workspace.tests_dir.exists()
assert workspace.tests_dir.is_dir()
# Test directory should be empty initially
assert len(list(workspace.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 = self.workspace_manager.create_workspace(issue_data)
assert workspace.issue_dir.exists()
self.workspace_manager.cleanup_workspace()
# Assert
assert not workspace.issue_dir.exists()
current_issue_file = self.workspace_dir / 'current_issue.json'
assert not current_issue_file.exists()