"""Oracle 仓库:缺配置 503;ORA-00001 映射成 DuplicateOmsId。不连真库。""" from __future__ import annotations import os import pytest os.environ.setdefault("OMS_INBOUND_TOKEN", "test-oms-token") from app.inbound.repo import DuplicateOmsId, RepoUnavailable def _record(): from datetime import date from decimal import Decimal return { "oms_id": 2026092801, "bar_code": "06901234567890", "order_date": date(2026, 9, 28), "sale_price": Decimal("128.5000"), "sale_qty": 10, "plan_purchase_qty": 10, "goods_id": "G000123456789", "goods_name": "阿莫西林胶囊", "goods_spec": "0.25g*24粒", "manufacturer": "示例制药有限公司", "approval_no": "国药准字H20201234", "unit": "盒", "customer_id": "C00010001", "customer_name": "示例医院", "org_code": "901", "goods_mdm_code": "QX0100167583", "customer_mdm_code": "DW0100079727", "deal_flag": 0, } def test_from_env_without_user_raises(monkeypatch): monkeypatch.delenv("RPA_ORACLE_USER", raising=False) monkeypatch.delenv("RPA_ORACLE_PASSWORD", raising=False) from app.inbound.oracle_repo import OracleSalesGoodsRepo with pytest.raises(RepoUnavailable): OracleSalesGoodsRepo.from_env() def test_insert_unique_violation_is_duplicate(): from app.inbound.oracle_repo import OracleSalesGoodsRepo class FakeError(Exception): def __init__(self): self.args = (type("Info", (), {"code": 1})(),) class FakeCursor: def __enter__(self): return self def __exit__(self, *args): return False def execute(self, sql, params=None): raise FakeError() class FakeConn: def cursor(self): return FakeCursor() def commit(self): raise AssertionError("unique 冲突不应 commit") def rollback(self): self.rolled_back = True def close(self): pass repo = OracleSalesGoodsRepo(connect=lambda: FakeConn()) with pytest.raises(DuplicateOmsId): repo.insert(_record())