1- from fastapi .testclient import TestClient
21import pytest
3- from sqlmodel import SQLModel , Session , create_engine
2+ from fastapi .testclient import TestClient
3+ from sqlmodel import Session , SQLModel , create_engine
44from sqlmodel .pool import StaticPool
55
66from main import app
7+ from src .app .usecases .analyze_issue import AnalyzeIssue
78from src .domain .issue import Issue , IssueState
9+ from src .interface_adapters .exceptions import NotFoundException
810from src .resource_adapters .persistence .sqlmodel .database import get_db
911from 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
1212
1313
1414# https://sqlmodel.tiangolo.com/tutorial/fastapi/tests/
@@ -24,71 +24,78 @@ def session_fixture():
2424
2525@pytest .fixture (name = "client" )
2626def client_fixture (session : Session ):
27- def get_session_override ():
28- return session
29-
30- app .dependency_overrides [get_db ] = get_session_override
31- app .state .running = True
32- client = TestClient (app )
33- yield client
34- app .dependency_overrides .clear ()
35- app .state .running = False
36-
37-
38- class TestAnalyzeIssue :
39- def test_analyze_issue_command (self , client : TestClient , session : Session ):
40- # Test case 1: Successful analysis
41- issue_number = 1
42- test_issue = Issue (issue_number = issue_number , issue_state = IssueState .OPEN )
43-
44- repository = SQLModelIssueRepository (session )
45-
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
54-
55- def test_analyze_issue_client (self , client : TestClient , session : Session ):
56- # Test case 1: Successful analysis
57- response = client .post ("/issues/1/analyze" )
58- #assert response.status_code == 200
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."""
79-
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" ]
87-
88- def test_analyze_issue_unauthorized (self , client : TestClient ):
89- # Test case 3: Unauthorized access
90- response = client .post ("/issues/456/analyze" )
91- assert response .status_code == 401
92- assert response .js_on () == {"detail" : "Unauthorized" }
93-
94- # Add more test cases as needed
27+ # def get_session_override():
28+ # return session
29+
30+ # app.dependency_overrides[get_db] = get_session_override
31+ with TestClient (app , raise_server_exceptions = False ) as client :
32+ yield client
33+ #app.dependency_overrides.clear()
34+
35+
36+ def test_analyze_issue_command (client : TestClient , session : Session ):
37+ # Test case 1: Successful analysis
38+ issue_number = 1
39+ test_issue = Issue (issue_number = issue_number , issue_state = IssueState .OPEN )
40+
41+ repository = SQLModelIssueRepository (session )
42+
43+ repository .add (test_issue )
44+ repository .commit ()
45+ retrieved_issue = repository .get_by_id (issue_number )
46+ assert retrieved_issue .issue_number == issue_number
47+
48+ use_case = AnalyzeIssue (issue_number = issue_number , repo = repository )
49+ response = use_case .analyze ()
50+ assert response .issue_number == issue_number
51+
52+
53+ def test_analyze_issue_client (client : TestClient , session : Session ):
54+ # Test case 1: Successful analysis
55+ issue_number = 1
56+ test_issue = Issue (issue_number = issue_number , issue_state = IssueState .OPEN )
57+
58+ repository = SQLModelIssueRepository (session )
59+
60+ repository .add (test_issue )
61+ repository .commit ()
62+
63+ response = client .post ("/issues/1/analyze" )
64+ # assert response.status_code == 200
65+ assert response .json () == {"version" : 1 , "issue_number" : 1 }
66+
67+
68+ def test_analyze_issue_not_found (client : TestClient , session : Session ):
69+ # Test case 1: Successful analysis
70+ issue_number = 1
71+
72+ repository = SQLModelIssueRepository (session )
73+ retrieved_issue = repository .get_by_id (issue_number )
74+ assert retrieved_issue .issue_number == 0
75+
76+ use_case = AnalyzeIssue (issue_number = issue_number , repo = repository )
77+ with pytest .raises (NotFoundException ) as exc_info :
78+ use_case .analyze ()
79+ assert exc_info .value .message == "Issue not found"
80+
81+ response = client .post ("/issues/1/analyze" )
82+ assert response .status_code == 404
83+
84+
85+ def test_analyze_issue_invalid_number (client : TestClient , session : Session ):
86+ """Test analyzing an issue with an invalid issue number."""
87+
88+ response = client .post ("/issues/abc/analyze" )
89+ assert response .status_code == 422
90+ # Validate error response structure
91+ error_detail = response .json ()["detail" ]
92+ assert isinstance (error_detail , list )
93+ assert error_detail [0 ]["type" ] == "int_parsing"
94+ assert error_detail [0 ]["loc" ] == ["path" , "issue_number" ]
95+
96+
97+ def test_analyze_issue_unauthorized (client : TestClient ):
98+ # Test case 3: Unauthorized access
99+ response = client .post ("/issues/456/analyze" )
100+ assert response .status_code == 401
101+ assert response .js_on () == {"detail" : "Unauthorized" }
0 commit comments