/// <summary> /// Unmarshaller the response from the service to the response class. /// </summary> /// <param name="context"></param> /// <returns></returns> public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context) { DeleteResourceResponse response = new DeleteResourceResponse(); return(response); }
public async Task GivenMultipleMatchingResources_WhenDeletingConditionallyWithMultipleFlag_TheServerShouldDeleteSuccessfully() { var mockResultEntry1 = new SearchResultEntry(CreateMockResourceWrapper(Samples.GetDefaultObservation().UpdateId(Guid.NewGuid().ToString()), false)); var mockResultEntry2 = new SearchResultEntry(CreateMockResourceWrapper(Samples.GetDefaultObservation().UpdateId(Guid.NewGuid().ToString()), false)); ConditionalDeleteResourceRequest message = SetupConditionalDelete( KnownResourceTypes.Observation, DefaultSearchParams, hardDelete: false, count: 100, mockResultEntry1, mockResultEntry2); DeleteResourceResponse result = await _mediator.Send(message); Assert.NotNull(result); Assert.Equal(2, result.ResourcesDeleted); await _fhirDataStore.Received(2).UpsertAsync( Arg.Is <ResourceWrapper>(x => x.IsDeleted), Arg.Any <WeakETag>(), true, true, Arg.Any <CancellationToken>()); }
/// <summary> /// Unmarshaller the response from the service to the response class. /// </summary> /// <param name="context"></param> /// <returns></returns> public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context) { DeleteResourceResponse response = new DeleteResourceResponse(); return response; }
public async Task GivenNoExistingResources_WhenDeletingConditionally_TheServerShouldReturn() { ConditionalDeleteResourceRequest message = SetupConditionalDelete(KnownResourceTypes.Observation, DefaultSearchParams); DeleteResourceResponse result = await _mediator.Send(message); Assert.Equal(0, result.ResourcesDeleted); }
public async Task <IActionResult> ConditionalDelete(string typeParameter, [FromQuery] bool hardDelete, [FromQuery(Name = KnownQueryParameterNames.Count)] int?maxDeleteCount) { IReadOnlyList <Tuple <string, string> > conditionalParameters = GetQueriesForSearch(); DeleteResourceResponse response = await _mediator.Send(new ConditionalDeleteResourceRequest(typeParameter, conditionalParameters, hardDelete ? DeleteOperation.HardDelete : DeleteOperation.SoftDelete, maxDeleteCount.GetValueOrDefault(1)), HttpContext.RequestAborted); if (maxDeleteCount.HasValue) { Response.Headers.Add(KnownHeaders.ItemsDeleted, (response?.ResourcesDeleted ?? 0).ToString(CultureInfo.InvariantCulture)); } return(FhirResult.NoContent().SetETagHeader(response?.WeakETag)); }
public async Task GivenANonExistingResourceToDeleteRequest_WhenHandled_ThenTheResponseShouldHaveANullWeakETag(bool hardDelete) { var repository = Substitute.For <IFhirRepository>(); var handler = new DeleteResourceHandler(repository); var resourceId = Guid.NewGuid().ToString(); var deletedResourceKey = new ResourceKey("Observation", resourceId); repository.DeleteAsync(Arg.Any <ResourceKey>(), hardDelete).Returns(deletedResourceKey); DeleteResourceResponse response = await handler.Handle( new DeleteResourceRequest("Observation", resourceId, hardDelete), CancellationToken.None); await repository.Received().DeleteAsync(Arg.Any <ResourceKey>(), hardDelete); Assert.Null(response.WeakETag); }
public async Task GivenADeleteResourceRequest_WhenHandled_ThenTheResponseShouldHaveTheDeletedVersion() { var repository = Substitute.For <IFhirRepository>(); var handler = new DeleteResourceHandler(repository); var resourceId = Guid.NewGuid().ToString(); var deletedResourceKey = new ResourceKey("Observation", resourceId, Guid.NewGuid().ToString()); repository.DeleteAsync(Arg.Any <ResourceKey>(), false).Returns(deletedResourceKey); DeleteResourceResponse response = await handler.Handle( new DeleteResourceRequest("Observation", resourceId, false), CancellationToken.None); await repository.Received().DeleteAsync(Arg.Any <ResourceKey>(), false); Assert.Equal(deletedResourceKey.VersionId, response.WeakETag.VersionId); }
public async Task GivenADeleteResourceRequest_WhenDeletingAResourceOtherThanSearchParameter_ThenNoCallToDeleteParameterMade() { var resource = Samples.GetDefaultObservation().UpdateId("id1"); var key = new ResourceKey("Observation", "id1"); var request = new DeleteResourceRequest(key, DeleteOperation.SoftDelete); var wrapper = CreateResourceWrapper(resource, false); _fhirDataStore.GetAsync(key, Arg.Any <CancellationToken>()).Returns(wrapper); var response = new DeleteResourceResponse(key); var behavior = new DeleteSearchParameterBehavior <DeleteResourceRequest, DeleteResourceResponse>(_searchParameterOperations, _fhirDataStore); await behavior.Handle(request, CancellationToken.None, async() => await Task.Run(() => response)); // Ensure for non-SearchParameter, that we do not call Add SearchParameter await _searchParameterOperations.DidNotReceive().DeleteSearchParameterAsync(Arg.Any <RawResource>()); }
/// <summary> /// Unmarshaller the response from the service to the response class. /// </summary> /// <param name="context"></param> /// <returns></returns> public override AmazonWebServiceResponse Unmarshall(JsonUnmarshallerContext context) { DeleteResourceResponse response = new DeleteResourceResponse(); context.Read(); int targetDepth = context.CurrentDepth; while (context.ReadAtDepth(targetDepth)) { if (context.TestExpression("ProgressEvent", targetDepth)) { var unmarshaller = ProgressEventUnmarshaller.Instance; response.ProgressEvent = unmarshaller.Unmarshall(context); continue; } } return(response); }
public async Task <IActionResult> Delete(string typeParameter, string idParameter, [FromQuery] bool hardDelete) { string policy = PolicyNames.WritePolicy; if (hardDelete) { policy = PolicyNames.HardDeletePolicy; } AuthorizationResult authorizationResult = await _authorizationService.AuthorizeAsync(User, policy); if (!authorizationResult.Succeeded) { return(Forbid()); } DeleteResourceResponse response = await _mediator.DeleteResourceAsync(new ResourceKey(typeParameter, idParameter), hardDelete, HttpContext.RequestAborted); return(FhirResult.NoContent().SetETagHeader(response.WeakETag)); }
public async Task GivenOneMatchingResource_WhenDeletingConditionallyWithHardDeleteFlag_TheServerShouldDeleteSuccessfully() { var mockResultEntry = new SearchResultEntry(CreateMockResourceWrapper(Samples.GetDefaultObservation().UpdateId(Guid.NewGuid().ToString()), false)); ConditionalDeleteResourceRequest message = SetupConditionalDelete(KnownResourceTypes.Observation, DefaultSearchParams, true, 1, mockResultEntry); DeleteResourceResponse result = await _mediator.Send(message); Assert.NotNull(result); Assert.Equal(1, result.ResourcesDeleted); await _fhirDataStore.DidNotReceive().UpsertAsync( Arg.Any <ResourceWrapper>(), Arg.Any <WeakETag>(), true, true, Arg.Any <CancellationToken>()); await _fhirDataStore.Received().HardDeleteAsync(Arg.Any <ResourceKey>(), Arg.Any <bool>(), Arg.Any <CancellationToken>()); }
public async Task GivenADeleteResourceRequest_WhenDeletingAnAlreadyDeletedSearchParameterResource_TheDeleteSearchParameterShouldNotBeCalled() { var searchParameter = new SearchParameter() { Id = "Id" }; var resource = searchParameter.ToTypedElement().ToResourceElement(); var key = new ResourceKey("SearchParameter", "Id"); var request = new DeleteResourceRequest(key, DeleteOperation.SoftDelete); var wrapper = CreateResourceWrapper(resource, true); _fhirDataStore.GetAsync(key, Arg.Any <CancellationToken>()).Returns(wrapper); var response = new DeleteResourceResponse(key); var behavior = new DeleteSearchParameterBehavior <DeleteResourceRequest, DeleteResourceResponse>(_searchParameterOperations, _fhirDataStore); await behavior.Handle(request, CancellationToken.None, async() => await Task.Run(() => response)); await _searchParameterOperations.DidNotReceive().DeleteSearchParameterAsync(Arg.Any <RawResource>()); }
public async Task <IActionResult> Delete(string typeParameter, string idParameter, [FromQuery] bool hardDelete) { DeleteResourceResponse response = await _mediator.DeleteResourceAsync(new ResourceKey(typeParameter, idParameter), hardDelete, HttpContext.RequestAborted); return(FhirResult.NoContent().SetETagHeader(response.WeakETag)); }
public async Task <IActionResult> PurgeHistory(string typeParameter, string idParameter) { DeleteResourceResponse response = await _mediator.DeleteResourceAsync(new ResourceKey(typeParameter, idParameter), DeleteOperation.PurgeHistory, HttpContext.RequestAborted); return(FhirResult.NoContent().SetETagHeader(response.WeakETag)); }