public void ReturnsOptionsView()
        {
            var moduleInspector = new Mock<IModuleInspector>();
            ITaskManager sut = new TaskManager(moduleInspector.Object);
            var data = new List<Type>()
				{
					typeof(TestTaskWithMetadata)
				};
            moduleInspector.Setup(i => i.FindTypesImplementingInterfaces(typeof(IDeployTaskDefinition))).Returns(data);

            var result = sut.GetTaskOptionsView(data[0].FullName);

            Assert.IsNotNullOrEmpty(result);
            Assert.AreEqual(TestDataResources.TestView, result);
        }
			public void CallsIModuleInspector()
			{
				var moduleInspector = new Mock<IModuleInspector>();
				ITaskManager sut = new TaskManager(moduleInspector.Object);
				var data = new List<Type>()
				{
					typeof(TestDeployTask1),
					typeof(TestDeployTask2),
					typeof(TestDeployTask3)
				};
				moduleInspector.Setup(i=>i.FindTypesImplementingInterfaces(typeof(IDeployTaskDefinition))).Returns(data);

				var result = sut.GetAvailableTaskList();

				moduleInspector.Verify(i=>i.FindTypesImplementingInterfaces(typeof(IDeployTaskDefinition)), Times.Once());
				Assert.AreEqual(data.Count, result.Count);
				foreach(var metadata in result)
				{
					Assert.Contains(Type.GetType(metadata.TaskTypeName), data);
				}
			}
			public void ExcludesInterfacesClasses()
			{
				var moduleInspector = new Mock<IModuleInspector>();
				ITaskManager sut = new TaskManager(moduleInspector.Object);
				var data = new List<Type>()
				{
					typeof(TestDeployTask1),
					typeof(ITestInterface)
				};
				moduleInspector.Setup(i => i.FindTypesImplementingInterfaces(typeof(IDeployTaskDefinition))).Returns(data);

				var result = sut.GetAvailableTaskList();

				moduleInspector.Verify(i => i.FindTypesImplementingInterfaces(typeof(IDeployTaskDefinition)), Times.Once());
				Assert.AreEqual(1, result.Count);
				Assert.AreEqual(typeof(TestDeployTask1).FullName, result[0].TaskTypeName);
			}
            public void UsesMetadataAttributeIfAvaialble()
            {
                var moduleInspector = new Mock<IModuleInspector>();
                ITaskManager sut = new TaskManager(moduleInspector.Object);
                var data = new List<Type>()
				{
					typeof(TestTaskWithMetadata)
				};
                moduleInspector.Setup(i => i.FindTypesImplementingInterfaces(typeof(IDeployTaskDefinition))).Returns(data);

                var result = sut.GetAvailableTaskList();

                moduleInspector.Verify(i => i.FindTypesImplementingInterfaces(typeof(IDeployTaskDefinition)), Times.Once());
                Assert.AreEqual(data.Count, result.Count);
                foreach (var metadata in result)
                {
                    var type = data.FirstOrDefault(i=>i.FullName == metadata.TaskTypeName);
                    Assert.IsNotNull(type);
                    string displayName = ((TaskDefinitionMetadataAttribute)type.GetCustomAttributes(typeof(TaskDefinitionMetadataAttribute), true).First()).TaskName;
                    Assert.AreEqual(displayName, metadata.TaskDisplayName);
                }

            }