| 1 | from pathlib import Path |
| 2 | |
| 3 | |
| 4 | PROJECT_ROOT = Path(__file__).resolve().parents[1] |
| 5 | |
| 6 | |
| 7 | def test_running_chat_bubble_morphs_and_rotates_on_a_1500ms_cycle() -> None: |
| 8 | chats_list = ( |
| 9 | PROJECT_ROOT / "webui/components/sidebar/chats/chats-list.html" |
| 10 | ).read_text(encoding="utf-8") |
| 11 | |
| 12 | assert ".chats-list-container .project-color-ball.heartbeat" in chats_list |
| 13 | assert ( |
| 14 | "animation: chat-working-bubble 1500ms ease-in-out infinite;" in chats_list |
| 15 | ) |
| 16 | assert "@keyframes chat-working-bubble" in chats_list |
| 17 | assert "border-radius: 0;" in chats_list |
| 18 | assert "transform: rotate(45deg) scale(0.9);" in chats_list |
| 19 | assert "transform: rotate(405deg) scale(0.9);" in chats_list |
| 20 | assert "transform: rotate(405deg) scale(1);" in chats_list |
| 21 | |
| 22 | |
| 23 | def test_chat_and_task_rows_reclaim_left_space_without_shifting_headers() -> None: |
| 24 | chats_list = ( |
| 25 | PROJECT_ROOT / "webui/components/sidebar/chats/chats-list.html" |
| 26 | ).read_text(encoding="utf-8") |
| 27 | left_sidebar = ( |
| 28 | PROJECT_ROOT / "webui/components/sidebar/left-sidebar.html" |
| 29 | ).read_text(encoding="utf-8") |
| 30 | |
| 31 | assert "margin-inline-start: calc(0px - var(--spacing-md));" not in chats_list |
| 32 | assert left_sidebar.count( |
| 33 | "margin-inline-start: calc(0px - var(--spacing-sm));" |
| 34 | ) == 2 |
| 35 | assert left_sidebar.count("width: calc(100% + var(--spacing-sm));") == 2 |
| 36 | assert ( |
| 37 | "#chats-section .section-header-row,\n" |
| 38 | " #tasks-section .section-header {\n" |
| 39 | " margin-inline-start: var(--spacing-sm);" |
| 40 | ) in left_sidebar |
| 41 | assert "flex: 1 1 auto;" in chats_list |
| 42 | assert "min-width: 0;" in chats_list |
| 43 | assert "padding: 8px 6px;" in chats_list |
| 44 | |
| 45 | |
| 46 | def test_only_visible_chat_actions_take_width() -> None: |
| 47 | chats_list = ( |
| 48 | PROJECT_ROOT / "webui/components/sidebar/chats/chats-list.html" |
| 49 | ).read_text(encoding="utf-8") |
| 50 | |
| 51 | assert ".device-pointer .chat-container .chat-list-action-btn" in chats_list |
| 52 | assert ( |
| 53 | ".device-touch .chat-container:not(.chat-selected) .chat-list-action-btn" |
| 54 | in chats_list |
| 55 | ) |
| 56 | assert ".device-pointer .chat-container:hover .chat-list-action-btn" in chats_list |
| 57 | assert ( |
| 58 | ".device-touch .chat-container.chat-selected .chat-list-action-btn" |
| 59 | in chats_list |
| 60 | ) |