public void AdviseGroupMenuItems_IfAdviseGroupsExistAndItemWithoutAdviseGroupIsSelected_ReturnsCorrectMenuItems()
        {
            // Arrange

            var adviseGroups = new[]
            {
                new AdviseGroupModel {
                    Id = new ItemId("1"), Name = "Advise Group 1"
                },
                new AdviseGroupModel {
                    Id = new ItemId("2"), Name = "Advise Group 2"
                },
            };

            var adviseGroupHelperStub = new Mock <IAdviseGroupHelper>();

            adviseGroupHelperStub.Setup(x => x.AdviseGroups).Returns(adviseGroups);

            var adviseGroupHolderStub = new Mock <BasicAdviseGroupHolder>();

            adviseGroupHolderStub.Setup(x => x.CurrentAdviseGroup).Returns <AdviseGroupModel>(null);

            var mocker = new AutoMocker();

            mocker.Use(adviseGroupHelperStub);

            // Act

            var menuItems = DerivedExplorerItem.InvokeGetAdviseGroupMenuItems(adviseGroupHolderStub.Object, Mock.Of <ILibraryExplorerViewModel>(), adviseGroupHelperStub.Object);

            // Assert

            var expectedMenuItems = new BasicMenuItem[]
            {
                new CommandMenuItem(() => Task.CompletedTask)
                {
                    Header = "New Advise Group ...", IconKind = PackIconKind.FolderPlus
                },
                new SeparatorMenuItem(),
                new CommandMenuItem(() => Task.CompletedTask)
                {
                    Header = "Advise Group 1", IconKind = null
                },
                new CommandMenuItem(() => Task.CompletedTask)
                {
                    Header = "Advise Group 2", IconKind = null
                },
            };

            menuItems.Should().BeEquivalentTo(expectedMenuItems, x => x.WithStrictOrdering().RespectingRuntimeTypes());
        }
            private static void AddAnotherMenuItem(BasicMenu basicMenu)
            {
                GameObject gameObject = NGUITools.AddChild(basicMenu.m_MenuGrid.gameObject, basicMenu.m_BasicMenuItemPrefab);

                gameObject.name = "ModSettings MenuItem";
                BasicMenuItem item = gameObject.GetComponent <BasicMenuItem>();

                BasicMenu.BasicMenuItemView view = item.m_View;
                int           itemIndex          = basicMenu.m_MenuItems.Count;
                EventDelegate onClick            = new EventDelegate(new Action(() => basicMenu.OnItemClicked(itemIndex)));

                view.m_Button.onClick.Add(onClick);
                EventDelegate onDoubleClick = new EventDelegate(new Action(() => basicMenu.OnItemDoubleClicked(itemIndex)));

                view.m_DoubleClickButton.m_OnDoubleClick.Add(onDoubleClick);
                basicMenu.m_MenuItems.Add(view);
            }
        public async Task ContextMenuItems_IfSomeSongsSelected_ReturnsCorrectMenuItems()
        {
            // Arrange

            var songs = new[]
            {
                new SongModel {
                    Id = new ItemId("0")
                },
                new SongModel {
                    Id = new ItemId("1")
                },
                new SongModel {
                    Id = new ItemId("2")
                },
            };

            var mocker = new AutoMocker();
            var target = mocker.CreateInstance <PlaylistViewModel>();

            await target.SetPlaylistSongs(songs, CancellationToken.None);

            var selectedSongItems = new List <SongListItem>
            {
                target.SongItems[0],
                target.SongItems[2],
            };

            target.SelectedSongItems = selectedSongItems;
            target.SelectedSongItem  = selectedSongItems[0];

            // Act

            var menuItems = target.ContextMenuItems;

            // Assert

            var expectedMenuItems = new BasicMenuItem[]
            {
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Play From This Song", IconKind = PackIconKind.Play
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Play Next", IconKind = PackIconKind.PlaylistAdd
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Play Last", IconKind = PackIconKind.PlaylistAdd
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Remove From Playlist", IconKind = PackIconKind.PlaylistMinus
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Clear Playlist", IconKind = PackIconKind.PlaylistRemove
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Go To Disc", IconKind = PackIconKind.Album
                },
                new ExpandableMenuItem
                {
                    Header   = "Set Rating",
                    IconKind = PackIconKind.Star,
                    Items    = new[]
                    {
                        new SetRatingMenuItem(RatingModel.R10, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R9, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R8, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R7, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R6, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R5, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R4, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R3, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R2, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R1, () => Task.CompletedTask),
                    },
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Properties", IconKind = PackIconKind.Pencil
                },
            };

            menuItems.Should().BeEquivalentTo(expectedMenuItems, x => x.WithStrictOrdering().RespectingRuntimeTypes());
        }
        public void ContextMenuItems_IfActiveSongsSelected_ReturnsCorrectMenuItems()
        {
            // Arrange

            var songs = new[]
            {
                new SongModel {
                    Id = new ItemId("0")
                },
                new SongModel {
                    Id = new ItemId("1"), DeleteDate = new DateTime(2021, 10, 25)
                },
                new SongModel {
                    Id = new ItemId("2")
                },
            };

            var mocker = new AutoMocker();
            var target = mocker.CreateInstance <DiscSongListViewModel>();

            target.SetSongs(songs);
            target.SelectedSongItems = new List <SongListItem>
            {
                target.SongItems[0],
                target.SongItems[2],
            };

            // Act

            var menuItems = target.ContextMenuItems;

            // Assert

            var expectedMenuItems = new BasicMenuItem[]
            {
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Play Next", IconKind = PackIconKind.PlaylistAdd
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Play Last", IconKind = PackIconKind.PlaylistAdd
                },
                new ExpandableMenuItem
                {
                    Header   = "Set Rating",
                    IconKind = PackIconKind.Star,
                    Items    = new[]
                    {
                        new SetRatingMenuItem(RatingModel.R10, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R9, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R8, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R7, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R6, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R5, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R4, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R3, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R2, () => Task.CompletedTask),
                        new SetRatingMenuItem(RatingModel.R1, () => Task.CompletedTask),
                    },
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Delete From Disc", IconKind = PackIconKind.DeleteForever
                },
                new CommandMenuItem(() => { }, false)
                {
                    Header = "Properties", IconKind = PackIconKind.Pencil
                },
            };

            menuItems.Should().BeEquivalentTo(expectedMenuItems, x => x.WithStrictOrdering().RespectingRuntimeTypes());
        }