Перевести тестовые фейки на моки NSubstitute #1
Notifications
Total Time Spent: 19 hours 49 minutes
rust
19 hours 49 minutes
No due date set.
Dependencies
No dependencies set.
Reference: rust/Deal#1
Reference in New Issue
Block a user
Контекст
Правило владельца (§11 код-стайла): моки — через NSubstitute, новые hand-written фейк-классы не заводить. NSubstitute 6.1.0 уже подключён ко всем тест-проектам, эталон миграции сделан —
Support/TestHashers.New()(FakePasswordHasher удалён). Осталось 27 фейков; в скобках — число файлов-потребителей.Что сделать
Recording*/Harness* (gRPC-харнессы) — оставить: это тестовые хелперы, исключение по §11.
Критерии приёмки
Затрагивает
Источники
docs/superpowers/backlog.md(TD-TESTS-NSUBSTITUTE), §11docs/spec/Код-стайл-Дейл.mdМиграция тестовых фейков на NSubstitute (TD-TESTS-NSUBSTITUTE)to Перевести тестовые фейки на моки NSubstituteВзято в работу (2026-09-12). Порядок — по чек-листу, от мелких к крупным; по мере миграции фейка — чек-бокс в описании. Верификация после каждого шага: сборка 5 sln + тесты.
Готово: FakeDiscoveryPacer, FakeRatesSource, FakeRatesListener (3/27). NSubstitute-конфигурация повторяет семантику фейков, проверки счётчиков заменены на Received/DidNotReceive. Тесты зелёные; единичный фейл TelegramIngressServiceTests — гонка порта харнесса (TD-TEST-HARNESS), не воспроизводится. Дальше — FakeTenantRegistry, FakeAiTools, FakeGlobalSettingsStore.
Прогресс 9/27: + FakeTenantProvisioner (вместе с FailingTenantProvisioner — сценарий сбоя переехал в параметр хелпера) и FakeRateLimitCounterStore. Паттерн для stateful-сторов устоялся: хелпер держит состояние и раздаёт NSubstitute-подставку (.Store/.Classifier), ассерты состояния не меняются. Дальше — FakeTelegramGateway (5), FakeInviteStore (7), FakeTelegramStore (7), FakeDiscoveryStore (7), FakeTenantRepository (7).
11 фейков удалено. Бонусом переехал FakeDiscoveryGateway — он не попал в исходный чек-лист (второй ITelegramGateway с discovery-поверхностью: Search/Info/ReadForEval/Join + NotSupportedException на неожиданных методах). Дальше — пяти-семи-файловые: FakeInviteStore, FakeTelegramStore, FakeDiscoveryStore, FakeTenantRepository.
Смена окончена (2026-09-13, ночь). Прогресс: 24/27 фейков переведено — пейсер, rates×2, registry,
AiTools, GlobalSettings, AiClassifier, Provisioner+RateLimit, TelegramGateway+DiscoveryGateway, InviteStore,
TelegramStore, DiscoveryStore, SecretCipher, FileStorage, TenantStore, TokenUsageEventStore, PipelineStore,
AuditLogStore, OperatorAuthStore, TenantLimitStore, MlClient, SettingsStore (42 файла!).
Тесты 1340/1340 зелёные, каждый фейк — отдельным коммитом в ветке t1_NSubstitute_tests (HEAD
d51d88e).Осталось: FakeMlLearningStore (5 файлов — начал, отложено в stash из-за 4 красных тестов, починю завтра)
и FakeKanjStore (21 файл, 45 членов — самый крупный). После них — MR в main.
Параллельно завтра: задача #12 (фабрики объектов) — уточнение владельца принято (статичные хэлперы не трогаем).
MR: #13