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(); }
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); }
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); }); } }
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()); } }
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); } }
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); }
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); }
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); }
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); }
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); } }
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); } }
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); } }
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); } }