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>());
        }
예제 #2
0
        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>());
        }
예제 #3
0
        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));
        }
예제 #5
0
        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));
        }
예제 #7
0
 public async Task <UpsertResourceResponse> Handle(ConditionalCreateResourceRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <UpsertResourceResponse> next)
 => await GenericHandle(next, cancellationToken);