public SqlServerFhirResourceChangeDataStoreTests() { resourceChangeDataStore = GetResourcChangeDataStoreWithGivenConnectionString(new SqlConnectionStringBuilder(LocalConnectionString) { InitialCatalog = "testDb" }.ToString()); }
public async Task GivenADatabaseSupportsResourceChangeCapture_WhenUpdatingAResource_ThenResourceChangesShouldBeReturned() { // add a new resource var saveResult = await _fixture.Mediator.UpsertResourceAsync(Samples.GetJsonSample("Weight")); // update the resource var newResourceValues = Samples.GetJsonSample("WeightInGrams").ToPoco(); newResourceValues.Id = saveResult.RawResourceElement.Id; // save updated resource var updateResult = await _fixture.Mediator.UpsertResourceAsync(newResourceValues.ToResourceElement(), WeakETag.FromVersionId(saveResult.RawResourceElement.VersionId)); var deserialized = updateResult.RawResourceElement.ToResourceElement(Deserializers.ResourceDeserializer); // get resource changes var resourceChangeDataStore = new SqlServerFhirResourceChangeDataStore(_fixture.SqlConnectionFactory, NullLogger <SqlServerFhirResourceChangeDataStore> .Instance, _fixture.SchemaInformation); var resourceChanges = await resourceChangeDataStore.GetRecordsAsync(1, 200, CancellationToken.None); Assert.NotNull(resourceChanges); Assert.Single(resourceChanges.Where(x => x.ResourceVersion.ToString() == deserialized.VersionId && x.ResourceId == deserialized.Id)); var resourceChangeData = resourceChanges.Where(x => x.ResourceVersion.ToString() == deserialized.VersionId && x.ResourceId == deserialized.Id).FirstOrDefault(); Assert.NotNull(resourceChangeData); Assert.Equal(ResourceChangeTypeUpdated, resourceChangeData.ResourceChangeTypeId); }
public SqlServerFhirResourceChangeDataStoreTests() { sqlConnectionBuilder = Substitute.For <ISqlConnectionBuilder>(); var schemaInformation = new SchemaInformation(SchemaVersionConstants.Min, SchemaVersionConstants.Max); schemaInformation.Current = SchemaVersionConstants.Max; resourceChangeDataStore = new SqlServerFhirResourceChangeDataStore(sqlConnectionBuilder, NullLogger <SqlServerFhirResourceChangeDataStore> .Instance, schemaInformation); }
public async Task GivenADatabaseSupportsResourceChangeCapture_WhenInsertingAResource_ThenResourceChangesShouldBeReturned() { // add a new resource var saveResult = await _fixture.Mediator.UpsertResourceAsync(Samples.GetJsonSample("Weight")); var deserialized = saveResult.RawResourceElement.ToResourceElement(Deserializers.ResourceDeserializer); // get resource changes var resourceChangeDataStore = new SqlServerFhirResourceChangeDataStore(_fixture.SqlConnectionFactory, NullLogger <SqlServerFhirResourceChangeDataStore> .Instance, _fixture.SchemaInformation); var resourceChanges = await resourceChangeDataStore.GetRecordsAsync(1, 200, CancellationToken.None); Assert.NotNull(resourceChanges); Assert.Single(resourceChanges.Where(x => x.ResourceId == deserialized.Id)); Assert.Equal(ResourceChangeTypeCreated, resourceChanges.First().ResourceChangeTypeId); }
public async Task GivenADatabaseSupportsResourceChangeCapture_WhenResourceChangeCaptureIsDisabled_ThenResourceChangesShouldNotBeCreated() { FhirStorageTestsFixture fhirStorageTestsFixture = null; try { string databaseName = $"FHIRRESOURCECHANGEDISABLEDTEST_{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}_{BigInteger.Abs(new BigInteger(Guid.NewGuid().ToByteArray()))}"; // this will either create the database or upgrade the schema. var coreFeatureConfigOptions = Options.Create(new CoreFeatureConfiguration() { SupportsResourceChangeCapture = false }); var sqlFixture = new SqlServerFhirStorageTestsFixture(SchemaVersionConstants.Max, databaseName, coreFeatureConfigOptions); fhirStorageTestsFixture = new FhirStorageTestsFixture(sqlFixture); await fhirStorageTestsFixture.InitializeAsync(); Mediator mediator = fhirStorageTestsFixture.Mediator; // add a new resource var saveResult = await mediator.UpsertResourceAsync(Samples.GetJsonSample("Weight")); // update the resource var newResourceValues = Samples.GetJsonSample("WeightInGrams").ToPoco(); newResourceValues.Id = saveResult.RawResourceElement.Id; // save updated resource var updateResult = await mediator.UpsertResourceAsync(newResourceValues.ToResourceElement(), WeakETag.FromVersionId(saveResult.RawResourceElement.VersionId)); // delete the resource var deletedResourceKey = await mediator.DeleteResourceAsync(new ResourceKey("Observation", saveResult.RawResourceElement.Id), DeleteOperation.SoftDelete); // get resource changes var resourceChangeDataStore = new SqlServerFhirResourceChangeDataStore(sqlFixture.SqlConnectionWrapperFactory, NullLogger <SqlServerFhirResourceChangeDataStore> .Instance, sqlFixture.SchemaInformation); var resourceChanges = await resourceChangeDataStore.GetRecordsAsync(1, 200, CancellationToken.None); Assert.NotNull(resourceChanges); Assert.Empty(resourceChanges); } finally { await fhirStorageTestsFixture?.DisposeAsync(); } }
public async Task GivenADatabase_WhenGettingResourceTypes_WhenInsertingAResource_ThenResourceTypeNameShouldBeEqual() { // add a new resource var saveResult = await _fixture.Mediator.UpsertResourceAsync(Samples.GetJsonSample("Weight")); var deserialized = saveResult.RawResourceElement.ToResourceElement(Deserializers.ResourceDeserializer); // get resource types var resourceChangeDataStore = new SqlServerFhirResourceChangeDataStore(_fixture.SqlConnectionWrapperFactory, NullLogger <SqlServerFhirResourceChangeDataStore> .Instance, _fixture.SchemaInformation); var resourceChanges = await resourceChangeDataStore.GetRecordsAsync(1, 200, CancellationToken.None); Assert.NotNull(resourceChanges); Assert.Single(resourceChanges.Where(x => x.ResourceId == deserialized.Id)); var resourceChangeData = resourceChanges.Where(x => x.ResourceId == deserialized.Id).FirstOrDefault(); Assert.NotNull(resourceChangeData); Assert.Equal(saveResult.RawResourceElement.InstanceType, resourceChangeData.ResourceTypeName); }
public async Task GivenADatabaseSupportsResourceChangeCapture_WhenDeletingAResource_ThenResourceChangesShouldBeReturned() { // add a new resource var saveResult = await _fixture.Mediator.UpsertResourceAsync(Samples.GetJsonSample("Weight")); var deserialized = saveResult.RawResourceElement.ToResourceElement(Deserializers.ResourceDeserializer); // delete the resource var deletedResourceKey = await _fixture.Mediator.DeleteResourceAsync(new ResourceKey("Observation", saveResult.RawResourceElement.Id), DeleteOperation.SoftDelete); // get resource changes var resourceChangeDataStore = new SqlServerFhirResourceChangeDataStore(_fixture.SqlConnectionFactory, NullLogger <SqlServerFhirResourceChangeDataStore> .Instance, _fixture.SchemaInformation); var resourceChanges = await resourceChangeDataStore.GetRecordsAsync(1, 200, CancellationToken.None); Assert.NotNull(resourceChanges); Assert.Single(resourceChanges.Where(x => x.ResourceVersion.ToString() == deletedResourceKey.ResourceKey.VersionId && x.ResourceId == deletedResourceKey.ResourceKey.Id)); var resourceChangeData = resourceChanges.Where(x => x.ResourceVersion.ToString() == deletedResourceKey.ResourceKey.VersionId && x.ResourceId == deletedResourceKey.ResourceKey.Id).FirstOrDefault(); Assert.NotNull(resourceChangeData); Assert.Equal(ResourceChangeTypeDeleted, resourceChangeData.ResourceChangeTypeId); }