public async Task Should_Deactivate_Subscription_If_Reached_To_Max_Fail_Count_Async() { var(subscription, data, predicate) = await InitializeTestCase(AppWebhookDefinitionNames.Test); var webhooksConfiguration = Resolve <IWebhooksConfiguration>(); webhooksConfiguration.IsAutomaticSubscriptionDeactivationEnabled = true; webhooksConfiguration.MaxConsecutiveFailCountBeforeDeactivateSubscription = 1; var webhookSenderSubstitute = RegisterFake <IWebhookSender>(); webhookSenderSubstitute.When(w => w.SendWebhook(Arg.Any <WebhookSenderArgs>())) .Do(x => throw new Exception() ); var webhookSendAttemptStore = RegisterFake <IWebhookSendAttemptStore>(); webhookSendAttemptStore .HasXConsecutiveFail(Arg.Any <int?>(), Arg.Any <Guid>(), Arg.Any <int>()) .Returns(true); var webhookSubscriptionManager = Resolve <IWebhookSubscriptionManager>(); _backgroundJobManagerSubstitute.When(m => m.EnqueueAsync <WebhookSenderJob, WebhookSenderArgs>(Arg.Any <WebhookSenderArgs>())) .Do((callback) => { var args = callback.Args(); args[0].ShouldBeAssignableTo <WebhookSenderArgs>("Argument is not WebhookSenderArgs"); var webhookSenderJob = Resolve <WebhookSenderJob>(); webhookSenderJob.Execute(args[0] as WebhookSenderArgs); var sub = webhookSubscriptionManager.Get(subscription.Id); sub.IsActive.ShouldBeFalse(); //after it get error MaxConsecutiveFailCountBeforeDeactivateSubscription times(in our case it is 1) subscription becomes deactivate }); await webhookSubscriptionManager.AddOrUpdateSubscriptionAsync(subscription); var storedSubscription = webhookSubscriptionManager.Get(subscription.Id); storedSubscription.IsActive.ShouldBeTrue();//subscription is active await _webhookPublisher.PublishAsync(AppWebhookDefinitionNames.Test, data, subscription.TenantId); await _backgroundJobManagerSubstitute.Received() .EnqueueAsync <WebhookSenderJob, WebhookSenderArgs>(Arg.Is <WebhookSenderArgs>(w => predicate(w))); webhookSenderSubstitute.Received().SendWebhook(Arg.Any <WebhookSenderArgs>()); }