public async Task GetContentItemModelRetrievingContentModelWithUnknownTypeReturnNull()
        {
            var item        = JToken.FromObject(Rt4);
            var linkedItems = JToken.FromObject(LinkedItemsForItemWithTwoReferencedContentItems);

            var contentLinkUrlResolver      = A.Fake <IContentLinkUrlResolver>();
            var inlineContentItemsProcessor = A.Fake <IInlineContentItemsProcessor>();
            var typeProvider   = A.Fake <ITypeProvider>();
            var propertyMapper = A.Fake <IPropertyMapper>();

            A.CallTo(() => typeProvider.GetType("newType")).Returns(null);
            var modelProvider = new ModelProvider(contentLinkUrlResolver, inlineContentItemsProcessor, typeProvider, propertyMapper, new DeliveryJsonSerializer(), new HtmlParser());

            Assert.Null(await modelProvider.GetContentItemModelAsync <object>(item, linkedItems));
        }
        public async Task RetrievingContentModelWithItemInlineReferencingItselfDoesNotCycle()
        {
            var typeProvider           = A.Fake <ITypeProvider>();
            var contentLinkUrlResolver = A.Fake <IContentLinkUrlResolver>();
            var propertyMapper         = A.Fake <IPropertyMapper>();

            A.CallTo(() => typeProvider.GetType(A <string> ._)).Returns(typeof(ContentItemWithSingleRte));
            A.CallTo(() => propertyMapper.IsMatch(A <PropertyInfo> ._, A <string> ._, A <string> ._)).Returns(true);

            var processor = InlineContentItemsProcessorFactory
                            .WithResolver(ResolveItemWithSingleRte)
                            .Build();
            var retriever = new ModelProvider(contentLinkUrlResolver, processor, typeProvider, propertyMapper, new DeliveryJsonSerializer(), new HtmlParser());

            var item        = JToken.FromObject(Rt3);
            var linkedItems = JToken.FromObject(LinkedItemsForItemReferencingItself);

            var result = await retriever.GetContentItemModelAsync <ContentItemWithSingleRte>(item, linkedItems);

            Assert.Equal("<span>RT</span><span>RT</span>", result.Rt);
            Assert.IsType <ContentItemWithSingleRte>(result);
        }
        public async Task RetrievingNonExistentContentModelCreatesWarningInRichtext()
        {
            var typeProvider           = A.Fake <ITypeProvider>();
            var contentLinkUrlResolver = A.Fake <IContentLinkUrlResolver>();
            var propertyMapper         = A.Fake <IPropertyMapper>();

            A.CallTo(() => typeProvider.GetType(A <string> ._)).Returns(null);
            A.CallTo(() => propertyMapper.IsMatch(A <PropertyInfo> ._, A <string> ._, A <string> ._)).Returns(true);

            var processor = InlineContentItemsProcessorFactory
                            .WithResolver(factory => factory.ResolveTo <UnknownContentItem>(unknownItem => $"Content type '{unknownItem.Type}' has no corresponding model."))
                            .Build();
            var retriever = new ModelProvider(contentLinkUrlResolver, processor, typeProvider, propertyMapper, new DeliveryJsonSerializer(), new HtmlParser());

            var item           = JToken.FromObject(Rt5);
            var linkedItems    = JToken.FromObject(LinkedItemWithNoModel);
            var expectedResult =
                $"<span>RT</span>Content type '{linkedItems.SelectToken("linkedItemWithNoModel.system.type")}' has no corresponding model.";

            var result = await retriever.GetContentItemModelAsync <ContentItemWithSingleRte>(item, linkedItems);

            Assert.Equal(expectedResult, result.Rt);
            Assert.IsType <ContentItemWithSingleRte>(result);
        }