1- from unittest import mock
1+ from unittest . mock import Mock , patch
22import pytest
33from flask import url_for
44from application import create_app
@@ -18,9 +18,13 @@ def client(app):
1818 return app .test_client ()
1919
2020class TestExecuteTestController :
21- def test_execute_test (self ,client ,app ):
21+ def test_execute_test (self , client , app ):
22+ """Test per il controller di esecuzione del test."""
23+
2224 # Mocking the ExecuteTestUseCase
23- mock_use_case = mock .Mock (spec = ExecuteTestUseCase )
25+ mock_use_case = Mock (spec = ExecuteTestUseCase )
26+ mock_status_use_case = Mock (spec = GetTestStatusUseCase )
27+ app .container .executeTestContainer .GetTestStatusService .override (mock_status_use_case )
2428 app .container .executeTestContainer .ExecuteTestService .override (mock_use_case )
2529
2630 # Mocking the return value of executeTest method
@@ -49,52 +53,80 @@ def test_execute_test(self,client,app):
4953 )
5054 }
5155 )
52- mock_use_case .executeTest .return_value = result
53-
54- with app .test_request_context ():
55- # Sending a POST request to the endpoint
56- response = client .post (url_for ('executeTest_blueprint.execute_test' ))
57-
58- # Asserting the response status code and data
59- assert response .status_code == 200
60- assert response .json == result .serialize ()
61-
62- def test_execute_test_no_result (self , client , app ):
63- # Mocking the ExecuteTestUseCase
64- mock_use_case = mock .Mock (spec = ExecuteTestUseCase )
65- app .container .executeTestContainer .ExecuteTestService .de (mock_use_case )
66-
67- # Mocking the return value of executeTest method to return None
56+
6857 mock_use_case .executeTest .return_value = None
69-
70- with app .test_request_context ():
71- # Sending a POST request to the endpoint
72- response = client .post (url_for ('executeTest_blueprint.execute_test' ))
58+ mock_status_use_case .getTestStatus .return_value = {
59+ "starting" : False ,
60+ "in_progress" : True ,
61+ "completed" : 1 ,
62+ "total" : 2 ,
63+ "percentage" : 50 ,
64+ "id_risultato" : None
65+ }
66+
67+ def fake_thread_start ():
68+ # simula il codice run_test_in_thread(...)
69+ mock_use_case .executeTest ()
70+
71+ with patch ("src.infrastructure.adapter.input.rest.ExecuteTestControllers.Thread" ) as mock_thread , \
72+ patch ("src.infrastructure.adapter.input.rest.ExecuteTestControllers.time.sleep" ) as mock_sleep :
73+
74+ mock_thread_instance = mock_thread .return_value
75+ mock_thread_instance .start .side_effect = fake_thread_start
76+
77+ with app .test_request_context ():
78+ # Sending a POST request to the endpoint
79+ response = client .post (url_for ('executeTest_blueprint.execute_test' ))
80+
81+ mock_thread_instance .start .assert_called_once ()
82+ mock_sleep .assert_called_once_with (1 )
7383
7484 # Asserting the response status code and data
75- assert response .status_code == 500
76- assert response .json == {"message" : "Si è verificato un errore nel server, riprova più tardi" }
77-
78- def test_execute_test_error (self , client , app ):
79- # Mocking the ExecuteTestUseCaseoverri
80- mock_use_case = mock .Mock (spec = ExecuteTestUseCase )
85+ assert response .status_code == 200
86+ assert response .json == {"message" : "Test avviato con successo" }
87+ mock_use_case .executeTest .assert_called_once ()
88+ mock_status_use_case .getTestStatus .assert_called_once ()
89+
90+ @pytest .mark .parametrize ("error" , [{"in_progress" : False }, Exception ()])
91+ def test_execute_test_error (self , client , app , error ):
92+ # Mocking the ExecuteTestUseCaseoverride
93+ mock_use_case = Mock (spec = ExecuteTestUseCase )
94+ mock_status_use_case = Mock (spec = GetTestStatusUseCase )
95+ app .container .executeTestContainer .GetTestStatusService .override (mock_status_use_case )
8196 app .container .executeTestContainer .ExecuteTestService .override (mock_use_case )
82-
83- # Mocking the return value of executeTest method to raise an exception
84- mock_use_case .executeTest .side_effect = Exception ()
85-
86- with app .test_request_context ():
87- # Sending a POST request to the endpoint
88- response = client .post (url_for ('executeTest_blueprint.execute_test' ))
97+
98+ if error is Exception :
99+ mock_use_case .executeTest .side_effect = error
100+ else :
101+ mock_status_use_case .getTestStatus .return_value = error
102+
103+ def fake_thread_start ():
104+ # simula il codice run_test_in_thread(...)
105+ mock_use_case .executeTest ()
106+
107+ with patch ("src.infrastructure.adapter.input.rest.ExecuteTestControllers.Thread" ) as mock_thread , \
108+ patch ("src.infrastructure.adapter.input.rest.ExecuteTestControllers.time.sleep" ) as mock_sleep :
109+
110+ mock_thread_instance = mock_thread .return_value
111+ mock_thread_instance .start .side_effect = fake_thread_start
112+
113+ with app .test_request_context ():
114+ # Sending a POST request to the endpoint
115+ response = client .post (url_for ('executeTest_blueprint.execute_test' ))
116+
117+ mock_thread_instance .start .assert_called_once ()
118+ mock_sleep .assert_called_once_with (1 )
89119
90120 # Asserting the response status code and data
91121 assert response .status_code == 500
92122 assert response .json == {"message" : "Si è verificato un errore nel server, riprova più tardi" }
123+ mock_use_case .executeTest .assert_called_once ()
124+ mock_status_use_case .getTestStatus .assert_called_once ()
93125
94126class TestGetTestStatusController :
95127 def test_get_test_status (self , client , app ):
96128 # Mocking the GetTestStatusUseCase
97- mock_use_case = mock . Mock (spec = GetTestStatusUseCase )
129+ mock_use_case = Mock (spec = GetTestStatusUseCase )
98130 app .container .executeTestContainer .GetTestStatusService .override (mock_use_case )
99131
100132 # Mocking the return value of getTestStatus method
@@ -113,4 +145,22 @@ def test_get_test_status(self, client, app):
113145
114146 # Asserting the response status code and data
115147 assert response .status_code == 200
116- assert response .json == mock_use_case .getTestStatus .return_value
148+ assert response .json == mock_use_case .getTestStatus .return_value
149+ mock_use_case .getTestStatus .assert_called_once ()
150+
151+ def test_get_test_status_server_error (self , client , app ):
152+ # Mocking the GetTestStatusUseCase
153+ mock_use_case = Mock (spec = GetTestStatusUseCase )
154+ app .container .executeTestContainer .GetTestStatusService .override (mock_use_case )
155+
156+ # Mocking the return value of getTestStatus method
157+ mock_use_case .getTestStatus .side_effect = Exception ("Errore di test" )
158+
159+ with app .test_request_context ():
160+ # Sending a GET request to the endpoint
161+ response = client .get (url_for ('executeTest_blueprint.test_status' ))
162+
163+ # Asserting the response status code and data
164+ assert response .status_code == 500
165+ assert response .json == {"message" : "Si è verificato un errore nel server, riprova più tardi" }
166+ mock_use_case .getTestStatus .assert_called_once ()
0 commit comments