feat: enhance table layout and interaction across various components
Deploy production / deploy (push) Successful in 53s

- Introduced a new `WorkspaceTable` component for consistent table styling and behavior.
- Updated `BacktestPage`, `DatasetPage`, and `DataPreparationPage` to utilize the new `WorkspaceTable`.
- Implemented compact row heights and ellipsis for long text in table cells.
- Added validation for online field queries to ensure at least one filter is provided.
- Enhanced error handling and user feedback for invalid input scenarios.
- Improved pagination controls with dynamic page size options.
- Documented table display specifications in `ui-tables.md`.
- Added tests to verify table layout, interaction, and error handling.
This commit is contained in:
yuxuanhui
2026-09-12 02:13:48 +08:00
parent d9fbaa7cf7
commit b9975e58e9
19 changed files with 586 additions and 81 deletions
+27
View File
@@ -411,3 +411,30 @@ async def test_terminal_detail_failure_releases_slot_but_keeps_platform_success(
await tick(lane)
assert len(platform.posts) == 2
await lane.interrupt()
async def test_run_list_projects_source_metadata_without_accepting_unknown_input(app, logged_in):
"""Persisted source metadata must not turn the entire run list into a 500."""
await setup(app)
created = await start(logged_in, await preview(logged_in))
async with app.state.sessions.begin() as db:
row = await db.get(BacktestRun, created["backtest_run_id"])
row.source = {**row.source, "template_input_id": None, "extra_metadata": "not-an-input"}
response = await logged_in.get(f"{PREFIX}/runs?offset=0&source=")
assert response.status_code == 200
source = response.json()["items"][0]["source"]
assert source["kind"] == "test"
assert "template_input_id" not in source and "extra_metadata" not in source
assert source["input_snapshot_ids"] == []
detail = await logged_in.get(f"{PREFIX}/runs/{created['backtest_run_id']}")
assert detail.status_code == 200
assert detail.json()["source"] == source
rejected = await logged_in.post(
f"{PREFIX}/drafts",
json={
"name": "invalid",
"source": {"kind": "manual", "extra_metadata": "invalid"},
"candidates": [candidate()],
},
)
assert rejected.status_code == 422