Beispiel #1
0
    public void FormatFilter_ContextContainsFormat_DefaultFormat(string format, FormatSource place)
    {
        // Arrange
        var mediaType   = new StringSegment("application/json");
        var mockObjects = new MockObjects(format, place);

        var resultExecutingContext   = mockObjects.CreateResultExecutingContext();
        var resourceExecutingContext = mockObjects.CreateResourceExecutingContext(new IFilterMetadata[] { });

        var filter = new FormatFilter(mockObjects.OptionsManager, NullLoggerFactory.Instance);

        // Act
        filter.OnResourceExecuting(resourceExecutingContext);

        // Assert
        Assert.Null(resourceExecutingContext.Result);

        // Act
        filter.OnResultExecuting(resultExecutingContext);

        // Assert
        var objectResult = Assert.IsType <ObjectResult>(resultExecutingContext.Result);

        Assert.Single(objectResult.ContentTypes);
        MediaTypeAssert.Equal(mediaType, objectResult.ContentTypes[0]);
    }
Beispiel #2
0
    public void FormatFilter_ExplicitContentType_SetOnResponse_TakesPrecedence()
    {
        // Arrange
        var mediaType   = MediaTypeHeaderValue.Parse("application/foo");
        var mockObjects = new MockObjects("json", FormatSource.QueryData);
        var response    = new Mock <HttpResponse>();

        response.Setup(r => r.ContentType).Returns("application/foo");
        var httpContext = new Mock <HttpContext>();

        httpContext.Setup(c => c.Response).Returns(response.Object);
        httpContext.Setup(c => c.Request.Query["format"]).Returns("json");
        var actionContext          = new ActionContext(httpContext.Object, new RouteData(), new ActionDescriptor());
        var resultExecutingContext = new ResultExecutingContext(
            actionContext,
            new IFilterMetadata[] { },
            new ObjectResult("Hello!"),
            controller: new object());

        var resourceExecutingContext = new ResourceExecutingContext(
            actionContext,
            new IFilterMetadata[] { },
            new List <IValueProviderFactory>());

        var filter = new FormatFilter(mockObjects.OptionsManager, NullLoggerFactory.Instance);

        // Act
        filter.OnResourceExecuting(resourceExecutingContext);
        filter.OnResultExecuting(resultExecutingContext);

        // Assert
        var result = Assert.IsType <ObjectResult>(resultExecutingContext.Result);

        Assert.Empty(result.ContentTypes);
    }
Beispiel #3
0
    public void FormatFilter_ContextContainsFormat_Custom(
        string format,
        FormatSource place,
        string contentType)
    {
        // Arrange
        var mediaType = new StringSegment(contentType);

        var mockObjects              = new MockObjects(format, place);
        var resultExecutingContext   = mockObjects.CreateResultExecutingContext();
        var resourceExecutingContext = mockObjects.CreateResourceExecutingContext(new IFilterMetadata[] { });

        mockObjects.MvcOptions.FormatterMappings.SetMediaTypeMappingForFormat(
            format,
            MediaTypeHeaderValue.Parse(contentType));

        var filter = new FormatFilter(mockObjects.OptionsManager, NullLoggerFactory.Instance);

        // Act
        filter.OnResourceExecuting(resourceExecutingContext);
        filter.OnResultExecuting(resultExecutingContext);

        // Assert
        var objectResult = Assert.IsType <ObjectResult>(resultExecutingContext.Result);

        Assert.Single(objectResult.ContentTypes);
        MediaTypeAssert.Equal(mediaType, objectResult.ContentTypes[0]);
    }
Beispiel #4
0
    public void FormatFilter_ContextContainsFormat_InRouteAndQueryData()
    {
        // If the format is present in both route and query data, the one in route data wins

        // Arrange
        var mediaType   = new StringSegment("application/json");
        var mockObjects = new MockObjects("json", FormatSource.RouteData);
        var httpContext = new Mock <HttpContext>();

        httpContext.Setup(c => c.Response).Returns(new Mock <HttpResponse>().Object);

        // Query contains xml
        httpContext.Setup(c => c.Request.Query.ContainsKey("format")).Returns(true);
        httpContext.Setup(c => c.Request.Query["format"]).Returns("xml");

        // RouteData contains json
        var data = new RouteData();

        data.Values.Add("format", "json");

        var ac = new ActionContext(httpContext.Object, data, new ActionDescriptor());

        var resultExecutingContext = new ResultExecutingContext(
            ac,
            new IFilterMetadata[] { },
            new ObjectResult("Hello!"),
            controller: new object());

        var resourceExecutingContext = new ResourceExecutingContext(
            ac,
            new IFilterMetadata[] { },
            new List <IValueProviderFactory>());

        var filter = new FormatFilter(mockObjects.OptionsManager, NullLoggerFactory.Instance);

        // Act
        filter.OnResourceExecuting(resourceExecutingContext);
        filter.OnResultExecuting(resultExecutingContext);

        // Assert
        var objectResult = Assert.IsType <ObjectResult>(resultExecutingContext.Result);

        Assert.Single(objectResult.ContentTypes);
        MediaTypeAssert.Equal(mediaType, objectResult.ContentTypes[0]);
    }