fix(fonts): group compound weight and style variants by family

This commit is contained in:
red person
2026-10-28 00:23:18 +03:00
parent 339c6886cb
commit 927985f847
2 changed files with 42 additions and 2 deletions
+39
View File
@@ -1,3 +1,8 @@
import pytest
from fastapi import FastAPI
from fastapi.testclient import TestClient
import routes.font_routes as font_routes
from routes.font_routes import _derive_family
@@ -9,3 +14,37 @@ def test_derive_family_splits_common_family_suffixes():
assert _derive_family("FiraCode-SemiBold.ttf") == "Fira Code"
assert _derive_family("NotoSans-Bold.otf") == "Noto Sans"
assert _derive_family("RobotoSlab-Bold.woff2") == "Roboto Slab"
@pytest.mark.parametrize("filename,expected", [
("JetBrainsMono-SemiBoldItalic.woff2", "JetBrains Mono"),
("FiraCode-BoldItalic.ttf", "Fira Code"),
("NotoSans-ExtraLightItalic.otf", "Noto Sans"),
("RobotoSlab-UltraBoldOblique.WOFF2", "Roboto Slab"),
("SourceSansPro-Bold-Italic.woff", "Source Sans Pro"),
("FiraCode-SemiBold_Italic.ttf", "Fira Code"),
("FiraCode-Italic.woff2", "Fira Code"),
("FiraCode-VF.woff2", "Fira Code"),
("MyFont-Book.woff2", "My Font Book"),
])
def test_compound_weight_and_style_are_not_part_of_the_family(filename, expected):
assert _derive_family(filename) == expected
def test_custom_font_endpoint_groups_all_styles_under_one_family(tmp_path, monkeypatch):
files = ["JetBrainsMono-Regular.woff2", "JetBrainsMono-SemiBoldItalic.woff2",
"JetBrainsMono-Bold-Oblique.ttf"]
for name in [*files, "OtherFont-Regular.otf", "README.md"]:
(tmp_path / name).write_bytes(b"filename-only discovery fixture")
monkeypatch.setattr(font_routes, "CUSTOM_FONTS_DIR", str(tmp_path))
app = FastAPI()
app.include_router(font_routes.setup_font_routes())
with TestClient(app) as client:
response = client.get("/api/fonts/custom")
assert response.status_code == 200
fonts = response.json()["fonts"]
assert set(fonts) == {"JetBrains Mono", "Other Font"}
assert fonts["JetBrains Mono"] == [
{"file": name, "url": f"/static/fonts/custom/{name}", "format": name.rsplit(".", 1)[1]}
for name in sorted(files)
]