public void CreateImportItemWithAllParameters_ImageParameterNull_ThrowArgumentNullException()
        {
            // Setup
            const string text    = "Import";
            const string toolTip = "Import tooltip";

            var commandHandler       = mocks.StrictMock <IApplicationFeatureCommands>();
            var importCommandHandler = mocks.StrictMock <IImportCommandHandler>();
            var exportCommandHandler = mocks.StrictMock <IExportCommandHandler>();
            var updateCommandHandler = mocks.StrictMock <IUpdateCommandHandler>();
            var viewCommands         = mocks.StrictMock <IViewCommands>();
            var nodeData             = new object();

            mocks.ReplayAll();

            var contextMenuFactory = new GuiContextMenuItemFactory(commandHandler,
                                                                   importCommandHandler,
                                                                   exportCommandHandler,
                                                                   updateCommandHandler,
                                                                   viewCommands,
                                                                   nodeData);

            // Call
            void Call() => contextMenuFactory.CreateImportItem(text, toolTip, null, Enumerable.Empty <ImportInfo>());

            // Assert
            var exception = Assert.Throws <ArgumentNullException>(Call);

            Assert.AreEqual("image", exception.ParamName);

            mocks.VerifyAll();
        }
        public void CreateImportItemWithAllParameters_InvalidTextParameter_ThrowArgumentException(string text)
        {
            // Setup
            const string toolTip = "Import tooltip";
            Image        image   = Resources.ImportIcon;

            var commandHandler       = mocks.StrictMock <IApplicationFeatureCommands>();
            var importCommandHandler = mocks.StrictMock <IImportCommandHandler>();
            var exportCommandHandler = mocks.StrictMock <IExportCommandHandler>();
            var updateCommandHandler = mocks.StrictMock <IUpdateCommandHandler>();
            var viewCommands         = mocks.StrictMock <IViewCommands>();
            var nodeData             = new object();

            mocks.ReplayAll();

            var contextMenuFactory = new GuiContextMenuItemFactory(commandHandler,
                                                                   importCommandHandler,
                                                                   exportCommandHandler,
                                                                   updateCommandHandler,
                                                                   viewCommands,
                                                                   nodeData);

            // Call
            void Call() => contextMenuFactory.CreateImportItem(text, toolTip, image, Enumerable.Empty <ImportInfo>());

            // Assert
            var exception = TestHelper.AssertThrowsArgumentExceptionAndTestMessage <ArgumentException>(Call, "Text should be set.");

            Assert.AreEqual("text", exception.ParamName);

            mocks.VerifyAll();
        }
        public void CreateImportItemWithImportInfosParameter_SupportedImportInfo_CausesImportToStartWhenClicked()
        {
            // Setup
            var commandHandler       = mocks.StrictMock <IApplicationFeatureCommands>();
            var importCommandHandler = mocks.StrictMock <IImportCommandHandler>();
            var exportCommandHandler = mocks.StrictMock <IExportCommandHandler>();
            var updateCommandHandler = mocks.StrictMock <IUpdateCommandHandler>();
            var viewCommands         = mocks.StrictMock <IViewCommands>();
            var nodeData             = new object();

            ImportInfo[] importInfos =
            {
                new ImportInfo()
            };

            importCommandHandler.Expect(ich => ich.ImportOn(nodeData, importInfos));

            mocks.ReplayAll();

            var contextMenuFactory = new GuiContextMenuItemFactory(commandHandler,
                                                                   importCommandHandler,
                                                                   exportCommandHandler,
                                                                   updateCommandHandler,
                                                                   viewCommands,
                                                                   nodeData);

            ToolStripItem item = contextMenuFactory.CreateImportItem(importInfos);

            // Call
            item.PerformClick();

            // Assert
            mocks.VerifyAll();
        }
        public void CreateImportItemWithAllParameters_Always_ItemWithPropertiesSet(bool hasImportersForNodeData)
        {
            // Setup
            const string text    = "Import";
            const string toolTip = "Import tooltip";
            Image        image   = Resources.ImportIcon;

            var commandHandler       = mocks.StrictMock <IApplicationFeatureCommands>();
            var importCommandHandler = mocks.StrictMock <IImportCommandHandler>();
            var exportCommandHandler = mocks.StrictMock <IExportCommandHandler>();
            var updateCommandHandler = mocks.StrictMock <IUpdateCommandHandler>();
            var viewCommands         = mocks.StrictMock <IViewCommands>();
            var nodeData             = new object();

            mocks.ReplayAll();

            ImportInfo[] importInfos = hasImportersForNodeData
                                           ? new[]
            {
                new ImportInfo()
            }
                                           : new ImportInfo[0];

            var contextMenuFactory = new GuiContextMenuItemFactory(commandHandler,
                                                                   importCommandHandler,
                                                                   exportCommandHandler,
                                                                   updateCommandHandler,
                                                                   viewCommands,
                                                                   nodeData);

            // Call
            ToolStripItem item = contextMenuFactory.CreateImportItem(text, toolTip, image, importInfos);

            // Assert
            Assert.AreEqual(text, item.Text);
            Assert.AreEqual(toolTip, item.ToolTipText);
            TestHelper.AssertImagesAreEqual(image, item.Image);
            Assert.AreEqual(hasImportersForNodeData, item.Enabled);

            mocks.VerifyAll();
        }
        public void CreateImportItemWithTextualParameters_SupportedImportInfo_CausesImportToStartWhenClicked()
        {
            // Setup
            const string text    = "Import";
            const string toolTip = "Import tooltip";
            Image        image   = Resources.ImportIcon;

            var commandHandler       = mocks.StrictMock <IApplicationFeatureCommands>();
            var importCommandHandler = mocks.StrictMock <IImportCommandHandler>();
            var exportCommandHandler = mocks.StrictMock <IExportCommandHandler>();
            var updateCommandHandler = mocks.StrictMock <IUpdateCommandHandler>();
            var viewCommands         = mocks.StrictMock <IViewCommands>();
            var nodeData             = new object();

            ImportInfo[] importInfos =
            {
                new ImportInfo()
            };

            importCommandHandler.Expect(ich => ich.GetSupportedImportInfos(nodeData)).Return(importInfos);
            importCommandHandler.Expect(ich => ich.ImportOn(nodeData, importInfos));

            mocks.ReplayAll();

            var contextMenuFactory = new GuiContextMenuItemFactory(commandHandler,
                                                                   importCommandHandler,
                                                                   exportCommandHandler,
                                                                   updateCommandHandler,
                                                                   viewCommands,
                                                                   nodeData);

            ToolStripItem item = contextMenuFactory.CreateImportItem(text, toolTip, image);

            // Call
            item.PerformClick();

            // Assert
            mocks.VerifyAll();
        }
        public void CreateImportItemWithImportInfosParameter_Always_ItemWithPropertiesSet(bool hasImportersForNodeData)
        {
            // Setup
            var commandHandler       = mocks.StrictMock <IApplicationFeatureCommands>();
            var importCommandHandler = mocks.StrictMock <IImportCommandHandler>();
            var exportCommandHandler = mocks.StrictMock <IExportCommandHandler>();
            var updateCommandHandler = mocks.StrictMock <IUpdateCommandHandler>();
            var viewCommands         = mocks.StrictMock <IViewCommands>();
            var nodeData             = new object();

            mocks.ReplayAll();

            ImportInfo[] importInfos = hasImportersForNodeData
                                           ? new[]
            {
                new ImportInfo()
            }
                                           : new ImportInfo[0];

            var contextMenuFactory = new GuiContextMenuItemFactory(commandHandler,
                                                                   importCommandHandler,
                                                                   exportCommandHandler,
                                                                   updateCommandHandler,
                                                                   viewCommands,
                                                                   nodeData);

            // Call
            ToolStripItem item = contextMenuFactory.CreateImportItem(importInfos);

            // Assert
            Assert.AreEqual("&Importeren...", item.Text);
            Assert.AreEqual("Importeer de gegevens vanuit een bestand.", item.ToolTipText);
            TestHelper.AssertImagesAreEqual(Resources.ImportIcon, item.Image);
            Assert.AreEqual(hasImportersForNodeData, item.Enabled);

            mocks.VerifyAll();
        }