Явные реализации интерфейсов в проде
TenantContext, LocalTelegramGateway, DefaultPasswordHasher и WTelegramSessionClient переведены на явные реализации; типы в тестах приведены к ITenantContext.
This commit is contained in:
@@ -39,7 +39,7 @@ public sealed class DiscoveryWorkerSchedulerTests
|
||||
TestDiscoveryStore StoreB,
|
||||
TestDiscoveryGateway GatewayA,
|
||||
TestDiscoveryGateway GatewayB,
|
||||
TenantContext TenantContext,
|
||||
ITenantContext TenantContext,
|
||||
ListLogger Logs);
|
||||
|
||||
[Fact]
|
||||
@@ -91,7 +91,7 @@ public sealed class DiscoveryWorkerSchedulerTests
|
||||
private static Context CreateContext()
|
||||
{
|
||||
var tenants = new TestTenantRepository(Tenant(TenantA), Tenant(TenantB));
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
var storeA = new TestDiscoveryStore();
|
||||
var storeB = new TestDiscoveryStore();
|
||||
var settingsA = new TestSettingsStore();
|
||||
|
||||
@@ -41,7 +41,7 @@ public sealed class MlOutboxFlushSchedulerTests
|
||||
{
|
||||
var store = new TestMlLearningStore();
|
||||
SeedRows(store, count: 25, prefix: "a");
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
port,
|
||||
new TestTenantRepository(Tenant(TenantA)),
|
||||
@@ -67,7 +67,7 @@ public sealed class MlOutboxFlushSchedulerTests
|
||||
service.TrainUnavailable = true;
|
||||
var store = new TestMlLearningStore();
|
||||
SeedRows(store, count: 5, prefix: "a");
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
port,
|
||||
new TestTenantRepository(Tenant(TenantA)),
|
||||
@@ -95,7 +95,7 @@ public sealed class MlOutboxFlushSchedulerTests
|
||||
SeedRows(storeA, count: 12, prefix: "a");
|
||||
var storeB = new TestMlLearningStore();
|
||||
SeedRows(storeB, count: 3, prefix: "b");
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
port,
|
||||
new TestTenantRepository(Tenant(TenantA), Tenant(TenantB)),
|
||||
@@ -121,7 +121,7 @@ public sealed class MlOutboxFlushSchedulerTests
|
||||
{
|
||||
var store = new TestMlLearningStore();
|
||||
SeedRows(store, count: 105, prefix: "a");
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
port,
|
||||
new TestTenantRepository(Tenant(TenantA)),
|
||||
@@ -148,7 +148,7 @@ public sealed class MlOutboxFlushSchedulerTests
|
||||
private static ServiceProvider BuildProvider(
|
||||
int port,
|
||||
TestTenantRepository tenants,
|
||||
TenantContext tenantContext,
|
||||
ITenantContext tenantContext,
|
||||
Dictionary<Guid, TestMlLearningStore> storesByTenant)
|
||||
{
|
||||
var services = new ServiceCollection();
|
||||
|
||||
@@ -47,7 +47,7 @@ public sealed class PipelineWorkerSchedulerTests
|
||||
TestKanjStore KanjB,
|
||||
SseSubscription SubscriptionB,
|
||||
PipelinePumpGate PumpGate,
|
||||
TenantContext TenantContext,
|
||||
ITenantContext TenantContext,
|
||||
ListLogger Logs);
|
||||
|
||||
// ─── Цикл: pump каждого тенанта в собственном scope + new_card ─────────
|
||||
@@ -149,7 +149,7 @@ public sealed class PipelineWorkerSchedulerTests
|
||||
private static Context CreateContext(bool withThrowingQueueReadA = false)
|
||||
{
|
||||
var tenants = new TestTenantRepository(Tenant(TenantA), Tenant(TenantB));
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
var pipelineA = new TestPipelineStore(throwOnList: withThrowingQueueReadA);
|
||||
var pipelineB = new TestPipelineStore();
|
||||
var kanjA = new TestKanjStore();
|
||||
|
||||
@@ -46,7 +46,7 @@ public sealed class StorageTickSchedulerTests
|
||||
TestKanjStore storeB = StoreWithExpiredInboxCard("l_b_old");
|
||||
var settings = new TestSettingsStore();
|
||||
var tenants = new TestTenantRepository(Tenant(TenantA), Tenant(TenantB));
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(tenants, tenantContext, storeA, storeB, settings);
|
||||
|
||||
SseBroker broker = provider.GetRequiredService<SseBroker>();
|
||||
@@ -74,7 +74,7 @@ public sealed class StorageTickSchedulerTests
|
||||
var storeB = new TestKanjStore();
|
||||
storeB.SeedCard(Card("l_b_fresh", KanbanColumns.Inbox, ReceivedAtMsAgo(TimeSpan.FromHours(1))));
|
||||
var settings = new TestSettingsStore();
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
new TestTenantRepository(Tenant(TenantA), Tenant(TenantB)),
|
||||
tenantContext,
|
||||
@@ -100,7 +100,7 @@ public sealed class StorageTickSchedulerTests
|
||||
{
|
||||
// У тенанта A настройки падают (имитация сбоя схемы/БД) — тик A логирует ошибку, B обрабатывается.
|
||||
TestKanjStore storeB = StoreWithExpiredInboxCard("l_b_old");
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
var settingsByTenant = new Dictionary<Guid, ISettingsStore>
|
||||
{
|
||||
[TenantA] = new ThrowingSettingsStore(),
|
||||
@@ -133,7 +133,7 @@ public sealed class StorageTickSchedulerTests
|
||||
[Fact]
|
||||
public async Task RunCycle_TenantListFailure_DoesNotThrow()
|
||||
{
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
new ThrowingTenantRepository(),
|
||||
tenantContext,
|
||||
@@ -152,7 +152,7 @@ public sealed class StorageTickSchedulerTests
|
||||
{
|
||||
var kanjStore = new TestKanjStore();
|
||||
var settings = new TestSettingsStore();
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
var pipelineStoreA = new TestPipelineStore();
|
||||
long nowMs = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
|
||||
pipelineStoreA.SeedRejected(Rejected("r_old_a", (long)(nowMs - TimeSpan.FromDays(4).TotalMilliseconds)));
|
||||
@@ -186,7 +186,7 @@ public sealed class StorageTickSchedulerTests
|
||||
cardStoreA.SeedCard(HoldCard("c_a_future", title: "Будущий", reminderAtMs: NowMs() + 60_000));
|
||||
cardStoreA.SeedCard(HoldCard("c_a_work", stage: "work", title: "В работе", reminderAtMs: NowMs() - 60_000));
|
||||
var cardStoreB = new TestKanjStore();
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
new TestTenantRepository(Tenant(TenantA), Tenant(TenantB)).Repository,
|
||||
tenantContext,
|
||||
@@ -221,7 +221,7 @@ public sealed class StorageTickSchedulerTests
|
||||
cardStoreA.SeedCard(HoldCard("c_past", title: "Старое", reminderAtMs: NowMs() - 60_000));
|
||||
var settingsA = new TestSettingsStore();
|
||||
settingsA.Preload(SettingsKeys.RemindersEnabled, "false");
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
new TestTenantRepository(Tenant(TenantA)).Repository,
|
||||
tenantContext,
|
||||
@@ -247,7 +247,7 @@ public sealed class StorageTickSchedulerTests
|
||||
// и тик A завершается, тенант B обрабатывается (автоархив + тост) — проход жив.
|
||||
var cardStoreA = new TestKanjStore(throwOnDueReminders: true);
|
||||
TestKanjStore storeB = StoreWithExpiredInboxCard("l_b_old");
|
||||
var tenantContext = new TenantContext();
|
||||
ITenantContext tenantContext = new TenantContext();
|
||||
await using ServiceProvider provider = BuildProvider(
|
||||
new TestTenantRepository(Tenant(TenantA), Tenant(TenantB)).Repository,
|
||||
tenantContext,
|
||||
@@ -280,7 +280,7 @@ public sealed class StorageTickSchedulerTests
|
||||
// Возвращает: Провайдер с зарегистрированными сервисами теста.
|
||||
private static ServiceProvider BuildProvider(
|
||||
TestTenantRepository tenants,
|
||||
TenantContext tenantContext,
|
||||
ITenantContext tenantContext,
|
||||
TestKanjStore storeA,
|
||||
TestKanjStore storeB,
|
||||
TestSettingsStore settings)
|
||||
@@ -301,7 +301,7 @@ public sealed class StorageTickSchedulerTests
|
||||
// Возвращает: Провайдер с зарегистрированными сервисами теста.
|
||||
private static ServiceProvider BuildProvider(
|
||||
ITenantRepository tenants,
|
||||
TenantContext tenantContext,
|
||||
ITenantContext tenantContext,
|
||||
Dictionary<Guid, TestKanjStore> storesByTenant,
|
||||
Dictionary<Guid, ISettingsStore> settingsByTenant,
|
||||
Dictionary<Guid, TestPipelineStore>? pipelineStoresByTenant = null)
|
||||
|
||||
Reference in New Issue
Block a user