|
1 | | -import pytest |
2 | 1 | from fastapi.testclient import TestClient |
3 | | -from sqlmodel import Session, SQLModel, create_engine |
| 2 | +import pytest |
| 3 | +from sqlmodel import SQLModel, Session, create_engine |
4 | 4 | from sqlmodel.pool import StaticPool |
5 | 5 |
|
6 | 6 | from main import app |
7 | 7 | from src.domain.issue import Issue, IssueState |
8 | 8 | from src.resource_adapters.persistence.sqlmodel.database import get_db |
9 | 9 | from src.resource_adapters.persistence.sqlmodel.issues import SQLModelIssueRepository |
| 10 | +from src.app.usecases.analyze_issue import AnalyzeIssue |
| 11 | +from src.interface_adapters.exceptions import NotFoundException |
10 | 12 |
|
11 | 13 |
|
12 | 14 | # https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/ |
@@ -34,31 +36,59 @@ def get_session_override(): |
34 | 36 |
|
35 | 37 |
|
36 | 38 | class TestAnalyzeIssue: |
37 | | - def test_analyze_issue(self, client: TestClient, session: Session): |
| 39 | + def test_analyze_issue_command(self, client: TestClient, session: Session): |
38 | 40 | # Test case 1: Successful analysis |
39 | 41 | issue_number = 1 |
40 | 42 | test_issue = Issue(issue_number=issue_number, issue_state=IssueState.OPEN) |
41 | 43 |
|
42 | 44 | repository = SQLModelIssueRepository(session) |
43 | 45 |
|
44 | 46 | repository.add(test_issue) |
| 47 | + repository.commit() |
| 48 | + retrieved_issue = repository.get_by_id(issue_number) |
| 49 | + assert retrieved_issue.issue_number == issue_number |
| 50 | + |
| 51 | + use_case = AnalyzeIssue(issue_number=issue_number, repo=repository) |
| 52 | + response = use_case.analyze() |
| 53 | + assert response.issue_number == issue_number |
45 | 54 |
|
| 55 | + def test_analyze_issue_client(self, client: TestClient, session: Session): |
| 56 | + # Test case 1: Successful analysis |
46 | 57 | response = client.post("/issues/1/analyze") |
47 | 58 | #assert response.status_code == 200 |
48 | 59 | assert response.json() == {"version": 1, "issue_number": 1} |
| 60 | + |
| 61 | + def test_analyze_issue_not_found(self, client: TestClient, session: Session): |
| 62 | + # Test case 1: Successful analysis |
| 63 | + issue_number = 1 |
| 64 | + |
| 65 | + repository = SQLModelIssueRepository(session) |
| 66 | + retrieved_issue = repository.get_by_id(issue_number) |
| 67 | + assert retrieved_issue.issue_number == 0 |
| 68 | + |
| 69 | + use_case = AnalyzeIssue(issue_number=issue_number, repo=repository) |
| 70 | + with pytest.raises(NotFoundException) as exc_info: |
| 71 | + use_case.analyze() |
| 72 | + assert exc_info.value.message == "Issue not found" |
| 73 | + |
| 74 | + response = client.post("/issues/1/analyze") |
| 75 | + assert response.status_code == 404 |
| 76 | + |
| 77 | + def test_analyze_issue_invalid_number(self, client: TestClient, session: Session): |
| 78 | + """Test analyzing an issue with an invalid issue number.""" |
49 | 79 |
|
50 | | - # Test case 2: Invalid issue number |
51 | | - try: |
52 | | - response = client.post("/issues/abc/analyze") |
53 | | - assert response.status_code == 422 |
54 | | - # assert response.json() == {"detail": "Invalid issue number"} |
55 | | - except Exception as e: |
56 | | - print(response.status_code) |
57 | | - print(f"An error occurred: {e}") |
| 80 | + response = client.post("/issues/abc/analyze") |
| 81 | + assert response.status_code == 422 |
| 82 | + # Validate error response structure |
| 83 | + error_detail = response.json()["detail"] |
| 84 | + assert isinstance(error_detail, list) |
| 85 | + assert error_detail[0]["type"] == "int_parsing" |
| 86 | + assert error_detail[0]["loc"] == ["path", "issue_number"] |
58 | 87 |
|
| 88 | + def test_analyze_issue_unauthorized(self, client: TestClient): |
59 | 89 | # Test case 3: Unauthorized access |
60 | 90 | response = client.post("/issues/456/analyze") |
61 | 91 | assert response.status_code == 401 |
62 | | - assert response.json() == {"detail": "Unauthorized"} |
| 92 | + assert response.js_on() == {"detail": "Unauthorized"} |
63 | 93 |
|
64 | 94 | # Add more test cases as needed |
0 commit comments