public void ThreadProcSucceeds()
        {
            // Arrange
            var data = new ThreadPoolUserWorkItemParameters()
            {
                ActivityId = Guid.NewGuid()
                ,
                Logger = new Logger()
                ,
                ScriptPathAndName = "C:\\arbitrary-folder\\arbitrary-script.ps1"
                ,
                ScriptParameters = new Dictionary<string,object>()
            };

            Mock.SetupStatic(typeof(File));
            
            var scriptResult = new List<object>();
            var scriptInvoker = Mock.Create<ScriptInvoker>();
            Mock.Arrange(() => scriptInvoker.RunPowershell(Arg.IsAny<string>(), Arg.IsAny<Dictionary<string, object>>(), ref scriptResult))
                .IgnoreInstance()
                .Returns(true)
                .MustBeCalled();

            // Act
            ThreadPoolUserWorkItem.ThreadProc(data);

            // Assert
            Mock.Assert(scriptInvoker);
        }
        public void ThreadPoolUserWorkItemParametersWithInvalidConfigurationFails()
        {
            // Arrange
            var sut = new ThreadPoolUserWorkItemParameters();

            // Act
            var result = sut.IsValid();

            // Assert
            Assert.IsFalse(result);
        }
        public void ThreadPoolUserWorkItemParametersWithValidConfigurationSucceeds()
        {
            // Arrange
            var sut = new ThreadPoolUserWorkItemParameters()
            {
                ActivityId = Guid.NewGuid()
                ,
                Logger = new Logger()
                ,
                ScriptPathAndName = "C:\\arbitrary-folder\\arbitrary-script.ps1"
                ,
                ScriptParameters = new Dictionary<string,object>()
            };

            // Act
            var result = sut.IsValid();

            // Assert
            Assert.IsTrue(result);
        }
        public void ThreadProcWithInvalidParametersThrowsContractException()
        {
            // Arrange
            var data = new ThreadPoolUserWorkItemParameters()
            {
                ActivityId = Guid.NewGuid()
                ,
                Logger = default(Logger)
                ,
                ScriptPathAndName = default(string)
                ,
                ScriptParameters = new Dictionary<string,object>()
            };

            // Act
            ThreadPoolUserWorkItem.ThreadProc(data);

            // Assert
            // N/A
        }