"""Author: Sandeep Belgavi. Evidence completeness and fixture-review contracts.""" import unittest from pattern_15 import Evidence, Session, Observer class ObserverTests(unittest.TestCase): def make(self, outcome='pending', complete=True, redacted=True, revision='v1'): return Observer({'e1': Evidence('e1', revision, outcome, complete, redacted)}) def test_conflicting_completion_creates_finding(self): o = self.make() self.assertEqual(o.inspect(Session('s1','v1','completed','e1')), 'finding') def test_healthy_session_no_finding(self): o = self.make(outcome='completed') self.assertEqual(o.inspect(Session('s1','v1','completed','e1')), 'no_finding') self.assertEqual(o.findings, {}) def test_missing_is_unknown(self): o = self.make() self.assertEqual(o.inspect(Session('s1','v1','completed','absent')), 'unknown') self.assertEqual(o.unknown, 1) def test_incomplete_is_unknown(self): self.assertEqual(self.make(complete=False).inspect(Session('s1','v1','completed','e1')), 'unknown') def test_revision_mismatch_is_unknown(self): self.assertEqual(self.make(revision='v2').inspect(Session('s1','v1','completed','e1')), 'unknown') def test_duplicate_does_not_multiply_finding(self): o = self.make() s = Session('s1','v1','completed','e1') o.inspect(s) self.assertEqual(o.inspect(s), 'duplicate') self.assertEqual(len(o.findings), 1) def test_identifier_conflict_does_not_overwrite(self): o = self.make() first = Session('s1','v1','completed','e1') o.inspect(first) self.assertEqual(o.inspect(Session('s1','v1','pending','e1')), 'conflict') self.assertEqual(o.findings[('s1','v1')], first) def test_approval_required(self): o = self.make() o.inspect(Session('s1','v1','completed','e1')) with self.assertRaises(PermissionError): o.promote_fixture(('s1','v1')) self.assertEqual(o.fixtures, {}) def test_redaction_required(self): o = self.make(redacted=False) o.inspect(Session('s1','v1','completed','e1')) with self.assertRaises(PermissionError): o.promote_fixture(('s1','v1'), approved=True) def test_reviewed_fixture_carries_exact_evidence(self): o = self.make() s = Session('s1','v1','completed','e1') o.inspect(s) self.assertEqual(o.promote_fixture(('s1','v1'), approved=True), 'fixture_created') self.assertEqual(o.fixtures[('s1','v1')], (s, o.evidence['e1'])) def test_replaced_lookup_cannot_change_reviewed_snapshot(self): o = self.make() s = Session('s1', 'v1', 'completed', 'e1') original = o.evidence['e1'] o.inspect(s) o.evidence['e1'] = Evidence('e1', 'v2', 'completed', True, True) o.promote_fixture(('s1', 'v1'), approved=True) self.assertEqual(o.fixtures[('s1', 'v1')], (s, original)) if __name__ == '__main__': unittest.main()