docsnight · qa

Инструкция для тестировщика

Ручная приёмка перед публикацией в Chrome Web Store. Дополняет автотесты — здесь то, что проверяется глазами и на разных машинах.

Версия артефакта: docsnight-v0.3.1.zip (кнопка Download на главной) или dist/ после npm run build.
Базовая палитра: фон #1b1c1f, текст #e6e6e6. Тема по умолчанию включена, режим фильтра — Invert.

0Что понадобится

1Установка расширения (unpacked)

  1. Скачать zip с главной и распаковать в отдельную папку.
    Либо собрать из исходников: npm install → npm run build (создаёт dist/).
  2. Chrome → chrome://extensions/ → включить Режим разработчика (справа вверху).
  3. «Загрузить распакованное расширение» → выбрать распакованную папку.
  4. Убедиться: расширение появилось, ошибок нет, иконка в тулбаре.
⚠️ Отключи другие dark-расширения (Dark Reader и т.п.) для docs.google.com и drive.google.com — иначе двойная инверсия. Это НЕ баг DocsNight (§10 п.3).

2Smoke-проверка

Две минуты. Если падает — дальше нет смысла.

#ДействиеОжидаемо
S1Открыть fixture-документ по прямой ссылке в новой вкладкеСтраница сразу тёмная, без белой вспышки
S2Посмотреть на UI: меню (Файл/Правка…), тулбар, левую панель, фонВсё в тёмной палитре, текст читаем
S2bОткрыть меню «Вставка», раскрыть селект зума (100%), начать печатать в поиске менюВыпадающие панели, значение селекта и подсказки — тёмные и читаемые (регрессия v0.2.0)
S3Посмотреть на «лист» документаТёмный фон, светлый текст (режим Invert)
S4Кликнуть иконку расширенияОткрывается popup с переключателем и радио Invert/Dim/None

Провал любого S1–S4 → критично: зафиксировать и остановиться.

3Happy path

HP-1 — Установка → мгновенная ценность

  1. Чистый профиль Chrome + установленный DocsNight.
  2. Открыть fixture по прямой ссылке.
  3. Ожидаемо: первый видимый кадр тёмный (нет белой вспышки даже на долю секунды); UI и лист документа тёмные, текст читаемый; левая панель «структура/вкладки» тоже тёмная, а не белый прямоугольник.

HP-2 — Полный цикл управления

  1. Открыт fixture, тема ON (Invert).
  2. Popup → Dim → лист приглушается (серый), инверсии нет, картинки в норме.
  3. Popup → выключить тему → страница мгновенно в оригинальных цветах, без перезагрузки.
  4. Popup → включить → снова тёмная.
  5. Alt+Shift+D → тема переключается (как toggle).
  6. Перезапустить браузер, открыть Docs → сохранилось последнее состояние.

4Режимы фильтра документа

РежимОжидаемо на «листе»Изображения
InvertЛист тёмный, текст светлый; цветные выделения узнаваемы (жёлтое ≈ жёлтое, синее ≈ синее)Выглядят «негативом» — ожидаемо
DimЛист приглушён (тускло-светлый), без инверсииСохраняют исходные цвета
NoneЛист в оригинале (белый), UI при этом остаётся тёмнымОригинал

Проверить: активен ровно один режим, изменение без перезагрузки, режим сохраняется после reload.

5Google Drive

  1. Открыть drive.google.com при включённой теме.
  2. Ожидаемо: шапка, левая панель (Мой диск / Корзина…), чипы фильтров, тулбар и список файлов — тёмные; имена файлов читаемы.
  3. Открыть предпросмотр изображения или PDF (двойной клик по файлу).
  4. Ожидаемо: рамка и панели предпросмотра тёмные, само изображение / страница PDF — в оригинальных цветах, не инвертированы.
  5. Выключить тему на вкладке Docs → перейти на вкладку Drive → Drive стал светлым (единый toggle).
  6. Открыть контекстное меню файла (ПКМ) и меню «Создать».
  7. Ожидаемо: меню тёмные; иконки типов файлов и аватары — в оригинальных цветах (регрессия v0.2.0).
v0.2.0: Drive темится инверсией всей страницы. Побочный эффект — нативно-тёмные элементы Drive (например, тост «Ваши файлы синхронизируются») становятся светлыми. Ожидаемо, не заводить (§10 п.6).

5аGoogle Sheets и списочные страницы новое в v0.3.0

  1. Открыть любую таблицу docs.google.com/spreadsheets/d/… при включённой теме.
  2. Ожидаемо: тёмные — шапка, меню, тулбар, строка формул вместе с полем имени ячейки, нижняя панель с ярлыками листов, боковые панели, всплывающие меню и пузыри-подсказки.
  3. Переключить режим фильтра в popup: Invert → Dim → None.
  4. Ожидаемо: сетка меняется так же, как лист документа в Docs (§4). Шапка и панели остаются тёмными во всех трёх режимах.
  5. Открыть docs.google.com/document/u/0/ и /spreadsheets/u/0/ (списки файлов).
  6. Ожидаемо: страница тёмная целиком, превью документов в списке — в оригинальных цветах.
  7. Открыть презентацию (/presentation/d/…) или форму (/forms/d/…).
  8. Ожидаемо: страница остаётся светлой, как без расширения. Это не баг — §10 п.7.
v0.3.0: инъекция расширена с /document/d/* на весь docs.google.com. Новых прав расширение при этом не запрашивает — хост и раньше был в host_permissions (§9, SEC-3).

6Синхронизация вкладок

  1. Открыть 3 вкладки: 2× Docs + 1× Drive, тема ON.
  2. В popup вкладки №1 выключить тему.
  3. Ожидаемо: все 3 вкладки становятся светлыми менее чем за ~1 секунду, без «залипших» полутёмных элементов.
  4. Быстро пощёлкать toggle 5 раз подряд → все вкладки сходятся к финальному состоянию, артефактов нет.

7Матрица окружений

Прогнать §2–§6 на каждой конфигурации, плюс все 3 filter-режима.

ОСChrome stableChrome beta
Windows☐☐
macOS☐☐
Linux☐☐

8Edge cases

EC-1 — Печать

  1. Тема ON, Invert, открыт fixture.
  2. Ctrl/Cmd+P → окно предпросмотра печати.
  3. Ожидаемо: документ в оригинальных цветах — тема и фильтры при печати отключаются.

EH-1 — Первый запуск / очистка данных

  1. chrome://settings → очистить данные сайта для docs.google.com (или новый профиль).
  2. Открыть Docs.
  3. Ожидаемо: тема применяется сразу (default ON), без ошибок в консоли (F12 → Console).

EH-3 — Деградация при «сломанных» селекторах для продвинутого QA

  1. Открыть Docs, F12 → Console.
  2. Симулировать поломку canary:
    document.querySelector('#docs-chrome')?.removeAttribute('id');
    document.querySelector('#docs-menubar')?.removeAttribute('id');
  3. Ожидаемо: UI-тема снимается целиком (никаких частично покрашенных элементов); в консоли ровно одно предупреждение [DocsNight] UI selectors mismatch… с версией theme-map; исходящих сетевых запросов — 0.

9Приватность и безопасность

Обязательный блок — провал здесь блокирует релиз.

SEC-1 — Ноль сетевых запросов

  1. F12 → вкладка Network, очистить лог.
  2. Выполнить: загрузка Docs, 3× toggle, смена фильтра, деградация (§8 EH-3).
  3. Ожидаемо: от расширения не уходит ни одного запроса (fetch / XHR / beacon / websocket).

SEC-3 — Минимум прав

  1. chrome://extensions/ → DocsNight → Подробности.
  2. Ожидаемо: только доступ к docs.google.com и drive.google.com + storage. Никаких «доступ ко всем сайтам», tabs, истории.

SEC-2 — Изоляция содержимого

Расширение не должно читать или логировать текст документа. Косвенная проверка: в Application → Local Storage для docs.google.com ключ docsnight:state содержит только {enabled, filterMode} — никакого текста документа или URL.

10Известные ограничения — это не баги

  1. Invert инвертирует изображения («негатив») — по природе canvas Docs. Решение — режим Dim или None.
  2. Совместная работа: тема видна только тебе; соавторы видят оригинал.
  3. Конфликт с другими dark-расширениями на docs/drive — отключить их для этих сайтов.
  4. Временная деградация UI при обновлениях Google — чинится в течение суток.
  5. Баннер «Войти / Запросить права» у документа, открытого анонимно — светлый; у залогиненного не появляется.
  6. Нативно-тёмные элементы Drive становятся светлыми (тост синхронизации) — следствие инверсии всей страницы Drive.
  7. Slides и Forms не темятся вообще (v0.3.0): карты селекторов для них нет, а покрасить половину интерфейса хуже, чем не красить.
  8. Картинки внутри самого документа в режиме Invert — негатив. Это п.1, но повторим отдельно: не регрессия v0.3.0, а природа canvas-рендеринга Docs. Решение отложено осознанно; обход для читателя — режим Dim или None.

11Шаблон баг-репорта

Заголовок: [DocsNight] <краткая суть>
Окружение: ОС + версия Chrome (stable/beta), версия расширения (manifest 0.3.1)
Поверхность: Docs / Drive | Режим: Invert / Dim / None | Тема: ON/OFF
Шаги воспроизведения:
  1. …
Ожидаемо: …
Фактически: …
Скриншот/скринкаст: (обязательно для визуальных)
Console (F12): текст ошибок/предупреждений, если есть
Network: были ли исходящие запросы от расширения (да/нет)
Частота: всегда / иногда / 1 раз

Блокеры: сеть ≠ 0; права шире storage + 2 host; «сломанная каша» вместо чистой деградации; белая вспышка при загрузке; нечитаемый текст.

12Definition of Done