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); } } }
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); } } }
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()); }
public void GivenAStringSearchValue_WhenCompareWithNull_ThenArgumentExceptionIsThrown() { StringSearchValue value = new StringSearchValue("string"); Assert.Throws <ArgumentException>(() => value.CompareTo(null, ComparisonRange.Max)); }