From a748260b7d4d9478ff5118bc83662398c133ec28 Mon Sep 17 00:00:00 2001 From: Daniel Roth Date: Fri, 15 May 2026 15:38:21 +0000 Subject: [PATCH] =?UTF-8?q?=5Fapply=5Fsection=5Fborders=20sets=20medium=20?= =?UTF-8?q?right-border=20on=20subtable=20boundary=20columns=20?= =?UTF-8?q?=F0=9F=9F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/magic_plan/audit_script.py | 11 ++++++++++- backend/magic_plan/tests/test_audit_script.py | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/backend/magic_plan/audit_script.py b/backend/magic_plan/audit_script.py index 202aa8ac..39ad2d44 100644 --- a/backend/magic_plan/audit_script.py +++ b/backend/magic_plan/audit_script.py @@ -2,7 +2,7 @@ from dataclasses import dataclass from typing import Optional import openpyxl -from openpyxl.styles import Alignment, Font, PatternFill +from openpyxl.styles import Alignment, Border, Font, PatternFill, Side from openpyxl.worksheet.worksheet import Worksheet from datatypes.magicplan.domain.models import Plan @@ -85,6 +85,15 @@ def _build_rows(plan: Plan) -> list[AuditRow]: _BLANK_SEPARATOR_COLS = {5, 21} +_MEDIUM_RIGHT = Border(right=Side(style="medium")) +_SECTION_BOUNDARY_COLS = {4, 11, 15, 20} + + +def _apply_section_borders(ws: Worksheet, row: int) -> None: + for col in _SECTION_BOUNDARY_COLS: + ws.cell(row=row, column=col).border = _MEDIUM_RIGHT + + def _write_headers(ws: Worksheet) -> None: # Row 1: group labels (merged) _merge_bold_fill(ws, 1, 1, 1, 4, "Room") diff --git a/backend/magic_plan/tests/test_audit_script.py b/backend/magic_plan/tests/test_audit_script.py index 8e966561..e7160eb7 100644 --- a/backend/magic_plan/tests/test_audit_script.py +++ b/backend/magic_plan/tests/test_audit_script.py @@ -1,6 +1,6 @@ import openpyxl from datatypes.magicplan.domain.models import Door, Floor, Plan, Room, Window -from backend.magic_plan.audit_script import AuditRow, _build_rows, _write_headers +from backend.magic_plan.audit_script import AuditRow, _apply_section_borders, _build_rows, _write_headers def test_build_rows_opening_and_trickle_vent_fields_are_none() -> None: @@ -260,3 +260,19 @@ def test_write_headers_two_rows_correct_labels_and_column_positions() -> None: assert ws.cell(row=2, column=13).value == "Opening Width m" assert ws.cell(row=2, column=14).value == "Opening Height m" assert ws.cell(row=2, column=15).value == "Total Area m²" + + +def test_apply_section_borders_sets_medium_right_border_on_boundary_columns() -> None: + # Arrange + wb = openpyxl.Workbook() + ws = wb.active # type: ignore[assignment] + + # Act + _apply_section_borders(ws, 1) + + # Assert — medium right-border on last col of each subtable + for col in (4, 11, 15, 20): + assert ws.cell(row=1, column=col).border.right.style == "medium", f"col {col}" + # Assert — non-boundary columns are untouched + for col in (1, 6, 12, 22): + assert ws.cell(row=1, column=col).border.right.style is None, f"col {col}"