42 lines
1.3 KiB
Python
42 lines
1.3 KiB
Python
|
|
from io import BytesIO
|
||
|
|
|
||
|
|
from openpyxl import Workbook, load_workbook
|
||
|
|
|
||
|
|
from app.services.agent_asset_spreadsheet import AgentAssetSpreadsheetManager
|
||
|
|
|
||
|
|
|
||
|
|
def test_rebuild_from_uploaded_content_preserves_sheet_values() -> None:
|
||
|
|
source = Workbook()
|
||
|
|
first = source.active
|
||
|
|
first.title = "差旅标准"
|
||
|
|
first.append(["城市", "住宿费"])
|
||
|
|
first.append(["北京", 500])
|
||
|
|
second = source.create_sheet("补贴标准")
|
||
|
|
second.append(["区域", "餐补"])
|
||
|
|
second.append(["直辖市", 75])
|
||
|
|
|
||
|
|
source_buffer = BytesIO()
|
||
|
|
source.save(source_buffer)
|
||
|
|
|
||
|
|
rebuilt = AgentAssetSpreadsheetManager.rebuild_from_uploaded_content(
|
||
|
|
source_buffer.getvalue()
|
||
|
|
)
|
||
|
|
workbook = load_workbook(BytesIO(rebuilt), data_only=False)
|
||
|
|
|
||
|
|
assert workbook.sheetnames == ["差旅标准", "补贴标准"]
|
||
|
|
assert workbook["差旅标准"]["A2"].value == "北京"
|
||
|
|
assert workbook["差旅标准"]["B2"].value == "500"
|
||
|
|
assert workbook["补贴标准"]["A2"].value == "直辖市"
|
||
|
|
assert workbook["补贴标准"]["B2"].value == "75"
|
||
|
|
|
||
|
|
|
||
|
|
def build_workbook_bytes(rows: list[list[object]], *, sheet_name: str = "规则表") -> bytes:
|
||
|
|
workbook = Workbook()
|
||
|
|
sheet = workbook.active
|
||
|
|
sheet.title = sheet_name
|
||
|
|
for row in rows:
|
||
|
|
sheet.append(row)
|
||
|
|
buffer = BytesIO()
|
||
|
|
workbook.save(buffer)
|
||
|
|
return buffer.getvalue()
|