using System; using System.ComponentModel; using System.Linq; using Core.Common.Controls; using Core.Common.Gui; using Core.Common.Gui.Properties; using Core.Common.Utils.Collections; using NUnit.Framework; using Rhino.Mocks; using Ringtoets.Common.Forms.NodePresenters; namespace Ringtoets.Common.Forms.Test.NodePresenters { [TestFixture] public class RingtoetsNodePresenterBaseTest { private MockRepository mockRepository; private IContextMenuBuilderProvider contextMenuBuilderProviderMock; [SetUp] public void SetUp() { mockRepository = new MockRepository(); contextMenuBuilderProviderMock = mockRepository.StrictMock(); } [Test] public void Constructor_NoMenuBuilderProvider_ArgumentNullException() { // Call TestDelegate test = () => new SimpleRingtoetsNodePresenterBase(null); // Assert var message = Assert.Throws(test).Message; StringAssert.StartsWith(Resources.NodePresenter_ContextMenuBuilderProvider_required, message); StringAssert.EndsWith("contextMenuBuilderProvider", message); } [Test] public void DefaultConstructor_ExpectedValues() { // Call var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Assert Assert.AreEqual(typeof(double), nodePresenter.NodeTagType); Assert.IsNull(nodePresenter.TreeView); } [Test] public void UpdateNode_WithData_DoNothing() { // Setup var mocks = new MockRepository(); var parentNode = mocks.StrictMock(); var pipingNode = mocks.StrictMock(); var nodeData = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call nodePresenter.UpdateNode(parentNode, pipingNode, nodeData); // Assert mocks.VerifyAll(); // Expect no calls on mocks } [Test] public void GetChildNodeObjects_Always_ReturnNoChildData() { // Setup var mocks = new MockRepository(); var nodeMock = mocks.StrictMock(); var dataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call var children = nodePresenter.GetChildNodeObjects(dataMock).OfType().ToArray(); // Assert CollectionAssert.IsEmpty(children); mocks.VerifyAll(); // Expect no calls on tree node } [Test] public void CanRenameNode_Always_ReturnFalse() { // Setup var mocks = new MockRepository(); var nodeMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call var renameAllowed = nodePresenter.CanRenameNode(nodeMock); // Assert Assert.IsFalse(renameAllowed); mocks.VerifyAll(); // Expect no calls on tree node } [Test] public void CanRenameNodeTo_Always_ReturnFalse() { // Setup var mocks = new MockRepository(); var nodeMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call var renameAllowed = nodePresenter.CanRenameNodeTo(nodeMock, ""); // Assert Assert.IsFalse(renameAllowed); mocks.ReplayAll(); // Expect no calls on tree node } [Test] public void OnNodeRenamed_Always_ThrowInvalidOperationException() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call TestDelegate call = () => { nodePresenter.OnNodeRenamed(dataMock, ""); }; // Assert var exception = Assert.Throws(call); var expectedMessage = string.Format("Kan knoop uit boom van type {0} niet hernoemen.", nodePresenter.GetType().Name); Assert.AreEqual(expectedMessage, exception.Message); mocks.ReplayAll(); // Expect no calls on tree node } [Test] public void OnNodeChecked_Always_DoNothing() { // Setup var mocks = new MockRepository(); var nodeMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call nodePresenter.OnNodeChecked(nodeMock); // Assert mocks.VerifyAll(); // Expect no calls on tree node } [Test] public void CanDrag_Always_ReturnNone() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call DragOperations dragAllowed = nodePresenter.CanDrag(dataMock); // Assert Assert.AreEqual(DragOperations.None, dragAllowed); mocks.VerifyAll(); } [Test] public void CanDrop_Always_ReturnNone() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); var sourceMock = mocks.StrictMock(); var targetMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call DragOperations dropAllowed = nodePresenter.CanDrop(dataMock, sourceMock, targetMock, DragOperations.Move); // Assert Assert.AreEqual(DragOperations.None, dropAllowed); mocks.VerifyAll(); // Expect no calls on mocks. } [Test] public void CanInsert_Always_ReturnFalse() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); var sourceMock = mocks.StrictMock(); var targetMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call bool insertionAllowed = nodePresenter.CanInsert(dataMock, sourceMock, targetMock); // Assert Assert.IsFalse(insertionAllowed); mocks.VerifyAll(); // Expect no calls on arguments } [Test] public void OnDragDrop_Always_DoNothing() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); var sourceParentNodeMock = mocks.StrictMock(); var targetParentNodeDataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call nodePresenter.OnDragDrop(dataMock, sourceParentNodeMock, targetParentNodeDataMock, DragOperations.Move, 2); // Assert mocks.VerifyAll(); // Expect no calls on arguments } [Test] public void OnNodeSelected_Always_DoNothing() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call nodePresenter.OnNodeSelected(dataMock); // Assert mocks.VerifyAll(); // Expect no calls on arguments } [Test] public void GetContextMenu_Always_ReturnsNull() { // Setup var mocks = new MockRepository(); var nodeMock = mocks.StrictMock(); var dataMock = mocks.StrictMock(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); mocks.ReplayAll(); // Call var contextMenu = nodePresenter.GetContextMenu(nodeMock, dataMock); // Assert Assert.IsNull(contextMenu); mocks.VerifyAll(); // Expect no calls on arguments } [Test] public void OnPropertyChange_Always_DoNothing() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); var nodeMock = mocks.StrictMock(); var eventArgsMock = mocks.StrictMock(""); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call nodePresenter.OnPropertyChanged(dataMock, nodeMock, eventArgsMock); // Assert mocks.VerifyAll(); // Expect no calls on arguments } [Test] public void OnCollectionChange_Always_DoNothing() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); var eventArgsMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call nodePresenter.OnCollectionChanged(dataMock, eventArgsMock); // Assert mocks.VerifyAll(); // Expect no calls on arguments } [Test] public void CanRemove_Always_ReturnFalse() { // Setup var mocks = new MockRepository(); var dataMock = mocks.StrictMock(); mocks.ReplayAll(); var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call bool removalAllowed = nodePresenter.CanRemove(null, dataMock); // Assert Assert.IsFalse(removalAllowed); mocks.VerifyAll(); // Expect no calls on arguments } [Test] public void RemoveNodeData_Always_ThrowInvalidOperationException() { // Setup var nodePresenter = new SimpleRingtoetsNodePresenterBase(contextMenuBuilderProviderMock); // Call TestDelegate call = () => nodePresenter.RemoveNodeData(null, new object()); // Assert var exception = Assert.Throws(call); Assert.AreEqual(String.Format("Kan knoop uit boom van type {0} niet verwijderen.", nodePresenter.GetType().Name), exception.Message); } private class SimpleRingtoetsNodePresenterBase : RingtoetsNodePresenterBase { protected override void UpdateNode(ITreeNode parentNode, ITreeNode node, T nodeData) {} public SimpleRingtoetsNodePresenterBase(IContextMenuBuilderProvider contextMenuBuilderProvider) : base(contextMenuBuilderProvider) {} } } }