feat(portfolios): allow unassigned strategy creation

This commit is contained in:
2026-08-22 21:21:24 +09:00
parent 6e17a53b17
commit 5d6a0ad013
13 changed files with 49 additions and 46 deletions
+5 -5
View File
@@ -50,7 +50,7 @@ def test_workflow_actions_are_commit_pinned_and_verify_version_is_project_derive
assert 'RELEASE_VERSION=v0.1.3' not in verify
def test_release_version_and_migration_contract_are_v020_head_0030():
def test_release_version_and_migration_contract_are_v021_head_0030():
project = (REPO / "pyproject.toml").read_text()
config = (REPO / "app/core/config.py").read_text()
migrations = sorted(
@@ -58,8 +58,8 @@ def test_release_version_and_migration_contract_are_v020_head_0030():
for path in (REPO / "app/db/alembic/versions").glob("*.py")
if path.name != "__init__.py"
)
assert 'version = "0.2.0"' in project
assert 'app_version: str = "0.2.0"' in config
assert 'version = "0.2.1"' in project
assert 'app_version: str = "0.2.1"' in config
assert len(migrations) == 30
assert migrations[-1].startswith("20260820_0030")
@@ -85,8 +85,8 @@ def test_operations_separate_publication_deployment_migration_and_db_rollback():
"Image rollback is **not** database rollback",
"read-only root filesystem",
"10001:10001",
"PortfolioHub v0.2.0 container contract",
"v0.2.0 adds migration `0030`",
"PortfolioHub v0.2.1 container contract",
"v0.2.1 includes migration `0030`",
"trex-web v0.2.3 displays `strategy_nick`",
):
assert value in text
+4 -3
View File
@@ -507,7 +507,7 @@ def test_delete_already_disabled_is_idempotent() -> None:
# Issue #26: strategy catalog references on portfolio mutations.
def test_post_strategy_reference_errors_and_required_contract() -> None:
def test_post_strategy_reference_errors_and_optional_contract() -> None:
repo = _FakeRepo(asset=_make_asset(_ASSET_UUID, "active"))
client = _make_client()
with _with_repo(repo):
@@ -516,7 +516,7 @@ def test_post_strategy_reference_errors_and_required_contract() -> None:
json={"asset_id": _ASSET_UUID, "broker": "kiwoom", "strategy_id": "missing"},
headers=_auth("admin-tok"),
)
invalid = client.post(
without_strategy = client.post(
"/v1/portfolios",
json={"asset_id": _ASSET_UUID, "broker": "kiwoom"},
headers=_auth("admin-tok"),
@@ -528,7 +528,8 @@ def test_post_strategy_reference_errors_and_required_contract() -> None:
headers=_auth("admin-tok"),
)
assert missing.status_code == 404
assert invalid.status_code == 422
assert without_strategy.status_code == 201
assert without_strategy.json()["active_strategy_id"] is None
assert inactive.status_code == 409