test(wizard): add wizard tests + refactor to IWizardDraftRepository
- Extract IWizardDraftRepository interface for testability (NSubstitute cannot mock sealed classes; the codebase uses fake-style doubles instead). - Add step-transition, pool-slot, validation, cancel/back, and render-shape tests using FakeWizardDraftRepository and FakeWizardMessenger. - Fix wizard payload persistence bug: HandleCallbackAsync and HandleTextAsync now call SavePayload after ApplyChoice/ApplyText mutations, so subsequent LoadPayload calls see the user's progress. Previously, local WizardPayload mutations were discarded and the wizard reset on every step. - CommitCurrentPoolSlot now auto-creates a slot via EnsureCurrentPoolSlot when one is missing, so the PoolSlotCapacity → waitlist click is recoverable even if the user lands on the step without a slot.
This commit is contained in:
@@ -72,7 +72,7 @@ builder.Services.AddSingleton<GmRelay.Shared.Features.Sessions.CreateSession.Cre
|
||||
builder.Services.AddSingleton<GmRelay.Bot.Features.Sessions.CreateSession.CreateSessionHandler>();
|
||||
|
||||
// Wizard services (issue #111)
|
||||
builder.Services.AddSingleton<WizardDraftRepository>();
|
||||
builder.Services.AddSingleton<IWizardDraftRepository, WizardDraftRepository>();
|
||||
builder.Services.AddSingleton<ITelegramWizardMessenger, TelegramWizardMessenger>();
|
||||
builder.Services.AddSingleton<GameCreationWizard>();
|
||||
builder.Services.AddSingleton<IScheduleMessageUpdateLock, ScheduleMessageUpdateLock>();
|
||||
|
||||
Reference in New Issue
Block a user