public void GivenAnUnrecognizedException_WhenExecutingAnAction_ThenNoResponseShouldBeCreated()
        {
            var filter = new OperationOutcomeExceptionFilterAttribute(_fhirRequestContextAccessor);

            _context.Exception = new Exception();

            filter.OnActionExecuted(_context);

            Assert.False(_context.ExceptionHandled);
            Assert.Null(_context.Result);
        }
        public void GivenAFhirBasedException_WhenExecutingAnAction_ThenTheResponseShouldBeAnOperationOutcome()
        {
            var filter = new OperationOutcomeExceptionFilterAttribute(_fhirRequestContextAccessor);

            _context.Exception = Substitute.For <FhirException>();

            filter.OnActionExecuted(_context);

            var result = _context.Result as OperationOutcomeResult;

            Assert.NotNull(result);
            Assert.Equal(_correlationId, result.Result.Id);
        }
        public void GivenAnUnrecognizedExceptionAndInnerException_WhenExecutingAnAction_ThenNoResponseShouldBeCreated()
        {
            var filter = new OperationOutcomeExceptionFilterAttribute(_fhirRequestContextAccessor);

            var exception = new Exception(null, new Exception());

            _context.Exception = exception;

            filter.OnActionExecuted(_context);

            Assert.False(_context.ExceptionHandled);
            Assert.Null(_context.Result);
            Assert.Same(exception, _context.Exception); // ensure state is restored
        }
        private OperationOutcomeResult ValidateOperationOutcome(Exception exception, HttpStatusCode expectedStatusCode)
        {
            var filter = new OperationOutcomeExceptionFilterAttribute(_fhirRequestContextAccessor);

            _context.Exception = exception;

            filter.OnActionExecuted(_context);

            var result = _context.Result as OperationOutcomeResult;

            Assert.NotNull(result);
            Assert.Equal(expectedStatusCode, result.StatusCode);
            Assert.Equal(_correlationId, result.Result.Id);

            Assert.IsType <OperationOutcomeResult>(result);

            return(result);
        }
        public void GivenAResourceGoneExceptionException_WhenExecutingAnAction_ThenTheResponseShouldBeAnOperationOutcome()
        {
            var filter = new OperationOutcomeExceptionFilterAttribute(_fhirRequestContextAccessor);

            _context.Exception = new ResourceGoneException(new ResourceKey <Observation>("id1", "version2"));

            filter.OnActionExecuted(_context);

            var result = _context.Result as OperationOutcomeResult;

            Assert.NotNull(result);
            Assert.Equal(HttpStatusCode.Gone, result.StatusCode);
            Assert.Equal("W/\"version2\"", result.Headers[HeaderNames.ETag]);

            var operation = result.Result;

            Assert.NotNull(operation);
            Assert.Equal(_correlationId, result.Result.Id);
        }