private void VerifyRepositories(IWebhookEventEntity @event, string requestDump, WebhookResult requestResult, TimeSpan requestTime, Instant?nextAttempt) { A.CallTo(() => webhookEventRepository.TraceSendingAsync(@event.Id)) .MustHaveHappened(); A.CallTo(() => webhookEventRepository.TraceSendingAsync(@event.Id)) .MustHaveHappened(); A.CallTo(() => webhookEventRepository.TraceSentAsync(@event.Id, requestDump, requestResult, requestTime, nextAttempt)) .MustHaveHappened(); A.CallTo(() => webhookRepository.TraceSentAsync(@event.Job.WebhookId, requestResult, requestTime)) .MustHaveHappened(); }
private async Task MakeRequestAsync(IWebhookEventEntity @event) { try { var response = await webhookSender.SendAsync(@event.Job); Instant?nextCall = null; if (response.Result != WebhookResult.Success) { var now = clock.GetCurrentInstant(); switch (@event.NumCalls) { case 0: nextCall = now.Plus(Duration.FromMinutes(5)); break; case 1: nextCall = now.Plus(Duration.FromHours(1)); break; case 2: nextCall = now.Plus(Duration.FromHours(5)); break; case 3: nextCall = now.Plus(Duration.FromHours(6)); break; } } await Task.WhenAll( webhookRepository.TraceSentAsync(@event.Job.WebhookId, response.Result, response.Elapsed), webhookEventRepository.TraceSentAsync(@event.Id, response.Dump, response.Result, response.Elapsed, nextCall)); } catch (Exception ex) { log.LogError(ex, w => w .WriteProperty("action", "SendWebhookEvent") .WriteProperty("status", "Failed")); throw; } }