AURORA-1902: возврат тестирования — цветные заливки на листах Операц/АХР/КВ выгрузки Сметы РФ #310
@ -413,6 +413,10 @@ class XlsxDepthSheetWriter(AbstractWriter):
|
||||
color = self.colors_config.get(full_key)
|
||||
if color and "palette" in color:
|
||||
self.palette[key] = color["palette"]
|
||||
# AURORA-1902: цвета Сметы РФ (FORM2_COLORS) ключуются путём данных
|
||||
# (header.section_code, plan.q1), а не путём ключей дерева колонок.
|
||||
if key not in self.palette and (color := self.colors_config.get(key)) and "palette" in color:
|
||||
self.palette[key] = color["palette"]
|
||||
|
||||
def _get_header_max_row(self, column_dict: dict) -> int:
|
||||
max_depth = 0
|
||||
|
||||
@ -200,3 +200,42 @@ async def test_resolve_form2_vsp_numbers_skips_db_call_when_no_vsp_ids():
|
||||
await service._resolve_form2_vsp_numbers(rows)
|
||||
|
||||
service.vsp_repo.get_reg_numbers_by_ids.assert_not_awaited()
|
||||
|
||||
|
||||
# AURORA-1902, возврат 10.11: FORM2_COLORS ключуется путём данных (header.section_code, plan.q1),
|
||||
# а writer искал цвет только по пути ключей дерева колонок — заливок на листах не было.
|
||||
@pytest.mark.parametrize("sheet", ["OPER", "AHR", "CAP"])
|
||||
def test_form2_writer_applies_sheet_palette_to_every_column(sheet):
|
||||
service = ExportService(AsyncMock())
|
||||
writer = service._create_xlsxwriter_sheet_writers(XlsxWorkbook(), FormTypeEnum.FORM_2.value, 2026)[sheet]
|
||||
|
||||
assert set(writer.palette) == set(writer.columns)
|
||||
for key in writer.columns:
|
||||
assert writer.palette[key] == FORM2_COLORS[sheet][key]["palette"], key
|
||||
|
||||
|
||||
def test_form1_writer_palette_is_unaffected():
|
||||
service = ExportService(AsyncMock())
|
||||
writer = service._create_xlsxwriter_sheet_writers(XlsxWorkbook(), FormTypeEnum.FORM_1.value, 2026)["OPER"]
|
||||
|
||||
assert len(writer.palette) == len(writer.columns) - 1
|
||||
assert writer.palette["section"] == "blue"
|
||||
|
||||
|
||||
def test_form2_export_fills_group_row_with_sheet_colors(tmp_path):
|
||||
from openpyxl import load_workbook
|
||||
|
||||
path = tmp_path / "form2.xlsx"
|
||||
workbook = XlsxWorkbook(str(path))
|
||||
service = ExportService(AsyncMock())
|
||||
writer = service._create_xlsxwriter_sheet_writers(workbook, FormTypeEnum.FORM_2.value, 2026)["OPER"]
|
||||
worksheet = workbook.add_worksheet("OPER")
|
||||
writer.write(worksheet, [("GROUP", 1, 1, {"header": {"name": "Группа"}, "plan": {"q1": 10}})])
|
||||
workbook.close()
|
||||
|
||||
sheet = load_workbook(path).active
|
||||
plan_q1_column = writer.columns.index("plan.q1") + 1
|
||||
group_row = sheet.max_row
|
||||
fill = sheet.cell(row=group_row, column=plan_q1_column).fill
|
||||
assert fill.fill_type == "solid"
|
||||
assert fill.fgColor.rgb not in (None, "00000000", "FFFFFFFF")
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user