Example #1
0
        public void GIVEN_Exception_WHEN_OnActionExecuted_THEN_ExceptionIsInCompoundDocument()
        {
            // Arrange
            var transformer     = new JsonApiTransformer();
            var exceptionFilter = new JsonApiExceptionFilter(transformer);


            var post = new PostBuilder()
                       .WithAuthor(PostBuilder.Asimov)
                       .Build();

            var context = new FilterContextBuilder()
                          .WithException("Test exception message")
                          .BuildException();

            // Act
            exceptionFilter.OnException(context);

            // Assert
            var result = (ObjectResult)context.Result;
            var value  = (CompoundDocument)result.Value;

            Assert.Equal(1, value.Errors.Count());
            Assert.Equal("Test exception message", value.Errors.First().Detail);
            Assert.Equal(500, value.Errors.First().Status);
        }
Example #2
0
        public void GIVEN_PostObject_WHEN_OnActionExecuted_THEN_ResponseValid()
        {
            // Arrange
            var actionFilter = GetActionFilterForTestModel();

            var post = new PostBuilder()
                       .WithAuthor(PostBuilder.Asimov)
                       .Build();

            var context = new FilterContextBuilder()
                          .WithResult(new ObjectResult(post))
                          .BuildActionExecuted();

            // Act
            actionFilter.OnActionExecuted(context);

            // Assert
            var result   = (ObjectResult)context.Result;
            var value    = (CompoundDocument)result.Value;
            var resource = (SingleResource)value.Data;

            Assert.Null(value.Errors);
            Assert.Equal(post.Title, resource.Attributes["title"]);
            Assert.Equal(post.AuthorId, resource.Attributes["authorId"]);
        }
Example #3
0
        public void GIVEN_MultipleInclude_WHEN_ActionExecuted_THEN_AllIncludesPresent()
        {
            // Arrange
            var post = new PostBuilder()
                       .WithAuthor(PostBuilder.Asimov)
                       .WithComment(1, "First")
                       .Build();

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithResult(new ObjectResult(post))
                               .WithQuery("include", "authors,comments")
                               .BuildActionExecuted();

            // Act
            actionFilter.OnActionExecuted(context);

            // Assert
            var result             = (ObjectResult)context.Result;
            var document           = (CompoundDocument)result.Value;
            var includedAttributes = document.Included.SelectMany(x => x.Attributes).ToList();

            Assert.Contains(includedAttributes, x =>
                            x.Key == "name" &&
                            x.Value.ToString() == PostBuilder.Asimov.Name);

            Assert.Contains(includedAttributes, x =>
                            x.Key == "body" &&
                            x.Value.ToString() == "First");
        }
Example #4
0
        public void GIVEN_CorrectContentType_WHEN_ActionExecuting_THEN_ResponseNotSet()
        {
            // Arrange
            string contentType = "application/vnd.api+json";

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithContentType(contentType)
                               .BuildActionExecuting();

            // Act
            actionFilter.OnActionExecuting(context);

            // Assert
            Assert.Null(context.Result);
        }
Example #5
0
        public void GIVEN_WrongContentType_WHEN_ActionExecuting_THEN_ResponseIs415()
        {
            // Arrange
            string contentType = null;

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithContentType(contentType)
                               .BuildActionExecuting();

            // Act
            actionFilter.OnActionExecuting(context);

            // Assert
            var result = (UnsupportedMediaTypeResult)context.Result;

            Assert.Equal(415, result.StatusCode);
        }
Example #6
0
        public void GIVEN_WildcardAccept_WHEN_ActionExecuting_THEN_ResponseIsNull()
        {
            // Arrange
            string acceptsHeader = "*/*";
            string contentType   = "application/vnd.api+json";

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithContentType(contentType)
                               .WithHeader("Accept", acceptsHeader)
                               .BuildActionExecuting();

            // Act
            actionFilter.OnActionExecuting(context);

            // Assert
            Assert.Null(context.Result);
        }
Example #7
0
        public void GIVEN_CorrectContentType_AND_Parameters_WHEN_ActionExecuting_THEN_ResponseIs415()
        {
            // Arrange
            string contentType = "application/vnd.api+json; version=1.0";

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithContentType(contentType)
                               .BuildActionExecuting();

            // Act
            actionFilter.OnActionExecuting(context);

            // Assert
            var result = (UnsupportedMediaTypeResult)context.Result;

            Assert.Equal(415, result.StatusCode);
        }
Example #8
0
        public void GIVEN_MutlipleAccept_AND_Correct_WHEN_ActionExecuting_THEN_ResponseIsNull()
        {
            // Arrange
            string acceptsHeader = "application/vnd.api+json, application/vnd.api+json; version=1.0, application/json";
            string contentType   = "application/vnd.api+json";

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithContentType(contentType)
                               .WithController <PostsController>()
                               .WithHeader("Accept", acceptsHeader)
                               .BuildActionExecuting();

            // Act
            actionFilter.OnActionExecuting(context);

            // Assert
            Assert.Null(context.Result);
        }
Example #9
0
        public void GIVEN_HttpNotFoundObjectResult_WHEN_ActionExecuted_THEN_ErrorValue()
        {
            // Arrange
            var actionFilter = GetActionFilterForTestModel();

            var idNotFoundResult = new HttpNotFoundObjectResult(42);

            var context = new FilterContextBuilder()
                          .WithResult(idNotFoundResult)
                          .BuildActionExecuted();

            // Act
            actionFilter.OnActionExecuted(context);

            // Assert
            var result = (ObjectResult)context.Result;
            var value  = (CompoundDocument)result.Value;

            Assert.Equal(1, value.Errors.Count());
        }
Example #10
0
        public void GIVEN_MutlipleAccept_AND_AllAreWrong_WHEN_ActionExecuting_THEN_406Unacceptable()
        {
            // Arrange
            string acceptsHeader = "application/xml, application/vnd.api+json; version=1.0, application/json";
            string contentType   = "application/vnd.api+json";

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithContentType(contentType)
                               .WithHeader("Accept", acceptsHeader)
                               .BuildActionExecuting();

            // Act
            actionFilter.OnActionExecuting(context);

            // Assert
            var result = (HttpStatusCodeResult)context.Result;

            Assert.Equal(406, result.StatusCode);
        }
Example #11
0
        public void GIVEN_IncorrectAcceptsHeader_WHEN_ActionExecuting_THEN_ResponseIs406()
        {
            // Arrange
            string acceptsHeader = "application/vnd.api+json; version=1.0";
            string contentType   = "application/vnd.api+json";

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithContentType(contentType)
                               .WithHeader("Accept", acceptsHeader)
                               .BuildActionExecuting();

            // Act
            actionFilter.OnActionExecuting(context);

            // Assert
            var result = (HttpStatusCodeResult)context.Result;

            Assert.Equal(406, result.StatusCode);
        }
Example #12
0
        public void GIVEN_IncludesAreNotApplicable_WHEN_ActionExecuted_THEN_400BadRequest(string includePath)
        {
            // Arrange
            var post = new PostBuilder()
                       .WithAuthor(PostBuilder.Asimov)
                       .Build();

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithResult(new ObjectResult(post))
                               .WithQuery("include", includePath)
                               .BuildActionExecuted();

            // Act
            actionFilter.OnActionExecuted(context);

            // Assert
            var result = (HttpStatusCodeResult)context.Result;

            Assert.Equal(400, result.StatusCode);
        }
Example #13
0
        public void GIVEN_CorrectAcceptsHeader_AND_NoConfiguration_WHEN_ActionExecuting_THEN_ResponseIs406()
        {
            // Arrange
            string acceptsHeader = "application/vnd.api+json";
            string contentType   = "application/vnd.api+json";

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithContentType(contentType)
                               .WithController <ControllerThatIsNotConfigured>()
                               .WithHeader("Accept", acceptsHeader)
                               .BuildActionExecuting();

            // Act
            actionFilter.OnActionExecuting(context);

            // Assert
            var result = (ContentResult)context.Result;

            Assert.Equal(406, result.StatusCode);
        }
Example #14
0
        public void GIVEN_SingleInclude_WHEN_ActionExecuted_THEN_RelatedIncludePresent()
        {
            // Arrange
            var post = new PostBuilder()
                       .WithAuthor(PostBuilder.Asimov)
                       .Build();

            var actionFilter = GetActionFilterForTestModel();
            var context      = new FilterContextBuilder()
                               .WithResult(new ObjectResult(post))
                               .WithQuery("include", "authors")
                               .BuildActionExecuted();

            // Act
            actionFilter.OnActionExecuted(context);

            // Assert
            var result   = (ObjectResult)context.Result;
            var document = (CompoundDocument)result.Value;

            Assert.Equal(PostBuilder.Asimov.Name, document.Included.Single().Attributes["name"]);
        }