@@ -1681,3 +1681,63 @@ def test_parse_endpoint_invocation_outputs(settings):
16811681 civ = invocation .outputs .first ()
16821682
16831683 assert civ .value == "test output content"
1684+
1685+
1686+ @pytest .mark .django_db
1687+ def test_parse_endpoint_invocation_outputs_failure (mocker ):
1688+ invocation = InvocationFactory (
1689+ status = InvocationStatusChoices .EXECUTED ,
1690+ )
1691+ mocker .patch .object (
1692+ EndpointOrchestrator ,
1693+ "get_outputs" ,
1694+ side_effect = Exception ,
1695+ )
1696+
1697+ parse_endpoint_invocation_outputs (** invocation .task_kwargs )
1698+
1699+ invocation .refresh_from_db ()
1700+
1701+ assert invocation .status == InvocationStatusChoices .FAILURE
1702+ assert invocation .error_message == SystemErrorMessages .UNEXPECTED_ERROR
1703+
1704+
1705+ @pytest .mark .parametrize (
1706+ "status" ,
1707+ set (InvocationStatusChoices ).difference (
1708+ [InvocationStatusChoices .EXECUTED , InvocationStatusChoices .CANCELLED ]
1709+ ),
1710+ )
1711+ @pytest .mark .django_db
1712+ def test_parse_endpoint_invocation_outputs_wrong_state_raises (mocker , status ):
1713+ invocation = InvocationFactory (status = status )
1714+ mock_get_outputs = mocker .patch .object (
1715+ EndpointOrchestrator ,
1716+ "get_outputs" ,
1717+ )
1718+
1719+ with pytest .raises (
1720+ RuntimeError , match = "Invocation is not ready for output parsing"
1721+ ):
1722+ parse_endpoint_invocation_outputs (** invocation .task_kwargs )
1723+ invocation .refresh_from_db ()
1724+
1725+ mock_get_outputs .assert_not_called ()
1726+ assert invocation .status == status
1727+ assert invocation .outputs .count () == 0
1728+
1729+
1730+ @pytest .mark .django_db
1731+ def test_parse_endpoint_invocation_outputs_cancelled_skipped (mocker ):
1732+ invocation = InvocationFactory (status = InvocationStatusChoices .CANCELLED )
1733+ mock_get_outputs = mocker .patch .object (
1734+ EndpointOrchestrator ,
1735+ "get_outputs" ,
1736+ )
1737+
1738+ parse_endpoint_invocation_outputs (** invocation .task_kwargs )
1739+ invocation .refresh_from_db ()
1740+
1741+ mock_get_outputs .assert_not_called ()
1742+ assert invocation .status == InvocationStatusChoices .CANCELLED
1743+ assert invocation .outputs .count () == 0
0 commit comments