112 lines
2.6 KiB
Python
112 lines
2.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Tests for gitea_issue_parser."""
|
|
|
|
import json
|
|
import sys
|
|
import os
|
|
|
|
sys.path.insert(0, os.path.dirname(__file__))
|
|
from gitea_issue_parser import parse_issue_body
|
|
|
|
|
|
def test_basic_structure():
|
|
body = """## Context
|
|
This is the background.
|
|
|
|
## Acceptance Criteria
|
|
- [ ] First criterion
|
|
- [x] Second criterion (already done)
|
|
- [ ] Third criterion
|
|
|
|
## Labels
|
|
`pipeline`, `extraction`
|
|
"""
|
|
result = parse_issue_body(body, "Test Issue", ["pipeline", "extraction"])
|
|
assert result["title"] == "Test Issue"
|
|
assert "background" in result["context"].lower()
|
|
assert len(result["criteria"]) == 3
|
|
assert "First criterion" in result["criteria"]
|
|
assert result["labels"] == ["pipeline", "extraction"]
|
|
print("PASS: test_basic_structure")
|
|
|
|
|
|
def test_epic_ref():
|
|
body = "Closes #645\n\nSome description."
|
|
result = parse_issue_body(body, "feat: thing (#688)")
|
|
assert result["epic_ref"] == "#645"
|
|
print("PASS: test_epic_ref")
|
|
|
|
|
|
def test_epic_ref_from_title():
|
|
body = "Some description without close ref."
|
|
result = parse_issue_body(body, "feat: scene descriptions (#645)")
|
|
assert result["epic_ref"] == "#645"
|
|
print("PASS: test_epic_ref_from_title")
|
|
|
|
|
|
def test_no_checkboxes():
|
|
body = """## Requirements
|
|
1. First thing
|
|
2. Second thing
|
|
3. Third thing
|
|
"""
|
|
result = parse_issue_body(body)
|
|
assert len(result["criteria"]) == 3
|
|
print("PASS: test_no_checkboxes")
|
|
|
|
|
|
def test_empty_body():
|
|
result = parse_issue_body("", "Empty Issue")
|
|
assert result["title"] == "Empty Issue"
|
|
assert result["criteria"] == []
|
|
assert result["context"] == ""
|
|
print("PASS: test_empty_body")
|
|
|
|
|
|
def test_real_issue_format():
|
|
body = """Closes #681
|
|
|
|
## Changes
|
|
|
|
Add `#!/usr/bin/env python3` shebang to 6 Python scripts.
|
|
|
|
## Verification
|
|
|
|
All 6 files confirmed missing shebangs before fix.
|
|
|
|
## Impact
|
|
|
|
Scripts can now be executed directly.
|
|
"""
|
|
result = parse_issue_body(body, "fix: add python3 shebangs (#685)")
|
|
assert result["epic_ref"] == "#681"
|
|
assert "shebang" in result["context"].lower()
|
|
print("PASS: test_real_issue_format")
|
|
|
|
|
|
def test_all_sections_captured():
|
|
body = """## Context
|
|
Background info.
|
|
|
|
## Acceptance Criteria
|
|
- [ ] Do thing
|
|
|
|
## Labels
|
|
`test`
|
|
"""
|
|
result = parse_issue_body(body)
|
|
assert "context" in result["sections"]
|
|
assert "acceptance criteria" in result["sections"]
|
|
print("PASS: test_all_sections_captured")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
test_basic_structure()
|
|
test_epic_ref()
|
|
test_epic_ref_from_title()
|
|
test_no_checkboxes()
|
|
test_empty_body()
|
|
test_real_issue_format()
|
|
test_all_sections_captured()
|
|
print("\nAll tests passed.")
|