def test_clear_sandbox_components(self):
        # arrange
        mock_sandbox: Sandbox = Mock()
        mock_sandbox.id = "sandbox_id"
        mock_api: CloudShellAPISession = Mock()
        mock_sandbox.automation_api = mock_api
        mock_get_reservation_details:GetReservationDescriptionResponseInfo = Mock()
        mock_reservation_description = Mock()
        mock_resource:ReservedResourceInfo = Mock()
        mock_resource.Name = "mock_resource_name"
        mock_service:ServiceInstance = Mock()
        mock_service.Alias = "mock_alias"
        mock_app:ReservationAppResource = Mock()
        mock_app.Name = "mock_app_name"
        mock_reservation_description.Resources = [mock_resource]
        mock_reservation_description.Services = [mock_service]
        mock_reservation_description.Apps = [mock_app]
        mock_get_reservation_details.ReservationDescription = mock_reservation_description
        mock_api.GetReservationDetails = Mock(return_value=mock_get_reservation_details)

        # act
        self.logic.clear_sandbox_components(mock_sandbox)

        # assert
        mock_sandbox.automation_api.RemoveResourcesFromReservation.assert_called_once_with(mock_sandbox.id,[mock_resource.Name])
        mock_sandbox.automation_api.RemoveServicesFromReservation.assert_called_once_with(mock_sandbox.id,[mock_service.Alias])
        mock_sandbox.automation_api.RemoveAppFromReservation.assert_called_once_with(mock_sandbox.id,appName=mock_app.Name)
    def test_clear_sandbox_components_empty(self):
        # arrange
        mock_sandbox: Sandbox = Mock()
        mock_sandbox.id = "sandbox_id"
        mock_api: CloudShellAPISession = Mock()
        mock_sandbox.automation_api = mock_api
        mock_get_reservation_details:GetReservationDescriptionResponseInfo = Mock()
        mock_reservation_description = Mock()
        mock_reservation_description.Resources = []
        mock_reservation_description.Services = []
        mock_reservation_description.Apps = []
        mock_get_reservation_details.ReservationDescription = mock_reservation_description
        mock_api.GetReservationDetails = Mock(return_value=mock_get_reservation_details)

        # act
        self.logic.clear_sandbox_components(mock_sandbox)

        # assert
        mock_sandbox.automation_api.RemoveResourcesFromReservation.assert_not_called()
        mock_sandbox.automation_api.RemoveServicesFromReservation.assert_not_called()
        mock_sandbox.automation_api.RemoveAppFromReservation.assert_not_called()
    def test_clear_sandbox_components_ex(self):
        # arrange
        mock_sandbox: Sandbox = Mock()
        mock_sandbox.id = "sandbox_id"
        mock_api: CloudShellAPISession = Mock()
        mock_sandbox.automation_api = mock_api
        mock_get_reservation_details:GetReservationDescriptionResponseInfo = Mock()
        mock_reservation_description = Mock()
        mock_reservation_description.Resources = []
        mock_service: ServiceInstance = Mock()
        mock_service.Alias = "mock_alias"
        mock_reservation_description.Services = [mock_service]
        mock_reservation_description.Apps = []
        mock_get_reservation_details.ReservationDescription = mock_reservation_description
        mock_api.GetReservationDetails = Mock(return_value=mock_get_reservation_details)
        mock_api.RemoveServicesFromReservation = Mock(return_value=Exception)

        mock_api.RemoveServicesFromReservation.side_effect = Exception('')

        # act
        self.logic.clear_sandbox_components(mock_sandbox)

        # assert
        mock_sandbox.logger.exception.assert_called_once()