public async Task GivenAResource_WhenCreatingConditionallyWithOneMatch_ThenTheServerShouldReturnTheResourceSuccessfully() { string id = Guid.NewGuid().ToString(); string version = Guid.NewGuid().ToString(); var mockResultEntry = new SearchResultEntry(CreateMockResourceWrapper(Samples.GetDefaultObservation().UpdateId(id), false)); mockResultEntry.Resource.Version.Returns(version); ConditionalCreateResourceRequest message = SetupConditionalCreate( Samples.GetDefaultObservation(), DefaultSearchParams, mockResultEntry); UpsertResourceResponse result = await _mediator.Send <UpsertResourceResponse>(message); Assert.Null(result); await _fhirDataStore.DidNotReceive().UpsertAsync( Arg.Any <ResourceWrapper>(), Arg.Any <WeakETag>(), true, true, Arg.Any <CancellationToken>()); }
public async Task GivenAResource_WhenCreatingConditionallyWithNoExisting_ThenTheServerShouldReturnTheResourceSuccessfully() { ConditionalCreateResourceRequest message = SetupConditionalCreate(Samples.GetDefaultObservation()); UpsertResourceResponse result = await _mediator.Send <UpsertResourceResponse>(message); Assert.Equal(SaveOutcomeType.Created, result.Outcome.Outcome); await _fhirDataStore.Received().UpsertAsync(Arg.Is <ResourceWrapper>(x => x.ResourceId == result.Outcome.Resource.Id), null, true, true, Arg.Any <CancellationToken>()); }
public async Task GivenAResource_WhenCreatingConditionallyWithMultipleMatches_TheServerShouldFail() { var mockResultEntry1 = new SearchResultEntry(CreateMockResourceWrapper(Samples.GetDefaultObservation().UpdateId(Guid.NewGuid().ToString()), false)); var mockResultEntry2 = new SearchResultEntry(CreateMockResourceWrapper(Samples.GetDefaultObservation().UpdateId(Guid.NewGuid().ToString()), false)); ConditionalCreateResourceRequest message = SetupConditionalCreate( Samples.GetDefaultObservation(), mockResultEntry1, mockResultEntry2); await Assert.ThrowsAsync <PreconditionFailedException>(() => _mediator.Send <UpsertResourceResponse>(message)); }
public async Task GivenAResource_WhenCreatingConditionallyWithFilteredSearchParams_TheServerShouldFail() { ConditionalCreateResourceRequest message = SetupConditionalCreate( Samples.GetDefaultObservation(), new List <Tuple <string, string> > { Tuple.Create("_count", "1"), Tuple.Create("_summary", "count"), }); await Assert.ThrowsAsync <PreconditionFailedException>(() => _mediator.Send <UpsertResourceResponse>(message)); }
private ConditionalCreateResourceRequest SetupConditionalCreate(ResourceElement requestResource, params SearchResultEntry[] searchResults) { IReadOnlyList <Tuple <string, string> > list = new[] { Tuple.Create("_tag", Guid.NewGuid().ToString()) }; _searchService.SearchAsync(Arg.Any <string>(), list, CancellationToken.None) .Returns(new SearchResult(searchResults, Enumerable.Empty <Tuple <string, string> >().ToArray(), Enumerable.Empty <(string, string)>().ToArray(), null)); _fhirDataStore.UpsertAsync(Arg.Any <ResourceWrapper>(), Arg.Any <WeakETag>(), true, true, Arg.Any <CancellationToken>()) .Returns(x => new UpsertOutcome(x.ArgAt <ResourceWrapper>(0), SaveOutcomeType.Created)); var message = new ConditionalCreateResourceRequest(requestResource, list); return(message); }
public async Task GivenAResource_WhenCreatingConditionallyWithUnsupportedParams_TheServerShouldFail() { ConditionalCreateResourceRequest message = SetupConditionalCreate( Samples.GetDefaultObservation(), new List <Tuple <string, string> > { Tuple.Create("unknown1", "unknown"), }); var searchResult = new SearchResult( Enumerable.Empty <SearchResultEntry>(), new[] { Tuple.Create("unknown1", "unknown") }, Enumerable.Empty <(string, string)>().ToArray(), null); _searchService.SearchAsync(Arg.Any <string>(), Arg.Any <IReadOnlyList <Tuple <string, string> > >(), CancellationToken.None) .Returns(searchResult); await Assert.ThrowsAsync <PreconditionFailedException>(() => _mediator.Send <UpsertResourceResponse>(message)); }
public async Task <UpsertResourceResponse> Handle(ConditionalCreateResourceRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <UpsertResourceResponse> next) => await GenericHandle(next, cancellationToken);