public async Task GivenAFhirMediator_WhenCancelingExistingExportJobEncountersJobConflictException_ThenItWillBeRetried() { _retryCount = 3; var weakETags = new WeakETag[] { WeakETag.FromVersionId("1"), WeakETag.FromVersionId("2"), WeakETag.FromVersionId("3"), }; var jobRecord = CreateExportJobRecord(OperationStatus.Queued); _fhirOperationDataStore.GetExportJobByIdAsync(JobId, _cancellationToken) .Returns( _ => CreateExportJobOutcome(CreateExportJobRecord(OperationStatus.Queued), weakETags[0]), _ => CreateExportJobOutcome(CreateExportJobRecord(OperationStatus.Queued), weakETags[1]), _ => CreateExportJobOutcome(CreateExportJobRecord(OperationStatus.Queued), weakETags[2])); SetupOperationDataStore(0, _ => throw new JobConflictException()); SetupOperationDataStore(1, _ => throw new JobConflictException()); SetupOperationDataStore(2, _ => CreateExportJobOutcome(jobRecord, WeakETag.FromVersionId("123"))); // No error should be thrown. CancelExportResponse response = await _mediator.CancelExportAsync(JobId, _cancellationToken); Assert.Equal(HttpStatusCode.Accepted, response.StatusCode); void SetupOperationDataStore(int index, Func <NSubstitute.Core.CallInfo, ExportJobOutcome> returnThis) { _fhirOperationDataStore.UpdateExportJobAsync(Arg.Any <ExportJobRecord>(), weakETags[index], Arg.Any <CancellationToken>()) .Returns(returnThis); } }
private async Task <ExportJobOutcome> SetupAndExecuteCancelExportAsync(OperationStatus operationStatus, HttpStatusCode expectedStatusCode) { ExportJobOutcome outcome = SetupExportJob(operationStatus); CancelExportResponse response = await _mediator.CancelExportAsync(JobId, _cancellationToken); Assert.NotNull(response); Assert.Equal(expectedStatusCode, response.StatusCode); return(outcome); }
public async Task <IActionResult> CancelExport(string idParameter) { CancelExportResponse response = await _mediator.CancelExportAsync(idParameter, HttpContext.RequestAborted); return(new ExportResult(response.StatusCode)); }