打通 T+ 快照、业务、发货、回款和核算准备链路,保留来源差异并提供待补状态。 新增业务自动接入任务、跨平台读取服务托管、权限复核、来源关联和前端核对页面。 补充迁移、隔离集成测试、浏览器模拟验收及角色授权边界修复。
32 lines
1.3 KiB
Python
32 lines
1.3 KiB
Python
"""来源单价确认接口的权限边界。"""
|
|
|
|
from unittest.mock import Mock
|
|
|
|
import pytest
|
|
|
|
from app.api.v1.business.businesses import confirm_source_price
|
|
from app.core.exceptions import ForbiddenError
|
|
from app.schemas.business_source import SourcePriceConfirmIn
|
|
from app.services import authorization_service, business_source
|
|
from app.services.authorization_policy import permission_for
|
|
|
|
|
|
def test_来源单价确认路由要求业务更新权限():
|
|
assert permission_for("business.businesses", "confirm_source_price", "PUT") == "business:businesses:update"
|
|
|
|
|
|
def test_无核算准备权限不能确认来源单价(monkeypatch):
|
|
session, actor, meta = Mock(), Mock(), Mock()
|
|
confirm = Mock()
|
|
|
|
def deny(current_session, current_actor, permission):
|
|
assert (current_session, current_actor, permission) == (session, actor, "payroll:prepare")
|
|
raise ForbiddenError("无权核算准备")
|
|
|
|
monkeypatch.setattr(authorization_service, "require_permission", deny)
|
|
monkeypatch.setattr(business_source, "confirm_missing_source_price", confirm)
|
|
payload = SourcePriceConfirmIn(revision="0" * 64, evidence="核对原单")
|
|
with pytest.raises(ForbiddenError):
|
|
confirm_source_price(session, actor, 1, 1, payload, meta)
|
|
confirm.assert_not_called()
|