import contextlib
import io
import json
import unittest
from tests.test_pr13_multi_provider import _Ingress, _Collector
from app.multi_provider_results import MultiProviderCoordinator
from app.provider_plan import plan


class FailureDiagnosticTest(unittest.TestCase):
    def test_fatal_keeps_type_and_location_without_exception_payload(self):
        called=[]
        spec=dict(tracking={'enabled':False})
        value=MultiProviderCoordinator(spec,_Ingress(),plan(spec),_Collector(),lambda:True,lambda:called.append(True))
        output=io.StringIO()
        with contextlib.redirect_stderr(output):
            try: raise ValueError('secret fixture payload')
            except ValueError as error: value._notify_fatal('result_exception',error)
        result=json.loads(output.getvalue())
        self.assertEqual(result['exception_type'],'ValueError')
        self.assertNotIn('secret',output.getvalue())
        self.assertLessEqual(len(result['locations']),4)
        self.assertEqual(called,[True])
        self.assertIn('medium',result['providers'])


if __name__=='__main__': unittest.main()
