AutoRpa/rpa_oms/tests/test_oracle_repo.py

122 lines
3.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""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": "907",
"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())
def test_insert_sql_includes_select_job_columns():
from app.inbound.oracle_repo import _BIND_KEYS, _INSERT_SQL
sql = " ".join(_INSERT_SQL.split())
for column in (
"oms_id",
"bar_code",
"sale_price",
"plan_purchase_qty",
"goods_name",
"goods_spec",
"manufacturer",
"approval_no",
"org_code",
"deal_flag",
):
assert column in sql
for key in (
"oms_id",
"bar_code",
"sale_price",
"plan_purchase_qty",
"org_code",
):
assert key in _BIND_KEYS
assert "deal_flag" in sql
def test_insert_sql_sets_system_auditor():
from app.inbound.oracle_repo import _INSERT_SQL
sql = " ".join(_INSERT_SQL.split())
assert "create_user_id" in sql
assert "create_user_name" in sql
assert "update_time" in sql
assert "update_user_id" in sql
assert "update_user_name" in sql
assert "SYSDATE, 0, '系统管理员'" in sql
assert sql.count("SYSDATE") == 2