public async Task Execute(LandmarkRunTriggerModel command, ScheduledRunSettingsModel scheduledRunSettings = null) { var notification = new LandmarkRunStatusNotification(); try { var res = await _landmarkRunService.TriggerRunAsync(command, scheduledRunSettings) .ConfigureAwait(false); notification.runId = res.RunId; notification.externalRunId = res.ExternalRunId; notification.status = res.Status.ToString(); } catch (Exception ex) { notification.errorMessage = ex.Message; } finally { var date = _clock.GetCurrentInstant().ToDateTimeUtc(); notification.date = date; notification.time = date.TimeOfDay; _runStatusChangedNotifier.Notify(notification); } }
public void TriggerRunWhenCalledWithValidModelThenShouldNotThrowException() { var scenarioId = Guid.NewGuid(); var command = new LandmarkRunTriggerModel { ScenarioId = scenarioId }; _ = _mockRunRepository.Setup(x => x.FindByScenarioId(scenarioId)).Returns(GetRunWithScenario(scenarioId)); _landmarkRunService.Awaiting(async x => await x.TriggerRunAsync(command).ConfigureAwait(false)).Should().NotThrow(); }
public async Task TriggerRunWhenCalledWithValidModelThenShouldCallLandmarkBookingApi() { var scenarioId = Guid.NewGuid(); var command = new LandmarkRunTriggerModel { ScenarioId = scenarioId }; _ = _mockRunRepository.Setup(x => x.FindByScenarioId(scenarioId)).Returns(GetRunWithScenario(scenarioId)); await _landmarkRunService.TriggerRunAsync(command).ConfigureAwait(false); _mockLandmarkApi.Verify(x => x.TriggerRunAsync(It.IsAny <LandmarkBookingRequest>(), null), Times.Once); }
/// <inheritdoc /> public async Task <LandmarkTriggerRunResult> TriggerRunAsync(LandmarkRunTriggerModel command, ScheduledRunSettingsModel scheduledRunSettings = null) { if (command is null) { throw new ArgumentNullException(nameof(command)); } RaiseInfo($"Starting Landmark run trigger process for ScenarioId: {command.ScenarioId}"); var run = command.ScenarioId != Guid.Empty ? _runRepository.FindByScenarioId(command.ScenarioId) : default; if (run is null) { throw new InvalidOperationException($"Run for scenario {command.ScenarioId} was not found"); } var scenario = run.Scenarios.SingleOrDefault(s => s.Id == command.ScenarioId); if (scenario is null) { throw new InvalidOperationException($"Scenario {command.ScenarioId} was not found"); } try { var request = new LandmarkBookingRequest { InputFiles = _landmarkAutoBookPayloadProvider.GetFiles(run.Id, command.ScenarioId).ToList() }; var autoBookTriggerResult = await _landmarkApi.TriggerRunAsync(request, scheduledRunSettings).ConfigureAwait(false); scenario.ExternalRunInfo = new ExternalRunInfo { ExternalRunId = autoBookTriggerResult.ProcessingId, ExternalStatus = scheduledRunSettings is null ? ExternalScenarioStatus.Accepted : ExternalScenarioStatus.Scheduled, ExternalStatusModifiedDate = _clock.GetCurrentInstant().ToDateTimeUtc(), QueueName = scheduledRunSettings?.QueueName, Priority = scheduledRunSettings?.Priority, ScheduledDateTime = scheduledRunSettings?.DateTime, Comment = scheduledRunSettings?.Comment, CreatorId = scheduledRunSettings?.CreatorId, CreatedDateTime = _clock.GetCurrentInstant().ToDateTimeUtc() }; _runRepository.Update(run); _runRepository.SaveChanges(); RaiseInfo($"Landmark run triggered for Run: {run.Id} and Scenario: {command.ScenarioId}. Processing id: {autoBookTriggerResult.ProcessingId}"); return(new LandmarkTriggerRunResult { RunId = run.Id, ExternalRunId = autoBookTriggerResult.ProcessingId, Status = scheduledRunSettings is null ? ExternalScenarioStatus.Accepted : ExternalScenarioStatus.Scheduled }); }