예제 #1
0
        public async Task AddNonHierarchical()
        {
            using (var api = CreateApi())
            {
                using (var config = new Piranha.Config(api))
                {
                    config.HierarchicalPageSlugs = false;
                }

                var page = await MyPage.CreateAsync(api, "MyPage");

                page.Id       = Guid.NewGuid();
                page.ParentId = PAGE_1_ID;
                page.SiteId   = SITE_ID;
                page.Title    = "My second subpage";
                page.Ingress  = "My subpage ingress";
                page.Body     = "My subpage body";

                await api.Pages.SaveAsync(page);

                page = await api.Pages.GetByIdAsync <MyPage>(page.Id);

                Assert.NotNull(page);
                Assert.Equal("my-second-subpage", page.Slug);

                var param = await api.Params.GetByKeyAsync(Piranha.Config.PAGES_HIERARCHICAL_SLUGS);

                await api.Params.DeleteAsync(param);
            }
        }
        public async Task CreateRevisions_WithRemovalOfOld()
        {
            const int revisionCount = 2;
            var       siteId        = await MakeSite().ConfigureAwait(false);

            using var api = CreateApi();
            MyPage page = await MyPage.CreateAsync(api).ConfigureAwait(false);

            page.SiteId    = siteId;
            page.Title     = "Startpage";
            page.Text      = "Welcome";
            page.IsHidden  = true;
            page.Published = DateTime.Now;
            await PageRepository.Save(page).ConfigureAwait(false);

            var pageId = page.Id;
            await PageRepository.CreateRevision(pageId, revisionCount).ConfigureAwait(false);

            await PageRepository.CreateRevision(pageId, revisionCount).ConfigureAwait(false);

            await PageRepository.CreateRevision(pageId, revisionCount).ConfigureAwait(false);

            using var session = SessionFactory.OpenSession();
            using var txn     = session.BeginTransaction();
            var revisions = session.Query <PageRevisionEntity>().Where(p => p.Page.Id == pageId).ToList();

            Assert.AreEqual(revisionCount, revisions.Count);
            txn.Commit();
        }
예제 #3
0
        public async Task SerializeDeserialize()
        {
            var siteId = await MakeSite().ConfigureAwait(false);

            using var api = CreateApi();
            MyPage page = await MyPage.CreateAsync(api).ConfigureAwait(false);

            page.SiteId    = siteId;
            page.Title     = "Startpage";
            page.Text      = "Welcome";
            page.IsHidden  = true;
            page.Published = DateTime.Now;
            await PageRepository.Save(page).ConfigureAwait(false);

            var pageId = page.Id;

            using var session     = SessionFactory.OpenSession();
            using var transaction = session.BeginTransaction();
            var pageEntities = session.Query <PageEntity>().Where(p => p.Id == pageId);
            var mapped       = Module.Mapper.ProjectTo <PageEntity>(pageEntities).First();
            var data         = JsonConvert.SerializeObject(mapped);
            var pageType     = mapped.PageType;
            var type         = pageType.GetType().FullName;

            transaction.Commit();
        }
        private async Task <MyPage> MakePage(Guid siteId)
        {
            using var api = CreateApi();
            MyPage page = await MyPage.CreateAsync(api).ConfigureAwait(false);

            page.SiteId    = siteId;
            page.Title     = "Startpage";
            page.Text      = "Welcome";
            page.IsHidden  = true;
            page.Published = DateTime.Now;
            await PageRepository.Save(page).ConfigureAwait(false);

            return(page);
        }
예제 #5
0
        public async Task AddDuplicateSlugShouldThrow()
        {
            using (var api = CreateApi())
            {
                var page = await MyPage.CreateAsync(api);

                page.SiteId    = SITE_ID;
                page.Title     = "My first page";
                page.Published = DateTime.Now;

                await Assert.ThrowsAsync <ValidationException>(async() =>
                {
                    await api.Pages.SaveAsync(page);
                });
            }
        }
예제 #6
0
        public async Task Add()
        {
            using (var api = CreateApi())
            {
                var count = (await api.Pages.GetAllAsync(SITE_ID)).Count();
                var page  = await MyPage.CreateAsync(api, "MyPage");

                page.SiteId  = SITE_ID;
                page.Title   = "My fourth page";
                page.Ingress = "My fourth ingress";
                page.Body    = "My fourth body";

                await api.Pages.SaveDraftAsync(page);

                Assert.Equal(count + 1, (await api.Pages.GetAllAsync(SITE_ID)).Count());
            }
        }
예제 #7
0
        public async Task CanNotUpdateCopyOriginalPageWithAnotherCopy()
        {
            using (var api = CreateApi())
            {
                var page = await MyPage.CreateAsync(api);

                page.Title          = "New title";
                page.OriginalPageId = PAGE_8_ID; // PAGE_8 is an copy of PAGE_7

                var exn = await Assert.ThrowsAsync <InvalidOperationException>(async() =>
                {
                    await api.Pages.SaveAsync(page);
                });

                Assert.Equal("Can not set copy of a copy", exn.Message);
            }
        }
예제 #8
0
        private async Task <MyPage> MakePage(Guid siteId)
        {
            var    pageRepository = new PageRepository(SessionFactory, new ContentServiceFactory(_contentFactory), Module.Mapper);
            MyPage page;

            using var api = CreateApi();
            page          = await MyPage.CreateAsync(api).ConfigureAwait(false);

            page.SiteId    = siteId;
            page.Title     = "Startpage";
            page.Text      = "Welcome";
            page.IsHidden  = true;
            page.Published = DateTime.Now;
            await pageRepository.Save(page).ConfigureAwait(false);

            return(page);
        }
        public async Task Save_WithPublishDateInPastShouldNotHaveDraft()
        {
            var siteId = await MakeSite().ConfigureAwait(false);

            using var api = CreateApi();
            MyPage page = await MyPage.CreateAsync(api).ConfigureAwait(false);

            page.SiteId    = siteId;
            page.Title     = "Startpage";
            page.Text      = "Welcome";
            page.IsHidden  = true;
            page.Published = DateTime.Now.AddDays(-42);
            await PageRepository.Save(page).ConfigureAwait(false);

            var pageId = page.Id;
            var draft  = await PageRepository.GetDraftById <MyPage>(pageId).ConfigureAwait(false);

            Assert.IsNull(draft);
        }
예제 #10
0
        public async Task Save_PublishedAsDraft()
        {
            var siteId = await MakeSite().ConfigureAwait(false);

            using var api = CreateApi();
            MyPage page = await MyPage.CreateAsync(api).ConfigureAwait(false);

            page.SiteId    = siteId;
            page.Title     = "Startpage";
            page.Text      = "Welcome";
            page.IsHidden  = true;
            page.Published = DateTime.Now.AddDays(-1);
            await PageRepository.Save(page).ConfigureAwait(false);

            await PageRepository.SaveDraft(page).ConfigureAwait(false);

            var pageId    = page.Id;
            var retrieved = await PageRepository.GetDraftById <MyPage>(pageId).ConfigureAwait(false);

            Assert.AreEqual(pageId, retrieved.Id);
            Assert.AreEqual(siteId, retrieved.SiteId);
        }
예제 #11
0
        public async Task DeleteDraft()
        {
            var siteId = await MakeSite().ConfigureAwait(false);

            using var api = CreateApi();
            MyPage page = await MyPage.CreateAsync(api).ConfigureAwait(false);

            page.SiteId    = siteId;
            page.Title     = "Startpage";
            page.Text      = "Welcome";
            page.IsHidden  = true;
            page.Published = DateTime.Now;
            await PageRepository.Save(page).ConfigureAwait(false);

            await PageRepository.SaveDraft(page).ConfigureAwait(false);

            var draftId = page.Id;
            await PageRepository.DeleteDraft(draftId).ConfigureAwait(false);

            var retrieved = await PageRepository.GetDraftById <MyPage>(draftId).ConfigureAwait(false);

            Assert.IsNull(retrieved);
        }
예제 #12
0
        public async Task Save_UnpublishedTwiceDoesNotCreateDraft()
        {
            DateTime?unpublished = null;
            var      siteId      = await MakeSite().ConfigureAwait(false);

            using var api = CreateApi();
            MyPage page = await MyPage.CreateAsync(api).ConfigureAwait(false);

            page.SiteId    = siteId;
            page.Title     = "Startpage";
            page.Text      = "Welcome";
            page.IsHidden  = true;
            page.Published = unpublished;
            await PageRepository.Save(page).ConfigureAwait(false);

            page.Text = $"Welcome, ${Name.FirstName()}";
            await PageRepository.Save(page).ConfigureAwait(false);

            var pageId = page.Id;
            var draft  = await PageRepository.GetDraftById <MyPage>(pageId).ConfigureAwait(false);

            Assert.IsNull(draft);
        }
예제 #13
0
        public override async Task InitializeAsync()
        {
            _services = CreateServiceCollection()
                        .AddSingleton <IMyService, MyService>()
                        .BuildServiceProvider();

            using (var api = CreateApi())
            {
                Piranha.App.Init(api);

                Piranha.App.Fields.Register <MyFourthField>();

                new ContentTypeBuilder(api)
                .AddType(typeof(MissingPage))
                .AddType(typeof(MyBlogPage))
                .AddType(typeof(MyPage))
                .AddType(typeof(MyCollectionPage))
                .AddType(typeof(MyDIPage))
                .Build();

                var site = new Site
                {
                    Id         = SITE_ID,
                    Title      = "My Test Site",
                    InternalId = "MyTestSite",
                    IsDefault  = true
                };
                await api.Sites.SaveAsync(site);

                var page1 = await MyPage.CreateAsync(api);

                page1.Id              = PAGE_1_ID;
                page1.SiteId          = SITE_ID;
                page1.Title           = "My first page";
                page1.MetaKeywords    = "Keywords";
                page1.MetaDescription = "Description";
                page1.OgTitle         = "Og Title";
                page1.OgDescription   = "Og Description";
                page1.Ingress         = "My first ingress";
                page1.Body            = "My first body";
                page1.Blocks.Add(new Extend.Blocks.TextBlock
                {
                    Body = "Sollicitudin Aenean"
                });
                page1.Blocks.Add(new Extend.Blocks.TextBlock
                {
                    Body = "Ipsum Elit"
                });
                page1.Published = DateTime.Now;
                await api.Pages.SaveAsync(page1);

                var page2 = await MyPage.CreateAsync(api);

                page2.Id         = PAGE_2_ID;
                page2.SiteId     = SITE_ID;
                page2.Title      = "My second page";
                page2.MetaFollow = false;
                page2.MetaIndex  = false;
                page2.Ingress    = "My second ingress";
                page2.Body       = "My second body";
                await api.Pages.SaveAsync(page2);

                var page3 = await MyPage.CreateAsync(api);

                page3.Id      = PAGE_3_ID;
                page3.SiteId  = SITE_ID;
                page3.Title   = "My third page";
                page3.Ingress = "My third ingress";
                page3.Body    = "My third body";
                await api.Pages.SaveAsync(page3);

                var page4 = await MyCollectionPage.CreateAsync(api);

                page4.SiteId    = SITE_ID;
                page4.Title     = "My collection page";
                page4.SortOrder = 1;
                page4.Texts.Add(new TextField
                {
                    Value = "First text"
                });
                page4.Texts.Add(new TextField
                {
                    Value = "Second text"
                });
                page4.Texts.Add(new TextField
                {
                    Value = "Third text"
                });
                await api.Pages.SaveAsync(page4);

                var page5 = await MyBlogPage.CreateAsync(api);

                page5.SiteId = SITE_ID;
                page5.Title  = "Blog Archive";
                await api.Pages.SaveAsync(page5);

                var page6 = await MyDIPage.CreateAsync(api);

                page6.Id     = PAGE_DI_ID;
                page6.SiteId = SITE_ID;
                page6.Title  = "My Injection Page";
                await api.Pages.SaveAsync(page6);

                var page7 = await MyPage.CreateAsync(api);

                page7.Id        = PAGE_7_ID;
                page7.SiteId    = SITE_ID;
                page7.Title     = "My base page";
                page7.Ingress   = "My base ingress";
                page7.Body      = "My base body";
                page7.ParentId  = PAGE_1_ID;
                page7.SortOrder = 1;
                await api.Pages.SaveAsync(page7);

                var page8 = await MyPage.CreateAsync(api);

                page8.OriginalPageId = PAGE_7_ID;
                page8.Id             = PAGE_8_ID;
                page8.SiteId         = SITE_ID;
                page8.Title          = "My copied page";
                page8.ParentId       = PAGE_1_ID;
                page8.SortOrder      = 2;
                page8.IsHidden       = true;
                page8.Route          = "test-route";

                await api.Pages.SaveAsync(page8);
            }
        }
예제 #14
0
        public override async Task InitializeAsync()
        {
            using (var api = CreateApi())
            {
                Piranha.App.Init(api);

                new ContentTypeBuilder(api)
                .AddType(typeof(MyPage))
                .AddType(typeof(MySiteContent))
                .Build();

                await api.Sites.SaveAsync(new Site
                {
                    Id         = SITE_1_ID,
                    SiteTypeId = "MySiteContent",
                    InternalId = SITE_1,
                    Title      = SITE_1,
                    Hostnames  = SITE_1_HOSTS,
                    IsDefault  = true
                });

                await api.Sites.SaveAsync(new Site
                {
                    InternalId = SITE_4,
                    Title      = SITE_4
                });

                await api.Sites.SaveAsync(new Site
                {
                    InternalId = SITE_5,
                    Title      = SITE_5
                });

                await api.Sites.SaveAsync(new Site
                {
                    InternalId = SITE_6,
                    Title      = SITE_6
                });

                // Sites for testing hostname routing
                await api.Sites.SaveAsync(new Site
                {
                    InternalId = "RoutingTest1",
                    Title      = "RoutingTest1",
                    Hostnames  = "mydomain.com,localhost"
                });

                await api.Sites.SaveAsync(new Site
                {
                    InternalId = "RoutingTest2",
                    Title      = "RoutingTest2",
                    Hostnames  = " mydomain.com/en"
                });

                await api.Sites.SaveAsync(new Site
                {
                    InternalId = "RoutingTest3",
                    Title      = "RoutingTest3",
                    Hostnames  = "sub.mydomain.com , sub2.localhost"
                });

                var content = await MySiteContent.CreateAsync(api);

                content.Header = "<p>Lorem ipsum</p>";
                content.Footer = "<p>Tellus Ligula</p>";
                await api.Sites.SaveContentAsync(SITE_1_ID, content);

                var page1 = await MyPage.CreateAsync(api);

                page1.SiteId    = SITE_1_ID;
                page1.Title     = "Startpage";
                page1.Text      = "Welcome";
                page1.IsHidden  = true;
                page1.Published = DateTime.Now;
                await api.Pages.SaveAsync(page1);

                var page2 = await MyPage.CreateAsync(api);

                page2.SiteId    = SITE_1_ID;
                page2.SortOrder = 1;
                page2.Title     = "Second page";
                page2.Text      = "The second page";
                await api.Pages.SaveAsync(page2);

                var page3 = await MyPage.CreateAsync(api);

                page3.SiteId    = SITE_1_ID;
                page3.ParentId  = page2.Id;
                page3.Title     = "Subpage";
                page3.Text      = "The subpage";
                page3.Published = DateTime.Now;
                await api.Pages.SaveAsync(page3);
            }
        }
예제 #15
0
        public override async Task InitializeAsync()
        {
            using (var api = CreateApi())
            {
                Piranha.App.Init(api);

                var pageBuilder = new PageTypeBuilder(api)
                                  .AddType(typeof(MyPage));
                pageBuilder.Build();

                var postBuilder = new PostTypeBuilder(api)
                                  .AddType(typeof(MyPost));
                postBuilder.Build();

                // Add site
                var site1 = new Site
                {
                    Id         = SITE1_ID,
                    Title      = "Page Site",
                    InternalId = "PostSite",
                    IsDefault  = true
                };
                await api.Sites.SaveAsync(site1);

                var site2 = new Site
                {
                    Id         = SITE2_ID,
                    Title      = "Page Site 2",
                    InternalId = "PostSite2",
                    Hostnames  = "www.myothersite.com",
                    IsDefault  = false
                };
                await api.Sites.SaveAsync(site2);

                // Add pages
                var page1 = await MyPage.CreateAsync(api);

                page1.Id        = PAGE1_ID;
                page1.SiteId    = SITE1_ID;
                page1.Title     = "Blog";
                page1.Published = DateTime.Now;
                await api.Pages.SaveAsync(page1);

                var page2 = await MyPage.CreateAsync(api);

                page2.Id        = PAGE2_ID;
                page2.SiteId    = SITE2_ID;
                page2.Title     = "News";
                page2.Published = DateTime.Now;
                await api.Pages.SaveAsync(page2);

                // Add categories
                var category1 = new Models.Taxonomy
                {
                    Id    = CATEGORY1_ID,
                    Title = "Default category"
                };

                var category2 = new Models.Taxonomy
                {
                    Id    = CATEGORY2_ID,
                    Title = "Default category"
                };

                // Add posts
                var post1 = await MyPost.CreateAsync(api);

                post1.Id       = POST1_ID;
                post1.BlogId   = page1.Id;
                post1.Category = category1;
                post1.Title    = "My first post";
                post1.Body     = "My first body";
                post1.Tags.Add(new Models.Taxonomy
                {
                    Id    = TAG1_ID,
                    Title = "My tag"
                });
                post1.Published = DateTime.Now;
                await api.Posts.SaveAsync(post1);

                var post2 = await MyPost.CreateAsync(api);

                post2.Id       = POST2_ID;
                post2.BlogId   = page2.Id;
                post2.Category = category2;
                post2.Title    = "My second post";
                post2.Body     = "My second body";
                post2.Tags.Add(new Models.Taxonomy
                {
                    Id    = TAG2_ID,
                    Title = "My other tag"
                });
                post2.Published = DateTime.Now;
                await api.Posts.SaveAsync(post2);
            }
        }
예제 #16
0
        public override async Task InitializeAsync()
        {
            using (var api = CreateApi())
            {
                Piranha.App.Init(api);

                var builder = new PageTypeBuilder(api)
                              .AddType(typeof(MyPage));
                builder.Build();

                // Add site
                var site1 = new Site
                {
                    Id         = SITE1_ID,
                    Title      = "Page Site",
                    InternalId = "PageSite",
                    IsDefault  = true
                };
                await api.Sites.SaveAsync(site1);

                var site2 = new Site
                {
                    Id         = SITE2_ID,
                    Title      = "Page Site 2",
                    InternalId = "PageSite2",
                    Hostnames  = "www.myothersite.com",
                    IsDefault  = false
                };
                await api.Sites.SaveAsync(site2);

                // Add pages
                var page1 = await MyPage.CreateAsync(api);

                page1.Id        = PAGE1_ID;
                page1.SiteId    = SITE1_ID;
                page1.Title     = "My first page";
                page1.Body      = "My first body";
                page1.Published = DateTime.Now;
                await api.Pages.SaveAsync(page1);

                var page2 = await MyPage.CreateAsync(api);

                page2.Id        = PAGE2_ID;
                page2.SiteId    = SITE2_ID;
                page2.Title     = "My second page";
                page2.Body      = "My second body";
                page2.Published = DateTime.Now;
                await api.Pages.SaveAsync(page2);

                var page3 = await MyPage.CreateAsync(api);

                page3.Id           = PAGE3_ID;
                page3.SiteId       = SITE1_ID;
                page3.SortOrder    = 1;
                page3.Title        = "My third page";
                page3.Published    = DateTime.Now;
                page3.RedirectUrl  = "http://www.redirect.com";
                page3.RedirectType = Models.RedirectType.Temporary;
                await api.Pages.SaveAsync(page3);
            }
        }