public void It_should_correctly_materialize_the_document()
        {
            // Arrange
            var responseJsonPath = Path.Combine(Environment.CurrentDirectory, $"response{Path.DirectorySeparatorChar}getitems.json");
            var responseJson     = File.ReadAllText(responseJsonPath);

            var sut = new Kontent(MockDeliveryClient.Create(responseJson, cfg => cfg
                                                            .WithTypeProvider(new CustomTypeProvider())))
                      .WithContentField(Article.BodyCopyCodename)
                      .WithUrlField(Article.UrlPatternCodename);

            var context = Setup_ExecutionContext();

            // Act
            var result = sut.Execute(null, context).ToArray();

            // Assert
            result.Should().NotBeEmpty();
            result[0].Should().BeOfType <TestDocument>();
            var article = result[0].AsKontent <Article>();

            article.Title.Should().StartWith("Coffee");
            article.System.Codename.Should().Be("coffee_beverages_explained");
            article.System.Type.Should().Be(Article.Codename);
        }
        public void It_should_correctly_copy_all_fields_into_the_document()
        {
            // Arrange
            var responseJsonPath = Path.Combine(Environment.CurrentDirectory, $"response{Path.DirectorySeparatorChar}getitems.json");
            var responseJson     = File.ReadAllText(responseJsonPath);

            var sut = new Kontent(MockDeliveryClient.Create(responseJson))
                      .WithContentField("body_copy");

            var context = A.Fake <IExecutionContext>();

            // Act
            var result = sut.Execute(null, context).ToArray();

            // Assert
            result.Should().NotBeEmpty();
        }
        public void It_should_correctly_set_the_default_content()
        {
            // Arrange
            var responseJsonPath = Path.Combine(Environment.CurrentDirectory, $"response{Path.DirectorySeparatorChar}getitems.json");
            var responseJson     = File.ReadAllText(responseJsonPath);

            var sut = new Kontent(MockDeliveryClient.Create(responseJson))
                      .WithContentField("body_copy");

            var context = A.Fake <IExecutionContext>();
            // Act
            var result = sut.Execute(null, context).ToArray();

            // Assert
            A.CallTo(() =>
                     context.GetDocument(A <Stream> .Ignored, A <IEnumerable <KeyValuePair <string, object> > > .Ignored, true))
            .MustHaveHappened();
        }
        public void It_should_resolve_inline_content_types()
        {
            // Arrange
            var responseJsonPath = Path.Combine(Environment.CurrentDirectory, $"response{Path.DirectorySeparatorChar}getitems.json");
            var responseJson     = File.ReadAllText(responseJsonPath);

            var sut = new Kontent(MockDeliveryClient.Create(responseJson, cfg => cfg
                                                            .WithTypeProvider(new CustomTypeProvider())))
                      .WithContentField(Article.BodyCopyCodename)
                      .WithUrlField(Article.UrlPatternCodename);

            var context = Setup_ExecutionContext();

            // Act
            var result = sut.Execute(null, context).ToArray();

            // Assert
            result.Should().NotBeEmpty();
            result[0].Should().BeOfType <TestDocument>();
            var article = result[0].AsKontent <Article>();

            article.Title.Should().StartWith("Coffee");
            article.BodyCopy.Blocks.Should().Contain(block => block is IInlineContentItem && ((IInlineContentItem)block).ContentItem is Tweet, "Inline content must be resolved");
        }