public async Task TestResourceDoesExistShouldApplyPatch()
        {
            var repository = new InMemoryFhirRepository();
            var resource   = await repository.CreateResourceAsync(FhirResourceProvider.Patient);

            var patchedResource = new Patient();

            resource.CopyTo(patchedResource);
            patchedResource.BirthDate = "01.01.1111";

            var patchApplier = new Mock <IPatchApplier>();

            patchApplier.Setup(p => p.ApplyTo(It.IsAny <Resource>(), It.IsAny <List <PatchOperation> >())).Returns(patchedResource);

            var interactor = new PatchResourceInteractor(repository, patchApplier.Object);
            var response   = await interactor.ExecuteAsync(
                new PatchResourceRequest
            {
                ResourceId = resource.Id, Payload = "[{ \"op\": \"test\", \"path\": \"/a/b/c\", \"value\": \"foo\" }]"
            });


            var savedResource = await repository.ReadResourceAsync(resource.Id);

            Assert.AreEqual(ResponseCode.Success, response.Code);
            Assert.AreEqual("01.01.1111", ((Patient)response.Resource).BirthDate);
            Assert.AreEqual("01.01.1111", ((Patient)savedResource).BirthDate);
        }
        public async Task TestExistingResourceIsUpdated()
        {
            var inMemoryFhirRepository = new InMemoryFhirRepository();
            var interactor             = new UpdateResourceInteractor(inMemoryFhirRepository, new FhirJsonParser());

            var createdResource = await inMemoryFhirRepository.CreateResourceAsync(FhirResourceProvider.Patient);

            await interactor.ExecuteAsync(
                new UpdateResourceRequest { ResourceJson = new FhirJsonSerializer().SerializeToString(createdResource), ResourceId = createdResource.Id });

            Assert.AreEqual(2, inMemoryFhirRepository.Resources.Count);
            Assert.AreEqual("SOMENEWVERSIONID", inMemoryFhirRepository.Resources.Last().Meta.VersionId);
        }
Exemple #3
0
        public async Task TestResourceTypeMismatchShouldReturnErrorCode()
        {
            var resource = FhirResourceProvider.Patient;

            resource.Id = "SOMEFHIRCONFORMID";

            var repository = new InMemoryFhirRepository();

            repository.Resources.Add(resource);

            var interactor = new ReadResourceHistoryInteractor(repository);
            var response   = await interactor.ExecuteAsync(new ReadResourceHistoryRequest { ResourceId = "SOMEFHIRCONFORMID", ResourceType = "Observation" });

            Assert.AreEqual(ResponseCode.ResourceNotFound, response.Code);
        }
        public async Task TestDeletionIsSuccessfulShouldReturnSuccessCode()
        {
            var resource = FhirResourceProvider.Patient;

            resource.PopulateMetadata("123456789", "123456789");

            var fhirRepository = new InMemoryFhirRepository();

            fhirRepository.Resources.Add(resource);
            Assert.AreEqual(1, fhirRepository.Resources.Count);

            var interactor = new DeleteResourceInteractor(fhirRepository, new InMemorySearchRepository());
            await interactor.ExecuteAsync(new DeleteResourceRequest { ResourceId = "123456789" });

            Assert.AreEqual(0, fhirRepository.Resources.Count);
        }
        public async Task TestResourceExistsShouldReturnResourceAndSuccess()
        {
            var resource = FhirResourceProvider.Patient;

            resource.Id = "SOMEFHIRCONFORMID";

            var repository = new InMemoryFhirRepository();

            repository.Resources.Add(resource);

            var interactor = new ReadResourceInteractor(repository, new InMemorySearchRepository());
            var response   = await interactor.ExecuteAsync(new ReadResourceRequest { ResourceId = "SOMEFHIRCONFORMID", ResourceType = "Patient" });

            Assert.AreEqual(ResponseCode.Success, response.Code);
            Assert.IsTrue(response.Resource.IsExactly(resource));
        }
        public async Task TestDomainResourceCanBeCreated()
        {
            var fhirRepository = new InMemoryFhirRepository();
            var resource       = FhirResourceProvider.Patient;

            resource.Id = "SomeValueThatShouldBeIgnored";

            var interactor = new CreateResourceInteractor(fhirRepository, new FhirJsonParser(), new InMemorySearchRepository());
            var response   = await interactor.ExecuteAsync(
                new CreateResourceRequest { ResourceJson = new FhirJsonSerializer().SerializeToString(resource) });

            Assert.AreEqual(ResponseCode.Success, response.Code);
            Assert.AreEqual(response.Resource.Id, response.Resource.VersionId);
            Assert.AreEqual("SOMEFHIRCONFORMID1234", response.Resource.Id);
            Assert.IsInstanceOfType(response.Resource, typeof(Patient));

            Assert.AreEqual(1, fhirRepository.Resources.Count);
        }
        public async Task TestResourceCanBeImportedAndIsAddedToSearch()
        {
            var fhirRepository   = new InMemoryFhirRepository();
            var resourceTracker  = new InMemoryResourceTracker();
            var searchRepository = new InMemorySearchRepository();

            var resourceImporter = new ResourceImporter(searchRepository, fhirRepository, new RandomSeedManager(resourceTracker));

            var rootHash = Seed.Random().Value;
            var patient  = FhirResourceProvider.Patient;

            patient.Id = rootHash.Substring(0, 64);

            fhirRepository.Resources.Add(patient);

            await resourceImporter.ImportResourceAccessAsync(rootHash, Seed.Random().Value);

            Assert.IsNotNull(await resourceTracker.GetEntryAsync(rootHash));
            Assert.AreEqual(1, (await searchRepository.FindResourcesByTypeAsync("Patient")).Count);
        }
Exemple #8
0
        public async Task TestSuccessfulBatchShouldReturnSuccessOnAllEntries()
        {
            var resource = FhirResourceProvider.Patient;

            resource.Id = "SOMEFHIRCONFORMID";

            var repository = new InMemoryFhirRepository();

            repository.Resources.Add(resource);

            var interactor = new BatchProcessInteractor(repository);
            var response   = await interactor.ExecuteAsync(
                new BatchProcessRequest
            {
                Bundle = new Bundle
                {
                    Entry = new List <Bundle.EntryComponent>
                    {
                        new Bundle.EntryComponent
                        {
                            Request = new Bundle.RequestComponent {
                                Method = Bundle.HTTPVerb.GET, ElementId = "SOMEFHIRCONFORMID"
                            },
                        },
                        new Bundle.EntryComponent
                        {
                            Request = new Bundle.RequestComponent {
                                Method = Bundle.HTTPVerb.DELETE, ElementId = "SOMEFHIRCONFORMID"
                            },
                        },
                    }
                }
            });

            var responseBundle = (Bundle)response.Resource;

            Assert.AreEqual(ResponseCode.Success, response.Code);
            Assert.AreEqual(2, responseBundle.Entry.Count);
            Assert.IsNotNull(responseBundle.Entry[0].Resource);
            Assert.AreEqual(0, repository.Resources.Count);
        }
Exemple #9
0
        public async Task TestResourceExistsShouldReturnResourceAndSuccess()
        {
            var resource = FhirResourceProvider.Patient;

            resource.Id   = "SOMEFHIRCONFORMID";
            resource.Meta = new Meta {
                LastUpdated = DateTimeOffset.UtcNow
            };

            var repository = new InMemoryFhirRepository();

            repository.Resources.Add(resource);

            var interactor = new ReadResourceHistoryInteractor(repository);
            var response   = await interactor.ExecuteAsync(new ReadResourceHistoryRequest { ResourceId = "SOMEFHIRCONFORMID", ResourceType = "Patient" });

            Assert.AreEqual(ResponseCode.Success, response.Code);

            var bundleComponent = ((Bundle)response.Resource).Entry.First();

            Assert.IsTrue(bundleComponent.Resource.IsExactly(resource));
            Assert.AreEqual(Bundle.HTTPVerb.POST, bundleComponent.Request.Method);
            Assert.AreEqual(resource.Meta.LastUpdated.Value.Millisecond, bundleComponent.Response.LastModified.Value.Millisecond);
        }