fix: address CodeRabbit findings on the style-editor/font-selector PR

- Fix _load_font_sized double-wrapping the (font, size) tuple on the
  missing-font path, which handed callers a tuple instead of a font.
- Fix _set_nested_value skipping an explicit None when the key already
  existed, which silently kept stale overrides when a user cleared a
  nullable per-mode field or blanked all channels of an indexed color.
- Preserve BDF scalable/native_size metadata through fetchFontCatalog's
  catalog-format mapping so maxFixedSize filtering actually applies.
- Stop caching an empty array on a failed font-catalog fetch so a later
  call can retry instead of being stuck with the failed result.
- Keep a saved font selected in the style editor even when it no longer
  fits a newly declared maxFixedSize, instead of silently deselecting it.
- Don't drop in-progress user edits to fallback fields when a plugin
  widget finishes loading asynchronously and takes over the form.
- Tighten the removed font-override endpoint test to assert 405, not
  just != 200.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Claude
2026-09-13 05:34:27 +00:00
parent a5342939af
commit f9e9eeba00
8 changed files with 76 additions and 15 deletions
+12 -2
View File
@@ -25,6 +25,7 @@ from web_interface.blueprints.api_v3 import ( # noqa: E402
_parse_form_value,
_get_schema_property,
_set_nested_value,
_SKIP_FIELD,
)
@@ -221,12 +222,21 @@ class TestSetNestedValue:
_set_nested_value(config, "fifa.world.enabled", True)
assert config == {"fifa.world": {"enabled": True}}
def test_none_does_not_overwrite_existing(self):
def test_none_overwrites_existing(self):
# Regression: None is a real value here (the per-mode "inherit the
# base" override for a nullable field, or a blank indexed color
# channel) and must replace whatever was already stored. Only the
# _SKIP_FIELD sentinel means "leave it alone" -- see the next test.
config = {"a": 1}
_set_nested_value(config, "a", None)
assert config == {"a": 1}
assert config == {"a": None}
def test_none_sets_missing_key(self):
config = {}
_set_nested_value(config, "a", None)
assert config == {"a": None}
def test_skip_field_does_not_overwrite_existing(self):
config = {"a": 1}
_set_nested_value(config, "a", _SKIP_FIELD)
assert config == {"a": 1}