Beispiel #1
0
        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();
                }
            }
        }
Beispiel #2
0
        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();
            }
        }