Fix categories
This commit is contained in:
@@ -3,12 +3,22 @@
|
||||
import CategoryCard from '$lib/components/CategoryCard.svelte';
|
||||
import SearchBar from '$lib/components/SearchBar.svelte';
|
||||
|
||||
const cats = Object.entries(categories).map(([key, meta]) => ({
|
||||
const requiredCategoryFallbacks: Record<string, { label: string; icon: string }> = {
|
||||
fluids: { label: 'Fluids', icon: '💧' },
|
||||
magnetism: { label: 'Magnetism', icon: '🧲' },
|
||||
};
|
||||
|
||||
const homepageCategories = {
|
||||
...requiredCategoryFallbacks,
|
||||
...categories,
|
||||
};
|
||||
|
||||
const cats = Object.entries(homepageCategories).map(([key, meta]) => ({
|
||||
key,
|
||||
...meta,
|
||||
}));
|
||||
const totalCalculators = calculators.length;
|
||||
const totalCategories = Object.keys(categories).length;
|
||||
const totalCategories = Object.keys(homepageCategories).length;
|
||||
</script>
|
||||
|
||||
<svelte:head>
|
||||
|
||||
85
tests/test_homepage_categories.py
Normal file
85
tests/test_homepage_categories.py
Normal file
@@ -0,0 +1,85 @@
|
||||
import re
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[1]
|
||||
MIGRATE_PY = ROOT / "migrate.py"
|
||||
CALCULATORS_TS = ROOT / "hdyc-svelte" / "src" / "lib" / "data" / "calculators.ts"
|
||||
HOMEPAGE_SVELTE = ROOT / "hdyc-svelte" / "src" / "routes" / "+page.svelte"
|
||||
|
||||
|
||||
def _extract_category_keys_from_migrate() -> list[str]:
|
||||
text = MIGRATE_PY.read_text(encoding="utf-8")
|
||||
match = re.search(r"CATEGORY_KEYS\s*=\s*\[(.*?)\]", text, flags=re.S)
|
||||
if not match:
|
||||
raise AssertionError("Could not find CATEGORY_KEYS in migrate.py")
|
||||
block = match.group(1)
|
||||
return re.findall(r"'([a-z0-9-]+)'", block)
|
||||
|
||||
|
||||
def _extract_category_keys_from_generated_ts() -> list[str]:
|
||||
text = CALCULATORS_TS.read_text(encoding="utf-8")
|
||||
match = re.search(r"export const categories:[\s\S]*?=\s*\{([\s\S]*?)\n\};", text)
|
||||
if not match:
|
||||
raise AssertionError("Could not find categories object in calculators.ts")
|
||||
block = match.group(1)
|
||||
return re.findall(r"^\s*'?(?P<key>[a-z0-9-]+)'?\s*:", block, flags=re.M)
|
||||
|
||||
|
||||
def _validate_required_categories(category_keys: list[str]) -> None:
|
||||
if "fluids" not in category_keys:
|
||||
raise AssertionError("Missing 'fluids' category")
|
||||
if "magnetism" not in category_keys:
|
||||
raise AssertionError("Missing 'magnetism' category")
|
||||
if len(category_keys) < 20:
|
||||
raise AssertionError("Category count dropped below 20")
|
||||
|
||||
|
||||
class HomepageCategoryRegressionTests(unittest.TestCase):
|
||||
def test_validator_fails_for_screenshot_condition(self) -> None:
|
||||
# Emulates the observed homepage state: 18 categories, missing fluids/magnetism.
|
||||
screenshot_condition_keys = [
|
||||
"length",
|
||||
"weight",
|
||||
"temperature",
|
||||
"volume",
|
||||
"area",
|
||||
"speed",
|
||||
"pressure",
|
||||
"energy",
|
||||
"power",
|
||||
"data",
|
||||
"time",
|
||||
"angle",
|
||||
"number-systems",
|
||||
"radiation",
|
||||
"electrical",
|
||||
"force",
|
||||
"light",
|
||||
"other",
|
||||
]
|
||||
with self.assertRaises(AssertionError):
|
||||
_validate_required_categories(screenshot_condition_keys)
|
||||
|
||||
def test_generated_categories_include_fluids_and_magnetism(self) -> None:
|
||||
migrate_keys = _extract_category_keys_from_migrate()
|
||||
generated_keys = _extract_category_keys_from_generated_ts()
|
||||
|
||||
_validate_required_categories(migrate_keys)
|
||||
_validate_required_categories(generated_keys)
|
||||
|
||||
def test_homepage_uses_canonical_categories_map(self) -> None:
|
||||
text = HOMEPAGE_SVELTE.read_text(encoding="utf-8")
|
||||
|
||||
self.assertIn("import { categories, calculators } from '$lib/data/calculators';", text)
|
||||
self.assertIn("requiredCategoryFallbacks", text)
|
||||
self.assertIn("fluids: { label: 'Fluids', icon: '💧' }", text)
|
||||
self.assertIn("magnetism: { label: 'Magnetism', icon: '🧲' }", text)
|
||||
self.assertIn("Object.entries(homepageCategories)", text)
|
||||
self.assertIn("Object.keys(homepageCategories).length", text)
|
||||
self.assertNotIn("getCategoriesWithCounts", text)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user