Esempio n. 1
0
        public CmsPageModel Build(CmsContent article, MenuPageModel.MenuPageContent menu, BannerPageModel banners)
        {
            if (article.ContentItemsAreNullOrEmpty())
            {
                return(null);
            }

            var item = article.Items.FirstOrDefault();

            var pageTypeResult = item.Sys.ContentType.Sys.Id.GetPageType();

            var contentItems = new List <ContentItem>();

            if (item.Fields.Content?.Content == null)
            {
                return(GenerateCmsPageModel(article, item, pageTypeResult, contentItems, null, menu, banners));
            }

            foreach (var contentItem in item.Fields.Content.Content)
            {
                article.ProcessContentNodeTypes(contentItem, contentItems);
                contentItem.ProcessListNodeTypes(contentItems);
                article.ProcessEmbeddedAssetBlockNodeTypes(contentItem, contentItems);
            }

            var parentPage =
                article.Includes.Entry.FirstOrDefault(c => c.Sys.Id.Equals(item.Fields.LandingPage?.Sys?.Id));

            return(GenerateCmsPageModel(article, item, pageTypeResult, contentItems, parentPage, menu, banners));
        }
        public void Then_The_Banner_Is_Built(CmsContent source, string contentValue)
        {
            source.Items[0].Fields.AllowUserToHideTheBanner = true;
            source.Items[0].Fields.ShowOnTheHomepageOnly    = true;

            foreach (var subContentItems in source.Items.FirstOrDefault().Fields.Content.Content)
            {
                subContentItems.NodeType = "paragraph";
                subContentItems.Content  = new List <ContentDefinition>
                {
                    new ContentDefinition
                    {
                        NodeType = "text",
                        Value    = contentValue
                    }
                };
            }

            var actual = new BannerPageModel().Build(source);

            actual.MainContent.Should().NotBeNullOrEmpty();
            actual.MainContent.ElementAt(0).Title.Should().NotBeNullOrWhiteSpace();
            actual.MainContent.ElementAt(0).AllowUserToHideTheBanner.Should().BeTrue();
            actual.MainContent.ElementAt(0).BackgroundColour.Should().NotBeNullOrWhiteSpace();
            actual.MainContent.ElementAt(0).ShowOnTheHomepageOnly.Should().BeTrue();
            actual.MainContent.ElementAt(0).Items.Any().Should().BeTrue();
        }
Esempio n. 3
0
        public async Task Then_The_Api_Is_Called_With_The_Valid_Request_Parameters_And_The_Article_Is_Returned(
            GetArticleByHubAndSlugQuery query,
            GetMenuQueryResult menuResult,
            GetBannerQueryResult bannerResult,
            MenuPageModel.MenuPageContent menuContent,
            BannerPageModel bannerContent,
            CmsContent apiResponse,
            CmsPageModel response,
            [Frozen] Mock <IContentService> contentService,
            [Frozen] Mock <IReliableCacheStorageService> service,
            [Frozen] Mock <IMediator> mediator,
            GetArticleByHubAndSlugQueryHandler handler)
        {
            contentService.Setup(x => x.HasContent(It.IsAny <ApiResponse <CmsContent> >())).Returns(true);
            service.Setup(o =>
                          o.GetData <CmsContent>(
                              It.Is <GetArticleEntriesRequest>(c =>
                                                               c.GetUrl.Contains($"fields.hubType={query.Hub.ToTitleCase()}&fields.slug={query.Slug}")),
                              $"{query.Hub.ToTitleCase()}_{query.Slug}_article", contentService.Object.HasContent))
            .ReturnsAsync(apiResponse);

            mediator.SetupMenu(menuResult, menuContent);
            mediator.SetupBanners(bannerResult, bannerContent);

            var actual = await handler.Handle(query, CancellationToken.None);

            var cmsPageModel = response.Build(apiResponse, menuContent, bannerContent);

            actual.PageModel.Should().BeEquivalentTo(cmsPageModel);
        }
Esempio n. 4
0
        public void Then_The_Header_Image_Is_Added(CmsContent source, string contentValue, AssetFields fields, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Arrange
            fields.File.Url = $"//{fields.File.Url}";

            source.Includes.Asset = new List <Asset>()
            {
                new Asset
                {
                    Sys = new AssetSys
                    {
                        Id = source.Items[0].Fields.HeaderImage.Sys.Id
                    },
                    Fields = fields
                }
            };

            ////Act
            var actual = new LandingPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.MainContent.HeaderImage.Should().NotBeNull();
            actual.MainContent.HeaderImage.EmbeddedResource.Id.Should().Be(source.Items[0].Fields.HeaderImage.Sys.Id);
            actual.MainContent.HeaderImage.EmbeddedResource.Title.Should().Be(fields.Title);
            actual.MainContent.HeaderImage.EmbeddedResource.FileName.Should().Be(fields.File.FileName);
            actual.MainContent.HeaderImage.EmbeddedResource.Url.Should().Be($"https:{fields.File.Url}");
            actual.MainContent.HeaderImage.EmbeddedResource.ContentType.Should().Be(fields.File.ContentType);
            actual.MainContent.HeaderImage.EmbeddedResource.Size.Should().Be(fields.File.Details.Size);
            actual.MainContent.HeaderImage.EmbeddedResource.Description.Should().Be(fields.Description);
        }
Esempio n. 5
0
        public async Task <IActionResult> PutCmsContent([FromRoute] string id, [FromBody] CmsContent cmsContent)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != cmsContent.Id)
            {
                return(BadRequest());
            }

            _context.Entry(cmsContent).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!CmsContentExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(NoContent());
        }
Esempio n. 6
0
        public void Then_The_Content_Items_Are_Added_For_Block_Quotes(CmsContent source, string contentValue, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Arrange
            foreach (var subContentItems in source.Items.FirstOrDefault().Fields.Content.Content)
            {
                subContentItems.NodeType = "blockquote";
                subContentItems.Content  = new List <ContentDefinition>
                {
                    new ContentDefinition
                    {
                        NodeType = "paragraph",
                        Content  = new List <RelatedContent>
                        {
                            new RelatedContent
                            {
                                NodeType = "text",
                                Value    = contentValue
                            }
                        }
                    }
                };
            }

            //Act
            var actual = new CmsPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.MainContent.Items.Should().NotBeEmpty();
            actual.MainContent.Items.TrueForAll(c => c.Type.Equals("blockquote")).Should().BeTrue();
            actual.MainContent.Items.TrueForAll(c => c.Values.FirstOrDefault().Equals(contentValue)).Should().BeTrue();
        }
Esempio n. 7
0
        public void Then_The_Content_Items_Are_Added_For_Links(CmsContent source, string contentValue, string uri, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Arrange
            var expectedUri = $"https://{uri}/";

            foreach (var subContentItems in source.Items.FirstOrDefault().Fields.Content.Content)
            {
                subContentItems.NodeType = "paragraph";
                subContentItems.Content  = new List <ContentDefinition>
                {
                    new ContentDefinition
                    {
                        NodeType = "hyperlink",
                        Content  = new List <RelatedContent>
                        {
                            new RelatedContent
                            {
                                Value = contentValue,
                            }
                        },
                        Data = new RelatedData
                        {
                            Uri = new Uri(expectedUri)
                        }
                    }
                };
            }

            //Act
            var actual = new CmsPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.MainContent.Items.TrueForAll(c => c.Type.Equals("paragraph")).Should().BeTrue();
            actual.MainContent.Items.TrueForAll(c => c.Values.FirstOrDefault().ToString() == $"[{contentValue}]({expectedUri})").Should().BeTrue();
        }
        public async Task Then_The_Api_Is_Called_With_The_Valid_Request_Parameters_And_The_Landing_Page_Is_Returned(
            GetPreviewLandingPageQuery query,
            GetMenuQueryResult menuResult,
            MenuPageModel.MenuPageContent menuContent,
            CmsContent apiResponse,
            HubPageModel response,
            GetBannerQueryResult bannerResult,
            BannerPageModel bannerContent,
            [Frozen] Mock <IContentfulPreviewApiClient <ContentfulPreviewApiConfiguration> > apiClient,
            [Frozen] Mock <IMediator> mediator,
            GetPreviewLandingPageQueryHandler handler)
        {
            apiClient.Setup(o =>
                            o.Get <CmsContent>(
                                It.Is <GetLandingPageRequest>(c =>
                                                              c.GetUrl.Contains($"fields.hubType={query.Hub.ToTitleCase()}&fields.slug={query.Slug}"))))
            .ReturnsAsync(apiResponse);

            mediator.SetupMenu(menuResult, menuContent);
            mediator.SetupBanners(bannerResult, bannerContent);

            var actual = await handler.Handle(query, CancellationToken.None);

            actual.PageModel.Should().BeEquivalentTo(response.Build(apiResponse, menuContent, bannerContent));
        }
 private static List <UrlDetails> SetLandingPageDetails(CmsContent hub)
 {
     return(hub.Items.Select(item => new UrlDetails
     {
         Hub = item?.Fields.HubType, Title = item?.Fields.Title, Slug = item?.Fields.Slug,
         PageType = item.Sys.ContentType.Sys.Id.GetPageTypeValue(), ParentSlug = ParentPageSlug(item, hub)
     }).ToList());
 }
Esempio n. 10
0
        public void Then_If_The_CmsContent_Is_Null_Then_True_Returned()
        {
            CmsContent ci = null;

            var actual = ci.ContentItemsAreNullOrEmpty();

            actual.Should().BeTrue();
        }
        public SiteMapPageModel Build(CmsContent hub)
        {
            if (hub.ContentItemsAreNullOrEmpty())
            {
                return(null);
            }

            return(GenerateHubPageModel(SetLandingPageDetails(hub)));
        }
        public void Then_The_Urls_Are_Built(CmsContent source)
        {
            var actual = new SiteMapPageModel().Build(source);

            actual.MainContent.Pages.Should().NotBeNullOrEmpty();
            actual.MainContent.Pages[0].Title.Should().NotBeNullOrWhiteSpace();
            actual.MainContent.Pages[0].Hub.Should().NotBeNullOrWhiteSpace();
            actual.MainContent.Pages[0].Slug.Should().NotBeNullOrWhiteSpace();
        }
Esempio n. 13
0
        public IActionResult CreateOrUpdate([FromBody] CmsContent data)
        {
            if (string.IsNullOrEmpty(data.Title))
            {
                return(Json(new JsonResponse <string> {
                    code = 1, message = "Title can not be empty"
                }));
            }
            if (data.Id == null || data.Id == Guid.Empty)
            {
                data.Id = Guid.NewGuid();
            }

            data = data.CalculateThumbnail();

            using (var db = new MoneyNoteDbContext())
            {
                var exited = db.CmsContents.FirstOrDefault(i => i.Id == data.Id);
                if (exited == null)
                {
                    data.CountView = 0;
                    db.CmsContents.Add(data);
                }
                else
                {
                    exited.ParentId        = data.ParentId;
                    exited.Title           = data.Title;
                    exited.Thumbnail       = data.Thumbnail;
                    exited.UrlRef          = data.UrlRef;
                    exited.Description     = data.Description;
                    exited.IsDeleted       = data.IsDeleted;
                    exited.ThumbnailWidth  = data.ThumbnailWidth;
                    exited.ThumbnailHeight = data.ThumbnailHeight;
                    exited.VideoWidth      = data.VideoWidth;
                    exited.VideoHeight     = data.VideoHeight;
                    exited.IsPublished     = data.IsPublished;
                }

                db.SaveChanges();

                var existed = db.CmsRelations.Where(i => i.ContentId == data.Id).ToList();
                db.RemoveRange(existed);
                db.SaveChanges();

                db.AddRange(data.CategoryIds.Select(c => new CmsRelation
                {
                    ContentId  = data.Id,
                    CategoryId = c
                }).ToList());
                db.SaveChanges();
            }

            return(Json(new JsonResponse <CmsContent> {
                data = data
            }));
        }
Esempio n. 14
0
        public static bool ContentItemsAreNullOrEmpty(this CmsContent pageContent)
        {
            if (pageContent == null || pageContent.Total == 0)
            {
                return(true);
            }
            var item = pageContent.Items.FirstOrDefault();

            return(item == null);
        }
        public void Then_True_Is_Returned_If_Total_Is_Greater_Than_Zero_And_Not_Null_Content(
            CmsContent model,
            ContentService service)
        {
            //Act
            var actual = service.HasContent(new ApiResponse <CmsContent>(model, HttpStatusCode.OK, ""));

            //Assert
            actual.Should().BeTrue();
        }
Esempio n. 16
0
        A_CmsContent_Object_Is_Passed_To_ContentItemsAreNullOrEmpty_And_The_Total_Is_Zero_Then_Returns_True()
        {
            var ci = new CmsContent {
                Total = 0
            };

            var actual = ci.ContentItemsAreNullOrEmpty();

            actual.Should().BeTrue();
        }
Esempio n. 17
0
 private CmsPageModel GenerateCmsPageModel(CmsContent article, Item item, PageType pageTypeResult, List <ContentItem> contentItems,
                                           Entry parentPage, MenuPageModel.MenuPageContent menu, BannerPageModel banners)
 {
     return(new CmsPageModel
     {
         PageAttributes = new PageModel
         {
             Title = item.Fields.Title,
             Summary = item.Fields.Summary,
             Slug = item.Fields.Slug,
             HubType = item.Fields.HubType,
             MetaDescription = item.Fields.MetaDescription,
             PageType = pageTypeResult,
         },
         MainContent = new PageContent
         {
             Items = contentItems
         },
         Attachments = item.Fields.Attachments?.Select(attachment => article.GetEmbeddedResource(attachment.Sys.Id))
                       .ToList(),
         RelatedArticles = article.Includes?.Entry != null
             ? article
                           .Includes
                           .Entry.Where(c => c.Sys?.ContentType?.Sys?.Type != null &&
                                        c.Sys.ContentType.Sys.Type.Equals("link",
                                                                          StringComparison.CurrentCultureIgnoreCase) &&
                                        c.Sys.ContentType.Sys.LinkType.Equals("ContentType",
                                                                              StringComparison.CurrentCultureIgnoreCase) &&
                                        Enum.TryParse <PageType>(c.Sys.ContentType.Sys.Id, true, out var type) &&
                                        type == PageType.Article
                                        )
                           .Select(entry => new PageModel
         {
             Slug = entry.Fields.Slug,
             Summary = entry.Fields.Summary,
             Title = entry.Fields.Title,
             HubType = entry.Fields.HubType,
             MetaDescription = entry.Fields.MetaDescription
         })
                           .ToList()
             : new List <PageModel>(),
         ParentPage = parentPage != null
             ? new PageModel
         {
             Slug = parentPage.Fields.Slug,
             Title = parentPage.Fields.Title,
             Summary = parentPage.Fields.Summary,
             HubType = parentPage.Fields.HubType,
             MetaDescription = parentPage.Fields.MetaDescription
         }
             : null,
         MenuContent = menu,
         TabbedContents = ProcessTabbedContent(article, item),
         BannerModels = banners
     });
        private static UrlDetails SetLandingPageDetails(CmsContent hub, Entry entry)
        {
            var parentPage = hub.Includes.Entry.FirstOrDefault(c => c.Sys.Id.Equals(entry.Fields.LandingPage?.Sys.Id));

            return(new UrlDetails
            {
                Hub = parentPage?.Fields.HubType,
                Title = parentPage?.Fields.Title,
                Slug = parentPage?.Fields.Slug
            });
        }
        public ApiMenuPageModel Build(CmsContent menu)
        {
            if (menu.ContentItemsAreNullOrEmpty())
            {
                return(null);
            }

            var menuItems = ProcessMenuItems(menu);

            return(GenerateHubPageModel(SetMenuDetails(menuItems)));
        }
Esempio n. 20
0
        public BannerPageModel Build(CmsContent banner)
        {
            if (banner.ContentItemsAreNullOrEmpty())
            {
                return(null);
            }

            var banners = IterateBannerItems(banner);

            return(GenerateHubPageModel(banners));
        }
        private static string ParentPageSlug(Item item, CmsContent hub)
        {
            if (string.Compare(item.Sys.ContentType.Sys.Id, "landingPage", StringComparison.OrdinalIgnoreCase) == 0)
            {
                return(string.Empty);
            }

            var parentPage = hub.Includes.Entry.FirstOrDefault(c => c.Sys.Id.Equals(item.Fields.LandingPage?.Sys?.Id));

            return(parentPage?.Fields?.Slug);
        }
Esempio n. 22
0
        public void Then_If_Total_Is_Zero_Items_Returned_Then_Null_Returned(CmsContent source, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Arrange
            source.Total = 0;

            //Act
            var actual = new CmsPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.Should().BeNull();
        }
Esempio n. 23
0
        public void Then_No_Content_Items_Returns_Empty_List(CmsContent source, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Arrange
            source.Items.FirstOrDefault().Fields.Content = null;

            //Act
            var actual = new CmsPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.MainContent.Items.Should().BeEmpty();
        }
Esempio n. 24
0
        public void Then_If_Total_Is_Zero_Items_Returned_Then_Null_Returned(CmsContent source)
        {
            //Arrange
            source.Total = 0;

            //Act
            var actual = new MenuPageModel().Build(source);

            //Assert
            actual.Should().BeNull();
        }
Esempio n. 25
0
        public void Then_The_Page_Level_Fields_Are_Set(CmsContent source, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Act
            var actual = new CmsPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.PageAttributes.Title.Should().Be(source.Items.FirstOrDefault()?.Fields.Title);
            actual.PageAttributes.MetaDescription.Should().Be(source.Items.FirstOrDefault()?.Fields.MetaDescription);
            actual.PageAttributes.Slug.Should().Be(source.Items.FirstOrDefault()?.Fields.Slug);
            actual.PageAttributes.HubType.Should().Be(source.Items.FirstOrDefault()?.Fields.HubType);
            actual.PageAttributes.Summary.Should().Be(source.Items.FirstOrDefault()?.Fields.Summary);
        }
Esempio n. 26
0
        public void Then_Any_Linked_Types_Are_Added_To_The_Content_Items(CmsContent source, string contentValue, string linkedContentId, List <List <string> > tableData, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Arrange
            source.Items.FirstOrDefault().Fields.Content.Content = new List <SubContentItems>
            {
                new SubContentItems
                {
                    NodeType = "paragraph",
                    Content  = new List <ContentDefinition>
                    {
                        new ContentDefinition
                        {
                            Content = new List <RelatedContent>(),
                            Data    = new RelatedData
                            {
                                Target = new LandingPage
                                {
                                    Sys = new LandingPageSys
                                    {
                                        Id = linkedContentId
                                    }
                                }
                            },
                            NodeType = "embedded-entry-inline"
                        }
                    }
                }
            };
            source.Includes.Entry = new List <Entry>
            {
                new Entry
                {
                    Sys = new AssetSys
                    {
                        Id = linkedContentId,
                    },
                    Fields = new EntryFields
                    {
                        Table = new Table
                        {
                            TableData = tableData
                        }
                    }
                }
            };

            //Act
            var actual = new CmsPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.MainContent.Items.TrueForAll(c => c.Type.Equals("paragraph")).Should().BeTrue();
            actual.MainContent.Items.FirstOrDefault().TableValue.Should().BeEquivalentTo(tableData);
        }
Esempio n. 27
0
        protected void Page_Load(object sender, EventArgs e)
        {
            UserControl breadcrum = (UserControl)(CmsContent.FindControl("BreadCrum"));

            if (Request.QueryString["format"] != null)
            {
                if (Convert.ToString(Request.QueryString["format"]) == "print")
                {
                    breadcrum.Visible = false;
                }
            }
        }
Esempio n. 28
0
        public void Then_No_Content_Items_Returns_Empty_Header_Image_And_Cards(CmsContent source, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Arrange
            source.Items.FirstOrDefault().Fields.HeaderImage = null;

            //Act
            var actual = new LandingPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.MainContent.HeaderImage.Should().BeNull();
            actual.MainContent.Cards.Should().BeEmpty();
        }
Esempio n. 29
0
        public void Then_If_No_Parent_Page_Is_Set_Then_Null_Returned_For_Parent_Page(CmsContent source, string parentId, MenuPageModel.MenuPageContent menuContent, BannerPageModel bannerContent)
        {
            //Arrange
            source.Items.FirstOrDefault().Fields.LandingPage = null;


            //Act
            var actual = new CmsPageModel().Build(source, menuContent, bannerContent);

            //Assert
            actual.ParentPage.Should().BeNull();
        }
Esempio n. 30
0
        public async Task <IActionResult> PostCmsContent([FromBody] CmsContent cmsContent)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            _context.CmsContent.Add(cmsContent);
            await _context.SaveChangesAsync();

            return(CreatedAtAction("GetCmsContent", new { id = cmsContent.Id }, cmsContent));
        }