import copy, json, pathlib, sys, unittest
ROOT=pathlib.Path(__file__).resolve().parents[1]
sys.path.insert(0,str(ROOT/'src'))
from supply_chain_evidence import evaluate, apply_probe
class Contract(unittest.TestCase):
 @classmethod
 def setUpClass(cls):
  cls.base=json.loads((ROOT/'fixture/baseline-release.json').read_text()); cls.policy=json.loads((ROOT/'fixture/policy.json').read_text()); cls.probes=json.loads((ROOT/'fixture/probe-cases.json').read_text())
 def test_baseline(self): self.assertEqual(evaluate(self.base,self.policy)['decision'],'ACCEPT_EVIDENCE_SET')
 def test_public_probes(self):
  for name,p in self.probes.items(): self.assertEqual(evaluate(apply_probe(self.base,p),self.policy)['decision'],p['expected_decision'],name)
 def test_malformed_fails_closed(self):
  d=copy.deepcopy(self.base); del d['sbom']['target']; self.assertEqual(evaluate(d,self.policy)['decision'],'DENY_MALFORMED_EVIDENCE')
if __name__=='__main__': unittest.main()
