AutoRpa/rpa_selection/tests/test_oracle_repo.py

106 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.

from __future__ import annotations
import os
import pytest
from db import RepoUnavailable, load_runtime_env
from repo import OracleSelectRepo
def test_load_runtime_env_fills_blank_from_oms_env(tmp_path, monkeypatch):
monkeypatch.delenv("RPA_ORACLE_HOST", raising=False)
monkeypatch.delenv("RPA_ORACLE_PASSWORD", raising=False)
monkeypatch.setenv("RPA_ORACLE_USER", "keep-me")
select_env = tmp_path / "select.env"
oms_env = tmp_path / "oms.env"
select_env.write_text(
"RPA_ORACLE_HOST=192.168.12.244\nRPA_ORACLE_PASSWORD=\nRPA_ORACLE_USER=from-select\n",
encoding="utf-8",
)
oms_env.write_text(
"RPA_ORACLE_PASSWORD=not-for-git\nRPA_ORACLE_USER=from-oms\n",
encoding="utf-8",
)
load_runtime_env([select_env, oms_env])
assert os.environ["RPA_ORACLE_HOST"] == "192.168.12.244"
assert os.environ["RPA_ORACLE_PASSWORD"] == "not-for-git"
assert os.environ["RPA_ORACLE_USER"] == "keep-me"
def test_from_env_without_user_raises(monkeypatch):
monkeypatch.delenv("RPA_ORACLE_USER", raising=False)
monkeypatch.delenv("RPA_ORACLE_PASSWORD", raising=False)
monkeypatch.delenv("RPA_ORACLE_HOST", raising=False)
with pytest.raises(RepoUnavailable):
OracleSelectRepo.from_env()
def test_save_result_inserts_cart_then_updates_mapping():
executed: list[tuple[str, dict]] = []
class FakeCursor:
def __enter__(self):
return self
def __exit__(self, *args):
return False
def execute(self, sql, params=None):
executed.append((sql, params or {}))
class FakeConn:
def __init__(self):
self.committed = False
def cursor(self):
return FakeCursor()
def commit(self):
self.committed = True
def rollback(self):
raise AssertionError("不应 rollback")
def close(self):
pass
conn = FakeConn()
repo = OracleSelectRepo(connect=lambda: conn)
repo.save_result(
2026100201,
1,
"选品成功:1号药城",
[
{
"operate_type": 1,
"oms_id": 2026100201,
"platform_type": 66,
"supplier_name": "广东壹号药业有限公司",
"bar_code": "06901234567890",
"purchase_price": 90,
"purchase_qty": 10,
"purchase_total": 900,
"status": 1,
"fail_reason": None,
"push_status": 0,
"org_code": "907",
"multi_platform_flag": 0,
}
],
)
assert conn.committed is True
sql = " ".join(executed[0][0].split())
assert "rpa_cart_settlement_goods_data" in sql.lower()
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
assert executed[0][1]["oms_id"] == 2026100201
assert "create_user_name" not in executed[0][1]
assert "rpa_sales_goods_mapping_data" in executed[1][0].lower()
assert executed[1][1]["deal_flag"] == 1