Задания, отчёты и патчи, лежавшие в C:\Users\Ochenstarik\projects и в домашней папке, перенесены в agents/. Разложено по агентам там, где имя файла позволяло определить автора; остальное — в _salvage-2026-08-18/ и разбирается вручную. Патчи в notes/salvage-2026-08-18/ — незакоммиченная работа из брошенных рабочих копий: она существовала только на диске. Тяжёлое (релизные архивы, инсталляторы, наборы данных) в репозиторий не попало: оно лежит рядом, в Agent_projects/_archive и Agent_projects/_data. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
47 lines
3.5 KiB
Markdown
47 lines
3.5 KiB
Markdown
# Antigravity: покрыть тестом отдачу консоли из ресурсов сборки
|
||
|
||
## Репозиторий
|
||
|
||
- https://github.com/ochenstarik-ui/server-monitor-manager
|
||
- Ветка: `antigravity/web-console`, открытый PR **#59**
|
||
- Работа делается **в этом же PR**, новый не открывать
|
||
- `main` защищён: PR обязателен, обязательны статусы `build-and-test` и `build`
|
||
|
||
## Задача
|
||
|
||
Одна проверка. Ничего в поведении консоли менять не нужно.
|
||
|
||
`GetWebConsoleAsset` в `src/ServerMonitorManager.Control/Program.cs` берёт файл из двух источников по очереди:
|
||
|
||
1. с диска, по пути `IWebHostEnvironment.WebRootPath`;
|
||
2. если файла там нет — из ресурсов сборки, через `GetManifestResourceNames()` и поиск по `EndsWith(fileName)`.
|
||
|
||
Тесты поднимают хост в процессе, где `WebRootPath` существует и файлы лежат на диске. Значит проверяется **первая** ветка.
|
||
|
||
Control публикуется с `PublishSingleFile=true`, каталога `wwwroot` рядом с исполняемым файлом на сервере нет. Значит на настоящей машине работает **вторая** ветка — та, которую не проверяет ничто.
|
||
|
||
## Что сделать
|
||
|
||
Добавить в `tests/ServerMonitorManager.Control.Tests/WebConsoleTests.cs` тест, который поднимает хост с несуществующим или пустым `WebRootPath` и убеждается, что при обращении с сертификатом роли `Operator`:
|
||
|
||
- `/`, `/index.html`, `/style.css` и `/app.js` отвечают кодом 200;
|
||
- `Content-Type` соответствует типу файла;
|
||
- тело ответа непустое и содержит опознаваемый фрагмент: для HTML — предупреждение о сверке отпечатка, для JS — обращение к `/api/v1/control/agents`.
|
||
|
||
Побочная польза, ради которой это и стоит делать: тест зафиксирует соглашение об именах ресурсов. Поиск идёт через `EndsWith(fileName)`, поэтому переименование каталога `wwwroot` или смена схемы имён сломает отдачу консоли молча, без ошибки сборки.
|
||
|
||
## Границы
|
||
|
||
**Не трогать:** `deploy/**`, `.github/workflows/linux-*.yml`, `.github/workflows/release-verification.yml`, `tests/release-verification/**`, `tests/bootstrap/**`.
|
||
|
||
Ваша область: `tests/ServerMonitorManager.Control.Tests/**`. Если для подмены `WebRootPath` потребуется правка в `src/ServerMonitorManager.Control/**` — допустимо, но опишите зачем.
|
||
|
||
## Критерий приёмки
|
||
|
||
- тест поднимает хост без каталога `wwwroot` на диске и получает все четыре ресурса;
|
||
- существующие проверки ролей продолжают проходить;
|
||
- CI зелёный, PR не смержен до зелёного.
|
||
|
||
## Отчёт
|
||
|
||
В описании PR. Отдельным файлом отчёт не является.
|