public async Task <Page> CreateAsync(CreatePageCommand cmd) { if (!cmd.IsValid) { throw new InvalidCommandException(nameof(CreatePageCommand), cmd); } var book = await _unitOfWork.BookRepository.FindAsync(cmd.BookId); if (book == null) { throw new NotFoundException(nameof(Book), cmd.BookId); } if (!_auth.CanWrite(book)) { throw new NotAllowedException(_auth.Login, nameof(Book), cmd.BookId); } var page = new Page { Book = book, Title = cmd.Title, Slug = await GetUniqueSlugAsync(cmd.Slug, book.Id), Type = cmd.Type, State = cmd.State, Owner = await _auth.GetCurrentUserEntityAsync(), CreatedAt = DateTime.Now }; _unitOfWork.PageRepository.Create(page); await _unitOfWork.SaveAsync(); return(page); }
/// <summary> /// Initializes a new instance of the <see cref="CommandMapper"/> class. /// </summary> /// <param name="createSpaceCommand">The command to create a space.</param> /// <param name="listSpacesCommand">The command to list all spaces.</param> /// <param name="createPageCommand">The command to create a page.</param> public CommandMapper( CreateSpaceCommand createSpaceCommand, ListSpacesCommand listSpacesCommand, CreatePageCommand createPageCommand) { #region Spaces Commands Command createSpace = new Command("create-space") { new Argument <SpaceName>("name"), }; createSpace.Description = "Creates a new space."; createSpace.Handler = CommandHandler.Create <SpaceName>(createSpaceCommand.CreateSpace); Command listSpaces = new Command("list-spaces"); listSpaces.Description = "Shows a list of all currently existing spaces."; listSpaces.Handler = CommandHandler.Create(listSpacesCommand.ListSpaces); #endregion #region Pages Command Command createPage = new Command("create-page") { new Argument <SpaceName>("space") { Description = "parent space for the new page", }, new Argument <PageName>("page") { Description = "page name", }, new Argument <FileInfo>("file") { Description = "file to read the content from", }, }; createPage.Description = "Creates a new page within a space."; createPage.Handler = CommandHandler.Create <SpaceName, PageName, FileInfo>(createPageCommand.CreatePage); #endregion _rootCommand = new RootCommand() { // spaces createSpace, listSpaces, // pages createPage, }; }
public void Should_Create_New_Page_With_Access_Rules() { RunActionInTransaction( session => { var tempLayout = TestDataProvider.CreateNewLayout(); session.SaveOrUpdate(tempLayout); session.Flush(); var uow = new DefaultUnitOfWork(session); var repository = new DefaultRepository(uow); var configMock = new Mock <ICmsConfiguration>(); configMock.SetupAllProperties().Setup(f => f.Security.AccessControlEnabled).Returns(true); configMock.Setup(f => f.Security.DefaultAccessRules).Returns(new AccessControlCollection { DefaultAccessLevel = "readwrite" }); var config = configMock.Object; var command = new CreatePageCommand( new Mock <IPageService>().SetupAllProperties().Object, new DefaultUrlService(uow, config), config, new Mock <IOptionService>().SetupAllProperties().Object, new Mock <IMasterPageService>().SetupAllProperties().Object); command.UnitOfWork = uow; command.Repository = repository; command.AccessControlService = new DefaultAccessControlService(Container.Resolve <ISecurityService>(), new HttpRuntimeCacheService(), config, repository); var contextMock = new Mock <ICommandContext>(); contextMock.Setup(c => c.Principal).Returns(new GenericPrincipal(new GenericIdentity("John Doe"), new[] { RootModuleConstants.UserRoles.EditContent })); command.Context = contextMock.Object; var request = new AddNewPageViewModel(); request.AccessControlEnabled = true; request.PageTitle = "TestCreatePageCommand"; request.PageUrl = "/test-CreatePageCommand/"; request.TemplateId = tempLayout.Id; request.UserAccessList = new List <UserAccessViewModel>( new[] { new UserAccessViewModel { Identity = "test 1", AccessLevel = AccessLevel.ReadWrite }, new UserAccessViewModel { Identity = "test 2", AccessLevel = AccessLevel.Deny } }); var response = command.Execute(request); session.Clear(); Assert.IsNotNull(response); var page = session.Query <Page>().FirstOrDefault(f => f.Id == response.PageId); Assert.IsNotNull(page); Assert.IsNotNull(page.AccessRules); Assert.AreEqual(2, page.AccessRules.Count()); }); }
public async Task <ActionResult <int> > Create([FromForm] CreatePageCommand command) { var res = await _mediator.Send(command); return(Ok(res)); }
public void Should_Create_New_Page_With_Access_Rules() { RunActionInTransaction( session => { var tempLayout = TestDataProvider.CreateNewLayout(); session.SaveOrUpdate(tempLayout); session.Flush(); var uow = new DefaultUnitOfWork(session); var repository = new DefaultRepository(uow); var configMock = new Mock<ICmsConfiguration>(); configMock.SetupAllProperties().Setup(f => f.Security.AccessControlEnabled).Returns(true); configMock.Setup(f => f.Security.DefaultAccessRules).Returns(new AccessControlCollection { DefaultAccessLevel = "readwrite" }); var config = configMock.Object; var command = new CreatePageCommand( new Mock<IPageService>().SetupAllProperties().Object, new DefaultUrlService(uow, config), config, new DefaultAccessControlService(Container.Resolve<ISecurityService>(), new HttpRuntimeCacheService(), config), new Mock<IOptionService>().SetupAllProperties().Object); command.UnitOfWork = uow; command.Repository = repository; var request = new AddNewPageViewModel(); request.AccessControlEnabled = true; request.PageTitle = "TestCreatePageCommand"; request.PageUrl = "/test-CreatePageCommand/"; request.TemplateId = tempLayout.Id; request.UserAccessList = new List<UserAccessViewModel>( new[] { new UserAccessViewModel { Identity = "test 1", AccessLevel = AccessLevel.ReadWrite }, new UserAccessViewModel { Identity = "test 2", AccessLevel = AccessLevel.Deny } }); var response = command.Execute(request); session.Clear(); Assert.IsNotNull(response); var page = session.Query<Page>().FirstOrDefault(f => f.Id == response.PageId); Assert.IsNotNull(page); Assert.IsNotNull(page.AccessRules); Assert.AreEqual(2, page.AccessRules.Count()); }); }