Bind captured names to typed case entities with provenance

This commit is contained in:
Nico committed 2026-10-15 10:05:49 +02:00
1 parent 3bf7b5bba7
commit aa6958165d
15 files changed
+285 -23

No files matched your search

+31
View File
@@ -133,3 +133,34 @@ def test_casebuilder_links_entities_and_preserves_prior_inputs(case_setup):
@pytest.mark.parametrize('field',['max_queries','max_depth','max_relationships'])
def test_invalid_limits_rejected(field):
with pytest.raises(ToolError):ContextExpansion(ProjectResearch({}),{field:True})
def test_typed_names_keep_exact_id_and_name_row_provenance():
from viano_bug_analysis.analysis.quality import bind_entity_names, unnamed_entity_reasons
service=ProjectResearch({},database=RelatedData())
settings={'relationships':[rule()], 'entities':[{'entity_type':'device','table':'devices',
'column':'id','name_column':'name','columns':['id','name','script']}]}
additions,facts,_,_=ContextExpansion(service,settings).collect([initial()])
named=next(f for f in facts if f['name']=='project_entity_name')
value=named['value']
assert (value['type'],value['id'],value['name'])==('device','22','Capture device')
capture=json.loads(additions[value['provenance']['source_ref']])
assert capture['result']['items'][0]['row']['id']==22
assert value['provenance']['id_pointer']=='/result/items/0/row/id'
assert value['provenance']['json_pointer']=='/result/items/0/row/name'
context={'sources':{'F0001':{'kind':'fact','data':named},
'N0001':{'kind':'entity','data':{'type':'device','id':'22'}},
'N0002':{'kind':'entity','data':{'type':'task','id':'22'}},
'N0003':{'kind':'entity','data':{'type':'device','id':'23'}}}}
bind_entity_names(context)
assert context['sources']['N0001']['data']['name_bindings'][0]['source_id']=='F0001'
assert set(unnamed_entity_reasons(context))=={'N0002','N0003'}
before=json.dumps(context,sort_keys=True)
bind_entity_names(context)
assert json.dumps(context,sort_keys=True)==before
def test_invalid_name_rule_is_a_controlled_configuration_error():
with pytest.raises(ToolError,match='PROJECT_ENRICHMENT_CONFIG'):
ContextExpansion(ProjectResearch({}),{'entities':[{'entity_type':'device','table':'devices',
'column':'id','name_column':'name','columns':['id']}]})