Files
OpenBB/cli/tests/test_codegen_project_gen.py
Danglewood 9a30186174 [V5] CLI 2.0 - Pluggable Backends, Non-TTY Default, HTTP Dispatcher, Spec Files + Codegen (#7433)
* stash some changes

* add more robust testing

* mypy

* point PR at V5

* introduce spec file

* codespell

* test fix

* fix workflow environment setup

* fix workflow environment setup

* fix workflow environment setup

* add pyyaml to dependencies

* split lint jobs

* fix workflow environment setup

* fix workflow environment setup

* workflow env setup

* workflow env setup

* clean up code comments

* add auth hook entrypoints

* codespell

* add codegen feature

* codespell

* move _unpack into dispatchers for consistency with codegen packages

* surface nested models in the response

* fix missing coverage in CI

* socrata updates

* test fix

* detect plotly output

* add --include and --exclude flags from generate-extension command

* cap test matrix at python 3.14

* no useless comments

* platform controller command description split

* merge URL overloads from path params

* exclude none and unset from model dump

---------

Co-authored-by: deeleeramone <>
Co-authored-by: Copilot <copilot@github.com>
2026-06-01 19:14:38 +03: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