mirror of
https://github.com/Hestia-Homes/Model.git
synced 2026-07-27 23:35:01 +00:00
Sanitise and deduplicate scenario sheet names 🟥
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
4bd90bf836
commit
a8c90b0d95
1 changed files with 20 additions and 0 deletions
|
|
@ -28,3 +28,23 @@ def test_renders_a_sheet_named_for_the_scenario_with_headers_then_rows() -> None
|
|||
worksheet = workbook["Fabric first"]
|
||||
assert [cell.value for cell in worksheet[1]] == ["property_id", "loft_insulation"]
|
||||
assert [cell.value for cell in worksheet[2]] == [1, 1200.0]
|
||||
|
||||
|
||||
def test_sanitises_and_deduplicates_scenario_sheet_names() -> None:
|
||||
# arrange — a name over Excel's 31-char limit (used twice, so it must be
|
||||
# deduplicated) and one with characters Excel forbids in a sheet title.
|
||||
empty = ExportSheet(columns=("property_id",), rows=())
|
||||
long_name = "A really long scenario name that exceeds Excel's limit"
|
||||
illegal_name = "Bad:/\\?*[]name"
|
||||
|
||||
# act
|
||||
data = render_workbook(
|
||||
[(long_name, empty), (long_name, empty), (illegal_name, empty)]
|
||||
)
|
||||
|
||||
# assert — three distinct, Excel-legal sheet names.
|
||||
names = load_workbook(BytesIO(data)).sheetnames
|
||||
assert len(names) == 3
|
||||
assert len(set(names)) == 3
|
||||
assert all(len(name) <= 31 for name in names)
|
||||
assert not any(ch in name for name in names for ch in r":/\?*[]")
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue