"""Synthetic software fixtures only. These tests execute no neural model."""
import pathlib
import tempfile
import unittest
from run_regression import EXPECTED, classify_report

class ReportClassificationTests(unittest.TestCase):
    def result(self, names=None, status='', exit_code=0, class_name='tests.full_model.test_models_stepcurrentmodule.TestLSV1MTinyStepCurrentModule'):
        names=sorted(EXPECTED) if names is None else names
        body=''.join(f'<testcase classname="{class_name}" name="{name}">{status}</testcase>' for name in names)
        with tempfile.TemporaryDirectory() as directory:
            report=pathlib.Path(directory)/'report.xml'
            report.write_text('<testsuites><testsuite>'+body+'</testsuite></testsuites>')
            return classify_report(report,exit_code)['status']
    def test_complete_expected_report(self):
        self.assertEqual(self.result(),'upstream_exact_regression_pass')
    def test_empty_report_rejected(self):
        self.assertEqual(self.result(names=[]),'not_passed')
    def test_partial_report_rejected(self):
        self.assertEqual(self.result(names=sorted(EXPECTED)[:-1]),'not_passed')
    def test_duplicate_report_rejected(self):
        names=sorted(EXPECTED);names[-1]=names[0]
        self.assertEqual(self.result(names=names),'not_passed')
    def test_skipped_report_rejected(self):
        self.assertEqual(self.result(status='<skipped/>'),'not_passed')
    def test_failure_report_rejected(self):
        self.assertEqual(self.result(status='<failure/>'),'not_passed')
    def test_error_report_rejected(self):
        self.assertEqual(self.result(status='<error/>'),'not_passed')
    def test_nonzero_exit_rejected(self):
        self.assertEqual(self.result(exit_code=1),'not_passed')
    def test_wrong_test_class_rejected(self):
        self.assertEqual(self.result(class_name='OtherTests'),'not_passed')
    def test_missing_report_rejected(self):
        self.assertEqual(classify_report('/file-does-not-exist.xml',0)['status'],'not_passed')
    def test_malformed_report_rejected(self):
        with tempfile.TemporaryDirectory() as directory:
            report=pathlib.Path(directory)/'report.xml';report.write_text('<unclosed>')
            self.assertEqual(classify_report(report,0)['status'],'not_passed')

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