public async Task GivenADatabaseWithAnEarlierSupportedSchema_WhenUpserting_OperationSucceeds() { for (int i = SchemaVersionConstants.Min; i <= SchemaVersionConstants.Max; i++) { string databaseName = $"FHIRCOMPATIBILITYTEST_V{i}_{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}"; var fhirStorageTestsFixture = new FhirStorageTestsFixture(new SqlServerFhirStorageTestsFixture(i, databaseName)); try { await fhirStorageTestsFixture.InitializeAsync(); Mediator mediator = fhirStorageTestsFixture.Mediator; var saveResult = await mediator.UpsertResourceAsync(Samples.GetJsonSample("Weight")); var deserialized = saveResult.RawResourceElement.ToResourceElement(Deserializers.ResourceDeserializer); var result = (await mediator.GetResourceAsync(new ResourceKey(deserialized.InstanceType, deserialized.Id, deserialized.VersionId))).ToResourceElement(fhirStorageTestsFixture.Deserializer); Assert.NotNull(result); Assert.Equal(deserialized.Id, result.Id); } catch (Exception e) { throw new InvalidOperationException($"Failure using schema version {i}", e); } finally { await fhirStorageTestsFixture?.DisposeAsync(); } } }
public async Task GivenADatabaseWithAnEarlierSupportedSchemaAndUpgraded_WhenUpsertingAfter_OperationSucceeds() { string databaseName = $"FHIRCOMPATIBILITYTEST_{DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()}"; var insertedElements = new List <string>(); FhirStorageTestsFixture fhirStorageTestsFixture = null; try { for (int i = SchemaVersionConstants.Min; i <= SchemaVersionConstants.Max; i++) { try { fhirStorageTestsFixture = new FhirStorageTestsFixture(new SqlServerFhirStorageTestsFixture(i, databaseName)); await fhirStorageTestsFixture.InitializeAsync(); // this will either create the database or upgrade the schema. Mediator mediator = fhirStorageTestsFixture.Mediator; foreach (string id in insertedElements) { // verify that we can read entries from previous versions var readResult = (await mediator.GetResourceAsync(new ResourceKey("Observation", id))).ToResourceElement(fhirStorageTestsFixture.Deserializer); Assert.Equal(id, readResult.Id); } // add a new entry var saveResult = await mediator.UpsertResourceAsync(Samples.GetJsonSample("Weight")); var deserialized = saveResult.RawResourceElement.ToResourceElement(Deserializers.ResourceDeserializer); var result = (await mediator.GetResourceAsync(new ResourceKey(deserialized.InstanceType, deserialized.Id, deserialized.VersionId))).ToResourceElement(fhirStorageTestsFixture.Deserializer); Assert.NotNull(result); Assert.Equal(deserialized.Id, result.Id); insertedElements.Add(result.Id); } catch (Exception e) { throw new InvalidOperationException($"Failure using schema version {i}", e); } } } finally { await fhirStorageTestsFixture?.DisposeAsync(); } }
public async Task GivenADatabaseWithAnEarlierSupportedSchema_WhenSearchingWithSort_SearchIsSuccessful() { string databaseName = $"FHIRCOMPATIBILITYTEST_SORT_{DateTimeOffset.UtcNow.ToUnixTimeSeconds()}"; int schemaVersion = SchemaVersionConstants.AddMinMaxForDateAndStringSearchParamVersion - 1; var fhirStorageTestsFixture = new FhirStorageTestsFixture(new SqlServerFhirStorageTestsFixture( schemaVersion, databaseName)); try { await fhirStorageTestsFixture.InitializeAsync(); Mediator mediator = fhirStorageTestsFixture.Mediator; var saveResult = await mediator.UpsertResourceAsync(Samples.GetDefaultPatient()); var deserialized = saveResult.RawResourceElement.ToResourceElement(Deserializers.ResourceDeserializer); List <Tuple <string, string> > queries = new List <Tuple <string, string> >(); queries.Add(new Tuple <string, string>("_sort", "birthdate")); Core.Models.ResourceElement searchResult = await mediator.SearchResourceAsync("Patient", queries); var bundle = searchResult.ResourceInstance as Bundle; Assert.NotNull(searchResult); Assert.Single(bundle.Entry); } catch (Exception e) { throw new InvalidOperationException($"Sort query failed for schema version {schemaVersion}", e); } finally { await fhirStorageTestsFixture?.DisposeAsync(); } }