Record ownership ledger and completed CommerceCanon rename
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a070b5-4994-7271-bd8b-7c3dbcedec4b
This commit is contained in:
parent
135b5a1720
commit
745d74abd9
21 changed files with 2934 additions and 14 deletions
54
tools/test_validate_ownership.py
Normal file
54
tools/test_validate_ownership.py
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
"""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()
|
||||
Loading…
Add table
Add a link
Reference in a new issue