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); }
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); }
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); }
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); }