|
12 | 12 | # See the License for the specific language governing permissions and |
13 | 13 | # limitations under the License. |
14 | 14 |
|
| 15 | +import ast |
| 16 | +import fnmatch |
15 | 17 | import html |
16 | 18 | import importlib.util |
17 | 19 | import re |
@@ -180,7 +182,7 @@ def test_normalizer_never_generates_a_cartesian_product(generator: ModuleType, t |
180 | 182 | def test_catalog_is_a_simple_model_directory(generator: ModuleType, catalog: dict[str, object]) -> None: |
181 | 183 | page = generator.render_supported_models_page(catalog, REPO_ROOT, fern=False) |
182 | 184 |
|
183 | | - assert page.count('class="verification-model-link"') == len(catalog["models"]) - 2 |
| 185 | + assert page.count('class="verification-model-link"') == len(catalog["models"]) |
184 | 186 | assert "never combined into synthetic commands" in page |
185 | 187 | assert 'href="deepseek/deepseek-v3.html#verified-deepseek-v3"' in page |
186 | 188 | assert "NVIDIA-Nemotron-3-Super-120B-A12B-BF16</strong> <!-- pragma: allowlist secret -->" in page |
@@ -320,48 +322,37 @@ def test_model_page_merge_preserves_intro_and_replaces_old_sections(generator: M |
320 | 322 |
|
321 | 323 |
|
322 | 324 | @pytest.mark.parametrize("guide", ["nemotron3.5-super-vl", "nemotron3.5-super-vl-text-only"]) |
323 | | -def test_unpublished_nemotron_guides_remain_in_sources_without_public_links( |
324 | | - generator: ModuleType, catalog: dict[str, object], guide: str |
325 | | -) -> None: |
| 325 | +def test_released_nemotron_guides_are_published(generator: ModuleType, catalog: dict[str, object], guide: str) -> None: |
326 | 326 | index = (REPO_ROOT / "docs/models/nemotron/index.md").read_text(encoding="utf-8") |
327 | 327 | fern_index = (REPO_ROOT / "docs/fern/versions/nightly/pages/models/nemotron/index.mdx").read_text(encoding="utf-8") |
328 | 328 | nav = (REPO_ROOT / "docs/fern/versions/nightly.yml").read_text(encoding="utf-8") |
329 | 329 |
|
330 | | - assert guide not in index |
331 | | - assert guide not in fern_index |
332 | | - assert f"path: ./nightly/pages/models/nemotron/{guide}.mdx" not in nav |
| 330 | + assert f"\n{guide}.md\n" in index |
| 331 | + assert f"]({guide}.md)" in index |
| 332 | + assert f"]({guide}.md)" in fern_index |
| 333 | + assert f"path: ./nightly/pages/models/nemotron/{guide}.mdx" in nav |
333 | 334 | assert (REPO_ROOT / f"docs/models/nemotron/{guide}.md").is_file() |
334 | 335 | assert (REPO_ROOT / f"docs/fern/versions/nightly/pages/models/nemotron/{guide}.mdx").is_file() |
335 | 336 | for fern in (False, True): |
336 | 337 | page = generator.render_supported_models_page(catalog, REPO_ROOT, fern=fern) |
337 | | - assert guide not in page |
338 | | - assert "nemotron3-super" in page |
339 | | - assert "nemotron3-ultra" in page |
340 | | - assert f"**{len(catalog['models']) - 2} model cards**" in page |
341 | | - |
342 | | - |
343 | | -def test_unpublished_nemotron_redirects_target_the_nightly_catalog() -> None: |
344 | | - config = yaml.safe_load((REPO_ROOT / "docs/fern/docs.yml").read_text(encoding="utf-8")) |
345 | | - redirects = {redirect["source"]: redirect["destination"] for redirect in config["redirects"]} |
346 | | - paths = ( |
347 | | - "supported-models/nemotron/nemotron-3-5-super-vl", |
348 | | - "supported-models/nemotron/nemotron-3-5-super-text-only", |
349 | | - "models/nemotron/nemotron3.5-super-vl.html", |
350 | | - "models/nemotron/nemotron3.5-super-vl-text-only.html", |
351 | | - ) |
352 | | - for version in ("", "nightly/"): |
353 | | - for path in paths: |
354 | | - assert ( |
355 | | - redirects[f"/nemo/megatron-bridge/{version}{path}"] |
356 | | - == "/nemo/megatron-bridge/nightly/supported-models/supported-models" |
357 | | - ) |
358 | | - # The frozen default version lacks this landing page; nightly contains it. |
359 | | - nav = yaml.safe_load((REPO_ROOT / "docs/fern/versions/nightly.yml").read_text(encoding="utf-8")) |
360 | | - section = next(item for item in nav["navigation"] if item.get("section") == "Supported Models") |
361 | | - assert any( |
362 | | - item.get("page") == "Supported Models" and item.get("path") == "./nightly/pages/models/README.mdx" |
363 | | - for item in section["contents"] |
| 338 | + suffix = "" if fern else ".html" |
| 339 | + assert f'href="nemotron/{guide}{suffix}#' in page |
| 340 | + assert f"**{len(catalog['models'])} model cards**" in page |
| 341 | + |
| 342 | + config = ast.parse((REPO_ROOT / "docs/conf.py").read_text(encoding="utf-8")) |
| 343 | + excludes = next( |
| 344 | + ast.literal_eval(node.value) |
| 345 | + for node in config.body |
| 346 | + if isinstance(node, ast.Assign) |
| 347 | + and any(isinstance(target, ast.Name) and target.id == "exclude_patterns" for target in node.targets) |
364 | 348 | ) |
| 349 | + assert not any(fnmatch.fnmatch(f"models/nemotron/{guide}.md", pattern) for pattern in excludes) |
| 350 | + |
| 351 | + fern_config = yaml.safe_load((REPO_ROOT / "docs/fern/docs.yml").read_text(encoding="utf-8")) |
| 352 | + slug = "nemotron-3-5-super-text-only" if guide.endswith("text-only") else "nemotron-3-5-super-vl" |
| 353 | + for redirect in fern_config.get("redirects", []): |
| 354 | + assert not redirect["source"].endswith(f"/supported-models/nemotron/{slug}") |
| 355 | + assert not redirect["source"].endswith(f"/models/nemotron/{guide}.html") |
365 | 356 |
|
366 | 357 |
|
367 | 358 | def test_generated_outputs_and_navigation_are_current(generator: ModuleType, catalog: dict[str, object]) -> None: |
|
0 commit comments