// ReSharper disable MethodTooLong
public void ExplorerItemModel_Clone_ReturnsNewObjectWithAllPropertiesSet()
{
//------------Setup for test--------------------------
var connectControlSingleton = new Mock<IConnectControlSingleton>().Object;
var explorerItemModel = new ExplorerItemModel(connectControlSingleton, new Mock<IStudioResourceRepository>().Object);
var parentModel = new ExplorerItemModel(connectControlSingleton, new Mock<IStudioResourceRepository>().Object);
explorerItemModel.DisplayName = "Test1";
var childItemModel = new ExplorerItemModel(connectControlSingleton, new Mock<IStudioResourceRepository>().Object);
explorerItemModel.Children.Add(childItemModel);
explorerItemModel.EnvironmentId = Guid.NewGuid();
explorerItemModel.Parent = parentModel;
explorerItemModel.Permissions = Permissions.Contribute;
explorerItemModel.ResourceId = Guid.NewGuid();
explorerItemModel.ResourcePath = "TestResourcePath";
explorerItemModel.ResourceType = ResourceType.PluginService;
explorerItemModel.VersionInfo = new VersionInfo { VersionNumber = "2" , Reason = "Save", ResourceId = Guid.NewGuid()};
var properties = typeof(ExplorerItemModel).GetProperties();
//------------Execute Test---------------------------
var clonedItemModel = explorerItemModel.Clone(connectControlSingleton, new Mock<IStudioResourceRepository>().Object);
//------------Assert Results-------------------------
Assert.AreEqual(68, properties.Length);
Assert.AreEqual(explorerItemModel.DisplayName, clonedItemModel.DisplayName);
Assert.AreEqual(explorerItemModel.Children.Count, clonedItemModel.Children.Count);
Assert.AreEqual(explorerItemModel.CanConnect, clonedItemModel.CanConnect);
Assert.AreEqual(explorerItemModel.CanDelete, clonedItemModel.CanDelete);
Assert.AreEqual(explorerItemModel.CanDebug, clonedItemModel.CanDebug);
Assert.AreEqual(explorerItemModel.CanDeploy, clonedItemModel.CanDeploy);
Assert.AreEqual(explorerItemModel.CanDisconnect, clonedItemModel.CanDisconnect);
Assert.AreEqual(explorerItemModel.CanEdit, clonedItemModel.CanEdit);
Assert.AreEqual(explorerItemModel.CanExecute, clonedItemModel.CanExecute);
Assert.AreEqual(explorerItemModel.CanRemove, clonedItemModel.CanRemove);
Assert.AreEqual(explorerItemModel.CanRename, clonedItemModel.CanRename);
Assert.AreEqual(explorerItemModel.CanShowDependencies, clonedItemModel.CanShowDependencies);
Assert.AreEqual(explorerItemModel.CanSelectDependencies, clonedItemModel.CanSelectDependencies);
Assert.AreEqual(explorerItemModel.EnvironmentId, clonedItemModel.EnvironmentId);
Assert.AreEqual(explorerItemModel.Parent, clonedItemModel.Parent);
Assert.AreEqual(explorerItemModel.Permissions, clonedItemModel.Permissions);
Assert.AreEqual(explorerItemModel.ResourceId, clonedItemModel.ResourceId);
Assert.AreEqual(explorerItemModel.ResourcePath, clonedItemModel.ResourcePath);
Assert.AreEqual(explorerItemModel.ResourceType, clonedItemModel.ResourceType);
Assert.AreEqual(explorerItemModel.VersionInfo, clonedItemModel.VersionInfo);
}