Files
OpenBB/cli/tests/test_codegen_project_gen.py
Danglewood 869cfed125 [Release] openbb-v5.0.0 (#7741)
* merge branch develop with main

* bump desktop version

* fix the merge

* sync Cargo.lock to desktop 2.0.0

* fix cli conftest.py

---------

Co-authored-by: deeleeramone <>
2026-09-29 10:58:44 -07:00

112 lines
3.5 KiB
Python

"""Tests for openbb_cli.codegen.project_gen — pyproject.toml emission."""
from __future__ import annotations
from dataclasses import dataclass
from openbb_cli.codegen import project_gen as pg
@dataclass
class _Router:
entry_point_name: str | None
module_name: str
def test_generate_pyproject_emits_provider_and_router_entry_points():
routers = [
_Router(entry_point_name="equity", module_name="equity"),
_Router(entry_point_name="economy", module_name="economy"),
]
out = pg.generate_pyproject(
project_name="openbb-codegen",
package_name="openbb_codegen",
providers=["fmp", "intrinio"],
routers=routers,
description="Generated extension.",
)
assert isinstance(out, pg.GeneratedProject)
assert out.project_name == "openbb-codegen"
assert out.package_name == "openbb_codegen"
src = out.source
assert 'name = "openbb-codegen"' in src
assert 'version = "0.1.0"' in src
assert "description = 'Generated extension.'" in src
assert 'packages = ["openbb_codegen"]' in src
# Provider entry-points (sorted alphabetically)
assert (
'fmp = "openbb_codegen.providers.fmp:fmp_provider"\n'
'intrinio = "openbb_codegen.providers.intrinio:intrinio_provider"'
) in src
# Router entry-points
assert 'equity = "openbb_codegen.routers.equity:router"' in src
assert 'economy = "openbb_codegen.routers.economy:router"' in src
def test_generate_pyproject_skips_routers_without_entry_point():
routers = [
_Router(entry_point_name=None, module_name="equity_price"),
_Router(entry_point_name="equity", module_name="equity"),
]
out = pg.generate_pyproject(
project_name="openbb-x",
package_name="openbb_x",
providers=[],
routers=routers,
description="d",
)
assert "equity_price" not in out.source
assert 'equity = "openbb_x.routers.equity:router"' in out.source
def test_generate_pyproject_respects_custom_version():
out = pg.generate_pyproject(
project_name="openbb-x",
package_name="openbb_x",
providers=[],
routers=[],
description="d",
version="1.2.3",
)
assert 'version = "1.2.3"' in out.source
def test_generate_pyproject_emits_provenance_block_when_provided():
out = pg.generate_pyproject(
project_name="openbb-x",
package_name="openbb_x",
providers=[],
routers=[],
description="d",
spec_provenance={
"source_url": "https://example.com/openapi.json",
"api_version": "3.0.0",
"generator": "openbb-cli==2.0.0",
"generated_at": "2026-05-02T12:00:00+00:00",
"spec_version": "5",
"spec_sha256": "deadbeef" * 8,
},
)
src = out.source
assert "[tool.openbb-codegen]" in src
assert "source_url = 'https://example.com/openapi.json'" in src
assert "api_version = '3.0.0'" in src
assert "generator = 'openbb-cli==2.0.0'" in src
assert "generated_at = '2026-05-02T12:00:00+00:00'" in src
assert "spec_version = '5'" in src
assert f"spec_sha256 = '{'deadbeef' * 8}'" in src
def test_generate_pyproject_omits_provenance_block_when_empty():
out = pg.generate_pyproject(
project_name="openbb-x",
package_name="openbb_x",
providers=[],
routers=[],
description="d",
spec_provenance={"source_url": "", "api_version": ""},
)
assert "[tool.openbb-codegen]" not in out.source