public void GivenAStringSearchValue_WhenGenerated_ThenCorrectJObjectShouldBeCreated()
        {
            const string s = "StringWithMixedCase";

            StringSearchValue value = new StringSearchValue(s);

            var expectedValues = new[]
            {
                CreateTuple("s", s),
                CreateTuple("n_s", s.ToUpperInvariant()),
            };

            TestAndValidateOutput(
                "string",
                value,
                expectedValues);
        }
        public async Task GivenUpdatedResources_WhenBulkUpdatingSearchParameterIndicesAsync_ThenResourceMetadataIsUnchanged()
        {
            ResourceElement patientResource1 = CreatePatientResourceElement("Patient1", Guid.NewGuid().ToString());
            SaveOutcome     upsertResult1    = await Mediator.UpsertResourceAsync(patientResource1);

            ResourceElement patientResource2 = CreatePatientResourceElement("Patient2", Guid.NewGuid().ToString());
            SaveOutcome     upsertResult2    = await Mediator.UpsertResourceAsync(patientResource2);

            SearchParameter searchParam     = null;
            const string    searchParamName = "newSearchParam";

            try
            {
                searchParam = await CreatePatientSearchParam(searchParamName, SearchParamType.String, "Patient.name");

                ISearchValue searchValue = new StringSearchValue(searchParamName);

                (ResourceWrapper original1, ResourceWrapper updated1) = await CreateUpdatedWrapperFromExistingPatient(upsertResult1, searchParam, searchValue);

                (ResourceWrapper original2, ResourceWrapper updated2) = await CreateUpdatedWrapperFromExistingPatient(upsertResult2, searchParam, searchValue);

                var resources = new List <ResourceWrapper> {
                    updated1, updated2
                };

                await _dataStore.BulkUpdateSearchParameterIndicesAsync(resources, CancellationToken.None);

                // Get the reindexed resources from the database
                var             resourceKey1 = new ResourceKey(upsertResult1.RawResourceElement.InstanceType, upsertResult1.RawResourceElement.Id, upsertResult1.RawResourceElement.VersionId);
                ResourceWrapper reindexed1   = await _dataStore.GetAsync(resourceKey1, CancellationToken.None);

                var             resourceKey2 = new ResourceKey(upsertResult2.RawResourceElement.InstanceType, upsertResult2.RawResourceElement.Id, upsertResult2.RawResourceElement.VersionId);
                ResourceWrapper reindexed2   = await _dataStore.GetAsync(resourceKey2, CancellationToken.None);

                VerifyReindexedResource(original1, reindexed1);
                VerifyReindexedResource(original2, reindexed2);
            }
            finally
            {
                if (searchParam != null)
                {
                    _searchParameterDefinitionManager.DeleteSearchParameter(searchParam.ToTypedElement());
                    await _fixture.TestHelper.DeleteSearchParameterStatusAsync(searchParam.Url, CancellationToken.None);
                }
            }
        }
Example #3
0
        public async Task GivenDeletedResource_WhenBulkUpdatingSearchParameterIndicesAsync_ThenExceptionIsThrown()
        {
            ResourceElement patientResource1 = CreatePatientResourceElement("Patient1", Guid.NewGuid().ToString());
            SaveOutcome     upsertResult1    = await Mediator.UpsertResourceAsync(patientResource1);

            ResourceElement patientResource2 = CreatePatientResourceElement("Patient2", Guid.NewGuid().ToString());
            SaveOutcome     upsertResult2    = await Mediator.UpsertResourceAsync(patientResource2);

            SearchParameter searchParam     = null;
            const string    searchParamName = "newSearchParam";

            try
            {
                searchParam = await CreatePatientSearchParam(searchParamName, SearchParamType.String, "Patient.name");

                ISearchValue searchValue = new StringSearchValue(searchParamName);

                // Update the resource wrappers, adding the new search parameter
                (ResourceWrapper original1, ResourceWrapper updated1) = await CreateUpdatedWrapperFromExistingPatient(upsertResult1, searchParam, searchValue);

                (_, ResourceWrapper updated2) = await CreateUpdatedWrapperFromExistingPatient(upsertResult2, searchParam, searchValue);

                // Delete one of the two resources
                ResourceWrapper deletedWrapper = CreateDeletedWrapper(original1);
                await _dataStore.UpsertAsync(deletedWrapper, WeakETag.FromVersionId(deletedWrapper.Version), allowCreate : true, keepHistory : false, CancellationToken.None);

                var resources = new List <ResourceWrapper> {
                    updated1, updated2
                };

                // Attempt to reindex both resources, one of which has since been deleted and has a version that is out of date.
                await Assert.ThrowsAsync <PreconditionFailedException>(() => _dataStore.BulkUpdateSearchParameterIndicesAsync(resources, CancellationToken.None));
            }
            finally
            {
                if (searchParam != null)
                {
                    _searchParameterDefinitionManager.DeleteSearchParameter(searchParam.ToTypedElement());
                    await _fixture.TestHelper.DeleteSearchParameterStatusAsync(searchParam.Url, CancellationToken.None);
                }
            }
        }
Example #4
0
        public async Task GivenUpdatedResourcesWithWrongResourceId_WhenBulkUpdatingSearchParameterIndicesAsync_ThenExceptionIsThrown()
        {
            ResourceElement patientResource1 = CreatePatientResourceElement("Patient1", Guid.NewGuid().ToString());
            SaveOutcome     upsertResult1    = await Mediator.UpsertResourceAsync(patientResource1);

            ResourceElement patientResource2 = CreatePatientResourceElement("Patient2", Guid.NewGuid().ToString());
            SaveOutcome     upsertResult2    = await Mediator.UpsertResourceAsync(patientResource2);

            SearchParameter searchParam     = null;
            const string    searchParamName = "newSearchParam";

            try
            {
                searchParam = await CreatePatientSearchParam(searchParamName, SearchParamType.String, "Patient.name");

                ISearchValue searchValue = new StringSearchValue(searchParamName);

                // Update the resource wrappers, adding the new search parameter and a different ID
                (_, ResourceWrapper updated1) = await CreateUpdatedWrapperFromExistingPatient(upsertResult1, searchParam, searchValue, null, Guid.NewGuid().ToString());

                (_, ResourceWrapper updated2) = await CreateUpdatedWrapperFromExistingPatient(upsertResult2, searchParam, searchValue, null, Guid.NewGuid().ToString());

                var resources = new List <ResourceWrapper> {
                    updated1, updated2
                };

                await Assert.ThrowsAsync <ResourceNotFoundException>(() => _dataStore.BulkUpdateSearchParameterIndicesAsync(resources, CancellationToken.None));
            }
            finally
            {
                if (searchParam != null)
                {
                    _searchParameterDefinitionManager.DeleteSearchParameter(searchParam.ToTypedElement());
                    await _fixture.TestHelper.DeleteSearchParameterStatusAsync(searchParam.Url, CancellationToken.None);
                }
            }
        }
        public void GiveASearchValue_WhenToStringIsCalled_ThenEscapedStringShouldBeReturned(string s, string expected)
        {
            StringSearchValue value = new StringSearchValue(s);

            Assert.Equal(expected, value.ToString());
        }
        public void GivenAString_WhenSearchValueCreated_ThenStringValueGotUnescaped(string data, string expected)
        {
            StringSearchValue value = new StringSearchValue(data);

            Assert.Equal(expected, value.String);
        }
        public void GivenAString_WhenParseStringIntoSearchValue_ThenStringValueGotUnescaped(string data, string expected)
        {
            StringSearchValue value = StringSearchValue.Parse(data);

            Assert.Equal(expected, value.String);
        }
        public void GivenASearchValue_WhenIsValidCompositeComponentIsCalled_ThenTrueShouldBeReturned()
        {
            var value = new StringSearchValue("test");

            Assert.True(value.IsValidAsCompositeComponent);
        }
 public void GivenAnInvalidString_WhenParsing_ThenExceptionShouldBeThrown(string s)
 {
     Assert.Throws <ArgumentException>(ParamNameS, () => StringSearchValue.Parse(s));
 }
 public void GivenANullString_WhenParsing_ThenExceptionShouldBeThrown()
 {
     Assert.Throws <ArgumentNullException>(ParamNameS, () => StringSearchValue.Parse(null));
 }
 public void Visit(StringSearchValue s)
 {
     AddProperty(_prefix, s.String.NormalizeAndRemoveAccents().ToUpperInvariant());
 }
Example #12
0
        public void GivenAStringSearchValue_WhenCompareWithNull_ThenArgumentExceptionIsThrown()
        {
            StringSearchValue value = new StringSearchValue("string");

            Assert.Throws <ArgumentException>(() => value.CompareTo(null, ComparisonRange.Max));
        }