Esempio n. 1
0
        public async Task <IActionResult> Reorder(Guid id, [FromBody] List <ReorderMenuItems.MenuItem> model)
        {
            var command = new ReorderMenuItems {
                SiteId = SiteId, Id = id, MenuItems = model
            };
            await Task.Run(() => _commandSender.Send <ReorderMenuItems, Menu>(command));

            return(new NoContentResult());
        }
Esempio n. 2
0
        public IActionResult Reorder(Guid id, [FromBody] List <ReorderMenuItems.MenuItem> model)
        {
            var command = new ReorderMenuItems {
                SiteId = SiteId, Id = id, MenuItems = model
            };

            _commandSender.Send <ReorderMenuItems, Menu>(command);
            return(new NoContentResult());
        }
Esempio n. 3
0
        public void ReorderMenuItems(ReorderMenuItems cmd, IValidator <ReorderMenuItems> validator)
        {
            validator.ValidateCommand(cmd);

            var reorderedMenuItems = new List <MenuItemsReordered.MenuItem>();

            var groupsByParent = cmd.MenuItems.GroupBy(x => x.ParentId).ToList();

            foreach (var group in groupsByParent)
            {
                var parentId = group.Key;

                if (parentId != Guid.Empty && MenuItems.FirstOrDefault(x => x.Id == parentId) == null)
                {
                    throw new Exception("Parent menu item not found.");
                }

                var items = group.ToList();

                for (int i = 0; i < items.Count; i++)
                {
                    var id        = items[i].Id;
                    var sortOrder = i + 1;

                    var menuItem = MenuItems.FirstOrDefault(x => x.Id == id);

                    if (menuItem == null || menuItem.Status == MenuItemStatus.Deleted)
                    {
                        throw new Exception("Menu item not found.");
                    }

                    if (menuItem.ParentId == parentId && menuItem.SortOrder == sortOrder)
                    {
                        continue;
                    }

                    menuItem.Reorder(parentId, sortOrder);

                    reorderedMenuItems.Add(new MenuItemsReordered.MenuItem
                    {
                        Id        = id,
                        ParentId  = parentId,
                        SortOrder = sortOrder
                    });
                }
            }

            AddEvent(new MenuItemsReordered
            {
                SiteId          = SiteId,
                AggregateRootId = Id,
                Name            = Name,
                MenuItems       = reorderedMenuItems
            });
        }
Esempio n. 4
0
        public void Should_have_validation_error_when_site_id_is_empty()
        {
            var command = new ReorderMenuItems
            {
                SiteId = Guid.Empty
            };

            var siteRulesMock = new Mock <ISiteRules>();
            var validator     = new ReorderMenuItemsValidator(siteRulesMock.Object);

            validator.ShouldHaveValidationErrorFor(x => x.SiteId, command);
        }
Esempio n. 5
0
        public void Should_have_validation_error_when_site_does_not_exist()
        {
            var command = new ReorderMenuItems
            {
                SiteId = Guid.NewGuid()
            };

            var siteRulesMock = new Mock <ISiteRules>();

            siteRulesMock.Setup(x => x.DoesSiteExist(command.SiteId)).Returns(false);

            var validator = new ReorderMenuItemsValidator(siteRulesMock.Object);

            validator.ShouldHaveValidationErrorFor(x => x.SiteId, command);
        }
Esempio n. 6
0
        public void Should_throw_exception_if_menu_item_does_not_exist()
        {
            _command = new ReorderMenuItems
            {
                Id        = _menu.Id,
                MenuItems = new List <ReorderMenuItems.MenuItem>
                {
                    new ReorderMenuItems.MenuItem
                    {
                        Id = Guid.NewGuid()
                    }
                }
            };
            var validatorMock = new Mock <IValidator <ReorderMenuItems> >();

            validatorMock.Setup(x => x.Validate(_command)).Returns(new ValidationResult());
            Assert.Throws <Exception>(() => _menu.ReorderMenuItems(_command, validatorMock.Object));
        }
        public void Should_throw_exception_if_menu_not_found()
        {
            var command = new ReorderMenuItems
            {
                Id        = Guid.NewGuid(),
                MenuItems = new List <ReorderMenuItems.MenuItem>()
            };

            var menuRepositoryMock = new Mock <IMenuRepository>();

            menuRepositoryMock.Setup(x => x.GetById(command.Id)).Returns((Menu)null);

            var validatorMock = new Mock <IValidator <ReorderMenuItems> >();

            validatorMock.Setup(x => x.Validate(command)).Returns(new ValidationResult());

            var handler = new ReorderMenuItemsHandler(menuRepositoryMock.Object, validatorMock.Object);

            Assert.Throws <Exception>(() => handler.Handle(command));
        }
        public void Should_save_menu_when_reorder_menu_items()
        {
            var createMenuCommand = new CreateMenu
            {
                SiteId = Guid.NewGuid(),
                Id     = Guid.NewGuid(),
                Name   = "My Menu"
            };

            var createMenuValidatorMock = new Mock <IValidator <CreateMenu> >();

            createMenuValidatorMock.Setup(x => x.Validate(createMenuCommand)).Returns(new ValidationResult());

            var menu = Menu.CreateNew(createMenuCommand, createMenuValidatorMock.Object);

            var reorderMenuItemsCommand = new ReorderMenuItems
            {
                Id        = Guid.NewGuid(),
                MenuItems = new List <ReorderMenuItems.MenuItem>()
            };

            var menuRepositoryMock = new Mock <IMenuRepository>();

            menuRepositoryMock.Setup(x => x.GetById(It.IsAny <Guid>())).Returns(menu);
            menuRepositoryMock.Setup(x => x.Update(It.IsAny <Menu>()));

            var validatorMock = new Mock <IValidator <ReorderMenuItems> >();

            validatorMock.Setup(x => x.Validate(reorderMenuItemsCommand)).Returns(new ValidationResult());

            var createMenuHandler = new ReorderMenuItemsHandler(menuRepositoryMock.Object, validatorMock.Object);

            createMenuHandler.Handle(reorderMenuItemsCommand);

            menuRepositoryMock.Verify(x => x.Update(It.IsAny <Menu>()));
        }
Esempio n. 9
0
        public void Setup()
        {
            var createMenuCommand = new CreateMenu
            {
                SiteId = Guid.NewGuid(),
                Id     = Guid.NewGuid(),
                Name   = "My Menu"
            };

            var createMenuValidatorMock = new Mock <IValidator <CreateMenu> >();

            createMenuValidatorMock.Setup(x => x.Validate(createMenuCommand)).Returns(new ValidationResult());

            _menu = Menu.CreateNew(createMenuCommand, createMenuValidatorMock.Object);

            var addMenuItem1 = new AddMenuItem
            {
                SiteId       = _menu.SiteId,
                MenuId       = _menu.Id,
                MenuItemId   = Guid.NewGuid(),
                MenuItemType = MenuItemType.Page,
                PageId       = Guid.NewGuid(),
                Text         = "Menu Item 1"
            };

            var addMenuItem2 = new AddMenuItem
            {
                SiteId       = _menu.SiteId,
                MenuId       = _menu.Id,
                MenuItemId   = Guid.NewGuid(),
                MenuItemType = MenuItemType.Page,
                PageId       = Guid.NewGuid(),
                Text         = "Menu Item 2"
            };

            var addMenuItem3 = new AddMenuItem
            {
                SiteId       = _menu.SiteId,
                MenuId       = _menu.Id,
                MenuItemId   = Guid.NewGuid(),
                MenuItemType = MenuItemType.Page,
                PageId       = Guid.NewGuid(),
                Text         = "Menu Item 3"
            };

            var addMenuItemValidatorMock = new Mock <IValidator <AddMenuItem> >();

            addMenuItemValidatorMock.Setup(x => x.Validate(addMenuItem1)).Returns(new ValidationResult());
            addMenuItemValidatorMock.Setup(x => x.Validate(addMenuItem2)).Returns(new ValidationResult());
            addMenuItemValidatorMock.Setup(x => x.Validate(addMenuItem3)).Returns(new ValidationResult());

            _menu.AddMenuItem(addMenuItem1, addMenuItemValidatorMock.Object);
            _menu.AddMenuItem(addMenuItem2, addMenuItemValidatorMock.Object);
            _menu.AddMenuItem(addMenuItem3, addMenuItemValidatorMock.Object);

            _command = new ReorderMenuItems
            {
                Id        = _menu.Id,
                MenuItems = new List <ReorderMenuItems.MenuItem>
                {
                    new ReorderMenuItems.MenuItem
                    {
                        Id = addMenuItem1.MenuItemId
                    },
                    new ReorderMenuItems.MenuItem
                    {
                        Id       = addMenuItem3.MenuItemId,
                        ParentId = addMenuItem1.MenuItemId
                    },
                    new ReorderMenuItems.MenuItem
                    {
                        Id       = addMenuItem2.MenuItemId,
                        ParentId = addMenuItem1.MenuItemId
                    }
                }
            };

            var validatorMock = new Mock <IValidator <ReorderMenuItems> >();

            validatorMock.Setup(x => x.Validate(_command)).Returns(new ValidationResult());

            _menu.ReorderMenuItems(_command, validatorMock.Object);

            _menuItem1 = _menu.MenuItems.FirstOrDefault(x => x.Id == addMenuItem1.MenuItemId);
            _menuItem2 = _menu.MenuItems.FirstOrDefault(x => x.Id == addMenuItem2.MenuItemId);
            _menuItem3 = _menu.MenuItems.FirstOrDefault(x => x.Id == addMenuItem3.MenuItemId);
        }