- bin/facts/crm: prove person<->company/company<->project against ooCRM x corpus SoT (knowledge-mesh-seed.yaml), write 78 facts (root=facts) - tools/crmfacts.py + test_crm_facts.py: parser under unit tests (26 pass) - docs/crm-associations-proof.md: provable graph, mistakes, fixes - oo merge 759->763 resolves duplicate GoldenRatio.Exchange legal entity - bin/db/ssh-tunnel: "$0" self-check + accept-new/BatchMode ssh flags - AGENTS.md: document bin/facts/crm
46 lines
1.0 KiB
Python
46 lines
1.0 KiB
Python
import sys
|
||
import unittest
|
||
from pathlib import Path
|
||
|
||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||
|
||
import crmfacts # noqa: E402
|
||
|
||
FM = """\
|
||
schema: 2
|
||
meta:
|
||
title: x
|
||
orgs:
|
||
- id: produktor
|
||
label: ProProdukt SL / produktor.io
|
||
kind: own
|
||
period: 2006–present
|
||
website: https://produktor.io
|
||
- id: dyvenia
|
||
label: Dyvenia
|
||
kind: employer
|
||
period: 2023–2025
|
||
clients:
|
||
- name: One
|
||
- name: Two
|
||
timeline:
|
||
- start: 2001
|
||
"""
|
||
|
||
|
||
class CorpusOrgsTest(unittest.TestCase):
|
||
def test_parses_label_kind_period(self):
|
||
orgs = crmfacts.corpus_orgs(FM)
|
||
self.assertEqual(orgs["produktor"]["label"], "ProProdukt SL / produktor.io")
|
||
self.assertEqual(orgs["produktor"]["kind"], "own")
|
||
self.assertEqual(orgs["dyvenia"]["kind"], "employer")
|
||
|
||
def test_does_not_leak_clients_into_orgs(self):
|
||
orgs = crmfacts.corpus_orgs(FM)
|
||
self.assertNotIn("One", orgs)
|
||
self.assertNotIn("Two", orgs)
|
||
self.assertNotIn("timeline", orgs)
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main() |