public async Task ExecuteResultAsync_SetsObjectValueOfFormatter(object value)
        {
            // Arrange
            var    url         = "testAction";
            var    formatter   = CreateMockFormatter();
            var    httpContext = GetHttpContext(formatter);
            object actual      = null;

            formatter.Setup(f => f.WriteAsync(It.IsAny <OutputFormatterWriteContext>()))
            .Callback((OutputFormatterWriteContext context) => actual = context.Object)
            .Returns(Task.FromResult(0));

            var actionContext = GetActionContext(httpContext);
            var urlHelper     = GetMockUrlHelper(url);
            var routeValues   = new RouteValueDictionary(new Dictionary <string, string>()
            {
                { "test", "case" },
                { "sample", "route" }
            });

            // Act
            var result = new AcceptedAtRouteResult(
                routeName: "sample",
                routeValues: routeValues,
                value: value);

            result.UrlHelper = urlHelper;
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Same(value, actual);
        }
        public void Constructor_InitializesStatusCodeAndValue(object value)
        {
            // Arrange & Act
            var result = new AcceptedAtRouteResult(
                routeName: null,
                routeValues: null,
                value: value);

            // Assert
            Assert.Equal(StatusCodes.Status202Accepted, result.StatusCode);
            Assert.Same(value, result.Value);
        }
        public async Task ExecuteResultAsync_SetsStatusCodeAndLocationHeader(object values)
        {
            // Arrange
            var expectedUrl   = "testAction";
            var formatter     = CreateMockFormatter();
            var httpContext   = GetHttpContext(formatter);
            var actionContext = GetActionContext(httpContext);
            var urlHelper     = GetMockUrlHelper(expectedUrl);

            // Act
            var result = new AcceptedAtRouteResult(routeValues: values, value: null);

            result.UrlHelper = urlHelper;
            await result.ExecuteResultAsync(actionContext);

            // Assert
            Assert.Equal(StatusCodes.Status202Accepted, httpContext.Response.StatusCode);
            Assert.Equal(expectedUrl, httpContext.Response.Headers["Location"]);
        }
        public async Task ExecuteResultAsync_ThrowsIfRouteUrlIsNull()
        {
            // Arrange
            var formatter     = CreateMockFormatter();
            var httpContext   = GetHttpContext(formatter);
            var actionContext = GetActionContext(httpContext);
            var urlHelper     = GetMockUrlHelper(returnValue: null);

            // Act
            var result = new AcceptedAtRouteResult(
                routeName: null,
                routeValues: new Dictionary <string, object>(),
                value: null);

            result.UrlHelper = urlHelper;

            // Assert
            await ExceptionAssert.ThrowsAsync <InvalidOperationException>(() =>
                                                                          result.ExecuteResultAsync(actionContext),
                                                                          "No route matches the supplied values.");
        }