public void CloseDocument_PartWasInserted_ShouldGiveWarningMessage()
        {
            // Arrange
            using var wrapper = new MainWindowViewModelWrapper();
            var doc = wrapper.OpenDocument(_sourceFile);

            wrapper.ViewModel.InsertXml12Command.Execute();

            // Act / assert
            wrapper.AssertMessage(wrapper.ViewModel.CloseDocumentCommand.Execute, MessageBoxImage.Warning, MessageBoxResult.Cancel, "Insert XML not detected as change");
        }
        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);
        }
        public void RemovePart_ShouldGiveWarningMessage()
        {
            // Arrange
            using var wrapper = new MainWindowViewModelWrapper();
            var doc = wrapper.OpenDocument(_sourceFile);

            wrapper.ViewModel.InsertXml12Command.Execute();
            var part = doc.Children.FirstOrDefault(p => p is OfficePartViewModel);

            Assume.That(part, Is.Not.Null, "No Office part available");
            wrapper.ViewModel.SelectedItem = part;

            // Act / assert
            wrapper.AssertMessage(wrapper.ViewModel.RemoveCommand.Execute, MessageBoxImage.Warning, MessageBoxResult.Yes);
        }
        public void CloseDocument_PartWasRemoved_GiveWarningMessage()
        {
            // Arrange
            using var wrapper = new MainWindowViewModelWrapper();
            var doc = wrapper.OpenDocument(_sourceFile);

            wrapper.ViewModel.InsertXml12Command.Execute();
            var part = doc.Children.FirstOrDefault(p => p is OfficePartViewModel);

            Assume.That(part, Is.Not.Null, "No Office part available");
            wrapper.ViewModel.SelectedItem = part;

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

            // Assert
            Assert.IsTrue(doc.HasUnsavedChanges, "No unsaved changes detected after removing a part");
            wrapper.AssertMessage(wrapper.ViewModel.CloseDocumentCommand.Execute, MessageBoxImage.Warning, MessageBoxResult.Cancel);
        }
        public void GenerateCallbacks_ShouldProduceExpectedCallback()
        {
            using var wrapper = new MainWindowViewModelWrapper();
            var doc = wrapper.OpenDocument(_sourceFile);

            wrapper.ViewModel.InsertXml12Command.Execute();
            var part = doc.Children[0];

            wrapper.ViewModel.SelectedItem = part;

            var tab = wrapper.ViewModel.OpenPartTab();

            Assert.NotNull(tab);

            // This should show a message saying there are no callbacks to be generated
            part.Contents = @"<customUI xmlns=""http://schemas.microsoft.com/office/2006/01/customui""><ribbon></ribbon></customUI>";
            wrapper.AssertMessage(wrapper.ViewModel.GenerateCallbacksCommand.Execute, MessageBoxImage.Information);

            // This should contain a single callback for the onLoad event
            part.Contents = @"<customUI onLoad=""CustomLoad"" xmlns=""http://schemas.microsoft.com/office/2006/01/customui""><ribbon></ribbon></customUI>";