Почистить комментарии от упоминаний процесса

Удалены <remarks>, <summary> сжаты до короткой фразы, вырезаны
ссылки на Task/Ruling/этап/python/прототип; //-комментарии со ссылками
на процесс удалены; то же в .proto. Правила обновлены в
docs/spec/Код-стайл-Дейл.md. Строк комментариев 27210 -> ~19100.
This commit is contained in:
Rustam Khalimov
2026-09-11 13:39:39 +03:00
parent 5f5538d33b
commit b053d58335
902 changed files with 3902 additions and 12074 deletions
@@ -9,18 +9,7 @@ using Microsoft.AspNetCore.Builder;
namespace Deal.Ai.Tests.Grpc;
/// <summary>
/// Интеграционные тесты хоста ai-service (каркас Task 4 + логика Task 8).
///
/// Хост поднимается В процессе теста (Kestrel HTTP/2, эфемерный порт) через AiServiceHost.Create —
/// ту же сборку хоста, что использует Program.cs, поэтому тесты покрывают реальную настройку
/// Kestrel/AddGrpc/health, а не её копию. Проверки: gRPC-health → SERVING; ServiceTokenInterceptor
/// (Ruling 1): запрос без токена и с неверным токеном → UNAUTHENTICATED; верный токен проходит к
/// методу (реализация Task 8: пустой запрос без конфига провайдера → INVALID_ARGUMENT); при
/// незаданном DEAL_SERVICE_TOKEN — fail-closed.
///
/// Токен интерцептор читает из конфигурации (env DEAL_SERVICE_TOKEN) — тесты выставляют env на время
/// сценария и восстанавливают исходное значение. Все тесты класса живут в одном процессе/классе,
/// чтобы env и свободные порты не конфликтовали (xunit исполняет методы класса последовательно).
/// Интеграционные тесты хоста ai-service.
/// </summary>
public sealed class AiServiceHostTests
{
@@ -33,15 +22,13 @@ public sealed class AiServiceHostTests
// Токен сценариев теста.
private const string ValidToken = "task4-test-token";
// Id тенанта запросов (доходит до метода при верном токене; Ruling 1).
private const string TenantId = "tenant-test";
// Deadline RPC-вызовов теста (сек).
private const int RpcDeadlineSeconds = 10;
/// <summary>
/// HealthCheck (grpc.health.v1.Health/Check) отвечает SERVING — хост поднялся, gRPC-инфраструктура
/// и health-сервис работают (Ruling 12; health освобождён от service-token).
/// HealthCheck (grpc.health.v1.Health/Check) отвечает SERVING — хост поднялся, gRPC-инфраструктура и health-сервис работают.
/// </summary>
[Fact]
public async Task HealthCheck_ReturnsServing()
@@ -60,7 +47,7 @@ public sealed class AiServiceHostTests
}
/// <summary>
/// Запрос без metadata «service-token» → UNAUTHENTICATED (Ruling 1).
/// Запрос без metadata «service-token» → UNAUTHENTICATED.
/// </summary>
[Fact]
public async Task Classify_WithoutToken_IsUnauthenticated()
@@ -72,7 +59,7 @@ public sealed class AiServiceHostTests
}
/// <summary>
/// Запрос с неверным токеном → UNAUTHENTICATED (Ruling 1).
/// Запрос с неверным токеном → UNAUTHENTICATED.
/// </summary>
[Fact]
public async Task Classify_WithWrongToken_IsUnauthenticated()
@@ -84,9 +71,7 @@ public sealed class AiServiceHostTests
}
/// <summary>
/// Верный токен проходит интерцептор к методу — кодогенерация и маппинг сервиса работают:
/// пустой запрос (без конфига провайдера) доходит до реализации Classify (Task 8) и отклоняется
/// валидацией INVALID_ARGUMENT, а не UNIMPLEMENTED.
/// Верный токен проходит интерцептор к методу — кодогенерация и маппинг сервиса работают
/// </summary>
[Fact]
public async Task Classify_WithValidToken_ReachesServiceAndValidatesConfig()
@@ -98,9 +83,7 @@ public sealed class AiServiceHostTests
}
/// <summary>
/// Fail-closed (шаблон Task 3): DEAL_SERVICE_TOKEN не задан — Deal-RPC отклоняется всегда,
/// в т.ч. запрос с «пустым» значением metadata (без гарда сравнение «» == «» пропустило бы его);
/// health при этом продолжает отвечать SERVING (инфраструктурный liveness не ломается).
/// Fail-closed: DEAL_SERVICE_TOKEN не задан — Deal-RPC отклоняется всегда, в т.ч.
/// </summary>
[Fact]
public async Task WithoutConfiguredToken_DealRpcFailsClosed_HealthStillServing()
@@ -138,7 +121,6 @@ public sealed class AiServiceHostTests
// Вызывает Classify и проверяет, что сервер ответил ожидаемым кодом статуса.
// Запрос несёт полный metadata (service-token + tenant-id), чтобы верный токен доходил
// до реализации метода (заглушки больше нет — Task 8), а не падал на tenant-проверке.
// channel: Канал к хосту ai-service.
// tokenHeader: Значение metadata «service-token» либо null (нет заголовка).
// expected: Ожидаемый StatusCode.