@@ -1766,3 +1766,63 @@ def test_parse_endpoint_invocation_outputs(settings):
17661766 civ = invocation .outputs .first ()
17671767
17681768 assert civ .value == "test output content"
1769+
1770+
1771+ @pytest .mark .django_db
1772+ def test_parse_endpoint_invocation_outputs_failure (mocker ):
1773+ invocation = InvocationFactory (
1774+ status = InvocationStatusChoices .EXECUTED ,
1775+ )
1776+ mocker .patch .object (
1777+ EndpointOrchestrator ,
1778+ "get_outputs" ,
1779+ side_effect = Exception ,
1780+ )
1781+
1782+ parse_endpoint_invocation_outputs (** invocation .task_kwargs )
1783+
1784+ invocation .refresh_from_db ()
1785+
1786+ assert invocation .status == InvocationStatusChoices .FAILURE
1787+ assert invocation .error_message == SystemErrorMessages .UNEXPECTED_ERROR
1788+
1789+
1790+ @pytest .mark .parametrize (
1791+ "status" ,
1792+ set (InvocationStatusChoices ).difference (
1793+ [InvocationStatusChoices .EXECUTED , InvocationStatusChoices .CANCELLED ]
1794+ ),
1795+ )
1796+ @pytest .mark .django_db
1797+ def test_parse_endpoint_invocation_outputs_wrong_state_raises (mocker , status ):
1798+ invocation = InvocationFactory (status = status )
1799+ mock_get_outputs = mocker .patch .object (
1800+ EndpointOrchestrator ,
1801+ "get_outputs" ,
1802+ )
1803+
1804+ with pytest .raises (
1805+ RuntimeError , match = "Invocation is not ready for output parsing"
1806+ ):
1807+ parse_endpoint_invocation_outputs (** invocation .task_kwargs )
1808+ invocation .refresh_from_db ()
1809+
1810+ mock_get_outputs .assert_not_called ()
1811+ assert invocation .status == status
1812+ assert invocation .outputs .count () == 0
1813+
1814+
1815+ @pytest .mark .django_db
1816+ def test_parse_endpoint_invocation_outputs_cancelled_skipped (mocker ):
1817+ invocation = InvocationFactory (status = InvocationStatusChoices .CANCELLED )
1818+ mock_get_outputs = mocker .patch .object (
1819+ EndpointOrchestrator ,
1820+ "get_outputs" ,
1821+ )
1822+
1823+ parse_endpoint_invocation_outputs (** invocation .task_kwargs )
1824+ invocation .refresh_from_db ()
1825+
1826+ mock_get_outputs .assert_not_called ()
1827+ assert invocation .status == InvocationStatusChoices .CANCELLED
1828+ assert invocation .outputs .count () == 0
0 commit comments