## P1 数据库基础 - zqyy_app: 创建 auth/biz schema、FDW 连接 etl_feiqiu - etl_feiqiu: 创建 app schema RLS 视图、商品库存预警表 - 清理 assistant_abolish 残留数据 ## P2 ETL/DWS 扩展 - 新增 DWS 助教订单贡献度表 (dws.assistant_order_contribution) - 新增 assistant_order_contribution_task 任务及 RLS 视图 - member_consumption 增加充值字段、assistant_daily 增加处罚字段 - 更新 ODS/DWD/DWS 任务文档及业务规则文档 - 更新 consistency_checker、flow_runner、task_registry 等核心模块 ## P3 小程序鉴权系统 - 新增 xcx_auth 路由/schema(微信登录 + JWT) - 新增 wechat/role/matching/application 服务层 - zqyy_app 鉴权表迁移 + 角色权限种子数据 - auth/dependencies.py 支持小程序 JWT 鉴权 ## 文档与审计 - 新增 DOCUMENTATION-MAP 文档导航 - 新增 7 份 BD_Manual 数据库变更文档 - 更新 DDL 基线快照(etl_feiqiu 6 schema + zqyy_app auth) - 新增全栈集成审计记录、部署检查清单更新 - 新增 BACKLOG 路线图、FDW→Core 迁移计划 ## Kiro 工程化 - 新增 5 个 Spec(P1/P2/P3/全栈集成/核心业务) - 新增审计自动化脚本(agent_on_stop/build_audit_context/compliance_prescan) - 新增 6 个 Hook(合规检查/会话日志/提交审计等) - 新增 doc-map steering 文件 ## 运维与测试 - 新增 ops 脚本:迁移验证/API 健康检查/ETL 监控/集成报告 - 新增属性测试:test_dws_contribution / test_auth_system - 清理过期 export 报告文件 - 更新 .gitignore 排除规则
95 lines
6.1 KiB
Plaintext
95 lines
6.1 KiB
Plaintext
..................................................................F..... [ 23%]
|
|
........................................................................ [ 47%]
|
|
........................................................................ [ 71%]
|
|
....F..FFFFFFFF.F...........................................F..F........ [ 95%]
|
|
............... [100%]
|
|
================================== FAILURES ===================================
|
|
__________ TestGetEtlReadonlyConnection.test_uses_etl_config_params ___________
|
|
tests\test_database.py:94: in test_uses_etl_config_params
|
|
assert connect_kwargs["dbname"] == "etl_feiqiu"
|
|
E AssertionError: assert 'test_etl_feiqiu' == 'etl_feiqiu'
|
|
E
|
|
E - etl_feiqiu
|
|
E + test_etl_feiqiu
|
|
E ? +++++
|
|
__________ TestRunningState.test_is_running_true_when_process_active __________
|
|
tests\test_task_executor.py:118: in test_is_running_true_when_process_active
|
|
assert executor.is_running("exec-1") is True
|
|
E AssertionError: assert False is True
|
|
E + where False = is_running('exec-1')
|
|
E + where is_running = <app.services.task_executor.TaskExecutor object at 0x000001C9442CBD40>.is_running
|
|
____________________ TestReadStream.test_read_stdout_lines ____________________
|
|
tests\test_task_executor.py:146: in test_read_stdout_lines
|
|
await executor._read_stream("exec-1", stream, "stdout", collector)
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
E AttributeError: 'TaskExecutor' object has no attribute '_read_stream'
|
|
____________________ TestReadStream.test_read_stderr_lines ____________________
|
|
tests\test_task_executor.py:158: in test_read_stderr_lines
|
|
await executor._read_stream("exec-1", stream, "stderr", collector)
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
E AttributeError: 'TaskExecutor' object has no attribute '_read_stream'
|
|
________________ TestReadStream.test_read_stream_none_is_safe _________________
|
|
tests\test_task_executor.py:166: in test_read_stream_none_is_safe
|
|
await executor._read_stream("exec-1", None, "stdout", collector)
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
E AttributeError: 'TaskExecutor' object has no attribute '_read_stream'
|
|
__________________ TestReadStream.test_broadcast_during_read __________________
|
|
tests\test_task_executor.py:175: in test_broadcast_during_read
|
|
await executor._read_stream("exec-1", stream, "stdout", collector)
|
|
^^^^^^^^^^^^^^^^^^^^^
|
|
E AttributeError: 'TaskExecutor' object has no attribute '_read_stream'
|
|
____________________ TestExecute.test_successful_execution ____________________
|
|
tests\test_task_executor.py:218: in test_successful_execution
|
|
assert "processing..." in update_kwargs["output_log"]
|
|
E AssertionError: assert 'processing...' in ''
|
|
______________________ TestExecute.test_failed_execution ______________________
|
|
tests\test_task_executor.py:245: in test_failed_execution
|
|
assert update_kwargs["status"] == "failed"
|
|
E AssertionError: assert 'success' == 'failed'
|
|
E
|
|
E - failed
|
|
E + success
|
|
_________________ TestExecute.test_exception_during_execution _________________
|
|
tests\test_task_executor.py:263: in test_exception_during_execution
|
|
assert update_kwargs["status"] == "failed"
|
|
E AssertionError: assert 'success' == 'failed'
|
|
E
|
|
E - failed
|
|
E + success
|
|
_____________ TestExecute.test_subscribers_notified_on_completion _____________
|
|
tests\test_task_executor.py:290: in test_subscribers_notified_on_completion
|
|
assert "[stdout] line" in messages
|
|
E AssertionError: assert '[stdout] line' in ['[stderr] [2026-02-25 02:42:10] INFO | etl_billiards | 配置加载完成', '[stderr] [2026-02-25 02:42:10] INFO | etl_billiard... 02:42:11] INFO | etl_billiards | 使用回溯时间窗口: 2026-02-24 02:42:11.615145+08:00 ~ 2026-02-25 02:42:11.615145+08:00', ...]
|
|
___________________ TestCancel.test_cancel_running_process ____________________
|
|
tests\test_task_executor.py:331: in test_cancel_running_process
|
|
assert result is True
|
|
E assert False is True
|
|
_____________ TestFlows.test_flows_returns_three_processing_modes _____________
|
|
tests\test_tasks_router.py:124: in test_flows_returns_three_processing_modes
|
|
assert len(data["processing_modes"]) == 3
|
|
E AssertionError: assert 4 == 3
|
|
E + where 4 = len([{'description': '只处理新增和变更的数据', 'id': 'increment_only', 'name': '仅增量处理'}, {'description': '校验现有数据并修复不一致', 'id': 'verif...nt_verify', 'name': '增量 + 校验修复'}, {'description': '用 API 返回数据的实际时间范围处理全部层,无需校验', 'id': 'full_window', 'name': '全窗口处理'}])
|
|
_____________________ TestFlows.test_processing_mode_ids ______________________
|
|
tests\test_tasks_router.py:143: in test_processing_mode_ids
|
|
assert mode_ids == {"increment_only", "verify_only", "increment_verify"}
|
|
E AssertionError: assert {'full_window...'verify_only'} == {'increment_o...'verify_only'}
|
|
E
|
|
E Extra items in the left set:
|
|
E 'full_window'
|
|
E Use -v to get more diff
|
|
=========================== short test summary info ===========================
|
|
FAILED tests/test_database.py::TestGetEtlReadonlyConnection::test_uses_etl_config_params
|
|
FAILED tests/test_task_executor.py::TestRunningState::test_is_running_true_when_process_active
|
|
FAILED tests/test_task_executor.py::TestReadStream::test_read_stdout_lines - ...
|
|
FAILED tests/test_task_executor.py::TestReadStream::test_read_stderr_lines - ...
|
|
FAILED tests/test_task_executor.py::TestReadStream::test_read_stream_none_is_safe
|
|
FAILED tests/test_task_executor.py::TestReadStream::test_broadcast_during_read
|
|
FAILED tests/test_task_executor.py::TestExecute::test_successful_execution - ...
|
|
FAILED tests/test_task_executor.py::TestExecute::test_failed_execution - Asse...
|
|
FAILED tests/test_task_executor.py::TestExecute::test_exception_during_execution
|
|
FAILED tests/test_task_executor.py::TestExecute::test_subscribers_notified_on_completion
|
|
FAILED tests/test_task_executor.py::TestCancel::test_cancel_running_process
|
|
FAILED tests/test_tasks_router.py::TestFlows::test_flows_returns_three_processing_modes
|
|
FAILED tests/test_tasks_router.py::TestFlows::test_processing_mode_ids - Asse...
|
|
13 failed, 290 passed in 146.30s (0:02:26)
|