public void WhenBatchSubmitted_AllActionsExecuted() { // Create observations so that we can do the update, read, and delete in the batch var updateResource = _fhirClient.Create(_resource); var readResource = _fhirClient.Create(_resource); var deleteResource = _fhirClient.Create(_resource); updateResource.Comment = "This is an updated resource"; var transaction = new TransactionBuilder(_fhirClient.Endpoint) .Create(_resource) .Read("Observation", readResource.Id) .Delete("Observation", deleteResource.Id) .Update(updateResource.Id, updateResource); var bundle = transaction.ToBundle(); bundle.Type = Bundle.BundleType.Batch; BundleHelper.CleanEntryRequestUrls(bundle, _fhirClient.Endpoint); var batchResult = _fhirClient.Transaction(bundle); Assert.NotNull(batchResult); Assert.NotNull(batchResult.Entry); Assert.Equal(4, batchResult.Entry.Count); var createResult = batchResult.Entry[0]; AssertHelper.CheckStatusCode(HttpStatusCode.Created, createResult.Response.Status); var readResult = batchResult.Entry[1]; AssertHelper.CheckStatusCode(HttpStatusCode.OK, readResult.Response.Status); var deleteResult = batchResult.Entry[2]; AssertHelper.CheckDeleteStatusCode(deleteResult.Response.Status); var updateResult = batchResult.Entry[3]; AssertHelper.CheckStatusCode(HttpStatusCode.OK, updateResult.Response.Status); AssertHelper.CheckStatusCode(HttpStatusCode.OK, _fhirClient.LastResult.Status); }
public void WhenTransactionSubmittedWithInvalidPart_AllActionsFail() { // Create an observation so that we can do the update var updateResource1 = _fhirClient.Create(_resource); Observation updateResource2 = new Observation(); updateResource1.CopyTo(updateResource2); updateResource1.Comment = "This is an updated resource"; updateResource2.Comment = "Other update to the same resourceId"; // Attempting to update the same resource twice in a single transaction is supposed to fail // "If any resource identities (including resolved identities from conditional update/delete) overlap in steps 1-3, then the transaction SHALL fail." // See https://www.hl7.org/fhir/http.html#transaction for details var transaction = new TransactionBuilder(_fhirClient.Endpoint) .Update(updateResource1.Id, updateResource1) .Update(updateResource1.Id, updateResource2); var bundle = transaction.ToBundle(); bundle.Type = Bundle.BundleType.Transaction; BundleHelper.CleanEntryRequestUrls(bundle, _fhirClient.Endpoint); var acceptedValues = new HashSet <string> { ((int)HttpStatusCode.InternalServerError).ToString(), ((int)HttpStatusCode.BadRequest).ToString(), "500 Internal Server Error", "400 Bad Request", }; try { _fhirClient.Transaction(bundle); } catch (FhirOperationException) { AssertHelper.CheckSubsetStatusCode(acceptedValues, _fhirClient.LastResult.Status); } // Make sure that if the server actually returned something outside of 400 or 500, that we fail the test AssertHelper.CheckSubsetStatusCode(acceptedValues, _fhirClient.LastResult.Status); }