Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a070b5-4994-7271-bd8b-7c3dbcedec4b
54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
"""Exercise migration-loss and ownership-conflict failure modes."""
|
|
|
|
import copy
|
|
import json
|
|
from pathlib import Path
|
|
import unittest
|
|
|
|
from validate_ownership import validate
|
|
|
|
|
|
class OwnershipValidationTests(unittest.TestCase):
|
|
def setUp(self):
|
|
root = Path(__file__).resolve().parents[1] / 'ledger'
|
|
self.ledger = json.loads((root / 'concept-ownership.json').read_text())
|
|
self.inventory = json.loads((root / 'source-inventory.json').read_text())
|
|
|
|
def errors(self):
|
|
return validate(self.ledger, self.inventory)['errors']
|
|
|
|
def test_complete_inventory(self):
|
|
self.assertEqual(self.errors(), [])
|
|
|
|
def test_lost_source_entry(self):
|
|
self.ledger['entries'].pop()
|
|
self.assertTrue(self.errors())
|
|
|
|
def test_duplicate_mapping(self):
|
|
self.ledger['entries'].append(copy.deepcopy(self.ledger['entries'][0]))
|
|
self.assertTrue(self.errors())
|
|
|
|
def test_conflicting_owner_across_entries(self):
|
|
target = self.ledger['entries'][1]['targets'][0]
|
|
target['concept'] = 'Actor'
|
|
target['owner']['model'] = 'itc-ident'
|
|
result = validate(self.ledger, self.inventory)
|
|
self.assertEqual(result['multiply_owned_concepts'], 1)
|
|
self.assertTrue(result['errors'])
|
|
|
|
def test_missing_owner(self):
|
|
self.ledger['entries'][0]['targets'][0].pop('owner')
|
|
self.assertTrue(self.errors())
|
|
|
|
def test_lost_half_of_split(self):
|
|
entry = next(e for e in self.ledger['entries'] if e['disposition'] == 'split')
|
|
entry['targets'].pop()
|
|
self.assertTrue(self.errors())
|
|
|
|
def test_convenience_term_promotion(self):
|
|
self.ledger['entries'][-1]['targets'][0]['kind'] = 'concept'
|
|
self.assertTrue(self.errors())
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|