| 36 | def _ext() -> ExtractionRef: |
| 37 | return ExtractionRef(flow="test_flow", model="gpt-4o", extracted_at=_now()) |
| 38 | |
| 39 | |
| 40 | class FlattenRoundTripTests(unittest.TestCase): |
| 41 | def test_news(self): |
| 42 | n = News( |
| 43 | as_of=_now(), |
| 44 | source=_src("rss"), |
| 45 | extraction=_ext(), |
| 46 | headline="Fed holds rates", |
| 47 | event_type="monetary_policy", |
| 48 | timestamp=_now(), |
| 49 | entities=["FOMC"], |
| 50 | ) |
| 51 | revived = News.model_validate_json(n.model_dump_json()) |
| 52 | self.assertEqual(n, revived) |
| 53 | |
| 54 | def test_earnings(self): |
| 55 | e = Earnings( |
| 56 | as_of=_now(), |
| 57 | source=_src("http"), |
| 58 | ticker="AAPL", |
| 59 | period="2026Q1", |
| 60 | revenue=120.0, |
| 61 | eps=1.55, |
| 62 | surprise_flags=["eps_beat"], |
| 63 | ) |
| 64 | revived = Earnings.model_validate_json(e.model_dump_json()) |
| 65 | self.assertEqual(e, revived) |
| 66 | |
| 67 | def test_factor(self): |
| 68 | f = Factor( |
| 69 | as_of=_now(), |
| 70 | source=_src(), |
| 71 | factor_name="value", |
| 72 | universe="us_equities", |
| 73 | ) |
| 74 | revived = Factor.model_validate_json(f.model_dump_json()) |
| 75 | self.assertEqual(f, revived) |
| 76 | |
| 77 | def test_thesis(self): |
| 78 | t = Thesis(as_of=_now(), source=_src(), claim="USD softens") |
| 79 | revived = Thesis.model_validate_json(t.model_dump_json()) |
| 80 | self.assertEqual(t, revived) |
| 81 | |
| 82 | |
| 83 | class TreeRoundTripTests(unittest.TestCase): |
| 84 | def _build_paper(self) -> LegacyPaper: |
| 85 | leaf_id = uuid4() |
| 86 | root_id = uuid4() |
| 87 | leaf = TreeNode( |
| 88 | node_id=leaf_id, |
| 89 | parent_id=root_id, |
| 90 | position=0, |
| 91 | title="Methodology", |
| 92 | summary="cross-sectional momentum signal", |
| 93 | content="We rank stocks by 12-1 month returns ...", |
| 94 | ) |
nothing calls this directly
no outgoing calls
no test coverage detected