from pathlib import Path ROOT = Path(__file__).resolve().parents[1] def test_bulk_select_triggers_share_dot_and_x_icons(): css = (ROOT / "static" / "style.css").read_text() for selector in ( "#memory-select-btn", "#skills-select-btn", "#notes-select-btn", "#tasks-select-btn", "#doclib-chats-select-btn", "#doclib-arc-select-btn", "#doclib-research-select-btn", "#doclib-select-btn", "#gallery-select-btn", "#gallery-albums-select-btn", "#gallery-editor-drafts-select", "#email-lib-select-btn", "#archive-select-btn", "#lib-select-btn", "#hwfit-cache-select", ): assert selector in css assert "cy='11'" in css assert ").active::before" in css assert "#skills-select-btn::before" in css assert "translateY(1px)" in css def test_library_titles_have_highlighted_respective_icons(): source = (ROOT / "static" / "js" / "documentLibrary.js").read_text() assert source.count('class="doclib-section-title-icon"') == 4 assert "color: var(--accent, var(--red));" in (ROOT / "static" / "style.css").read_text() for title in ("Chats", "Archive", "Research", "Documents"): assert f">{title} = 4 assert "label + ' (' + count + ')'" not in source assert ".doclib-lang-chips > :is(.memory-cat-chip, .skills-summary-chip)" in css assert "min-height: 25px;" in css def test_launch_cookbook_filter_chips_match_skills(): source = (ROOT / "static" / "js" / "cookbookServe.js").read_text() assert 'class="skills-summary-chip active" data-serve-tag=""' in source assert 'class="skills-summary-chip" data-serve-tag=' in source assert 'All${allModels.length}' in source assert "querySelector('[data-serve-tag].active')" in source assert "querySelectorAll('[data-serve-tag]')" in source assert 'class="memory-cat-chip" data-serve-tag=' not in source def test_launch_search_select_and_tags_move_up_together(): css = (ROOT / "static" / "style.css").read_text() rule = css[css.index("#serve-search,"):css.index("#serve-search,") + 140] assert "#hwfit-cache-select," in rule assert "#serve-tags" in rule assert "top: -2px;" in rule select_start = css.rindex("#hwfit-cache-select {") select_rule = css[select_start:select_start + 150] assert "top: -3px;" in select_rule list_start = css.index("#hwfit-cached-list {", css.index("#hwfit-cache-select {")) list_rule = css[list_start:list_start + 90] assert "top: -6px;" in list_rule bulk_start = css.index("#serve-bulk-bar {") bulk_rule = css[bulk_start:bulk_start + 100] assert "top: -6px;" in bulk_rule def test_launch_server_selector_and_model_search_move_up_together(): css = (ROOT / "static" / "style.css").read_text() rule = css[css.index("#hwfit-server-select,"):css.index("#hwfit-server-select,") + 130] assert "#hwfit-search" in rule assert "top: -2px !important;" in rule def test_launch_heading_uses_accented_flame_icon(): source = (ROOT / "static" / "js" / "cookbook.js").read_text() heading = source[source.index('id="serve-stats"') - 500:source.index('id="serve-stats"') + 120] assert ">Launch = 2 def test_launch_search_matches_document_library_search_treatment(): css = (ROOT / "static" / "style.css").read_text() rule = css[css.index("#hwfit-search {", css.index("#hwfit-server-select,")):][:700] assert "height: 30px;" in rule assert "font-family: inherit;" in rule assert "font-size: 11px;" in rule assert "background-image: url(" in rule assert "padding-left: 28px;" in rule cached_search_start = css.rindex("#serve-search {") cached_search_rule = css[cached_search_start:cached_search_start + 800] assert "background-image: url(" in cached_search_rule assert "background-position: 9px center;" in cached_search_rule assert "padding-left: 28px;" in cached_search_rule def test_memory_filter_chips_match_skills_and_are_not_cropped(): source = (ROOT / "static" / "js" / "memory.js").read_text() css = (ROOT / "static" / "style.css").read_text() assert "skills-summary-chip memory-filter-chip" in source assert "btn.replaceChildren(label, count)" in source assert "cat === 'all' ? memories.length : counts[cat] || 0" in source assert "#memory-category-filters > .skills-summary-chip" in css rule = css[css.index("#memory-category-filters {"):css.index("#memory-category-filters {") + 180] assert "min-height: 25px;" in rule assert "padding: 1px 0 !important;" in rule