public void InsertIcons_SingleChosen_ShouldBeInserted()
        {
            // Arrange
            using var wrapper = new MainWindowViewModelWrapper();
            var(_, part)      = wrapper.OpenAndInsertPart(_sourceFile);

            // Act
            wrapper.InsertIcons(part, _undoIcon);

            // Assert
            Assert.AreEqual(1, part.Children.Count);
            Assert.AreEqual("undo", ((IconViewModel)part.Children[0]).Name);
        }
        public void Remove_IconSelected_ShouldBeRemoved()
        {
            // Arrange
            using var wrapper = new MainWindowViewModelWrapper();
            var(_, part)      = wrapper.OpenAndInsertPart(_sourceFile);
            wrapper.InsertIcons(part, _undoIcon);
            Assume.That(part.Children, Is.Not.Empty, "Icon was not inserted");
            wrapper.ViewModel.SelectedItem = part.Children[0];

            // Act
            wrapper.ViewModel.RemoveCommand.Execute();

            // Assert
            Assert.IsEmpty(part.Children, "Icon was not removed");
        }
        public void CloseDocument_IconsRemoved_ShouldShowWarning()
        {
            using var wrapper = new MainWindowViewModelWrapper();
            var(doc, part)    = wrapper.OpenAndInsertPart(_sourceFile);

            // Insert an icon and save the document
            wrapper.InsertIcons(part, _redoIcon);

            using var folder = new TempFolder();
            var destination = Path.Combine(folder.FullName, "Output.xlsx");

            wrapper.SaveAs(doc, destination);
            Assert.IsFalse(doc.HasUnsavedChanges, "The icon insertion was apparently not saved");

            // Remove it and do the appropriate checks
            wrapper.ViewModel.SelectedItem = doc.Children.FirstOrDefault(c => c is OfficePartViewModel)?.Children.FirstOrDefault(c => c is IconViewModel);
            Assert.IsNotNull(wrapper.ViewModel.SelectedItem, "Icon was apparently not created");
            wrapper.AssertMessage(wrapper.ViewModel.RemoveCommand.Execute, MessageBoxImage.Warning, MessageBoxResult.Yes);
            Assert.IsTrue(doc.HasUnsavedChanges, "No unsaved changes detected after removing a part");
            wrapper.AssertMessage(wrapper.ViewModel.CloseDocumentCommand.Execute, MessageBoxImage.Warning, MessageBoxResult.Cancel);
        }