public void Test_copying_all_files()
        {
            const string srcDirPath = "Core\\TestData\\TestSrcDir";
              const string dstDirPath = "Core\\TestData\\TestDstDir";

              try
              {
            var copyFilesDeploymentStep =
              new CopyFilesDeploymentStep(
            _directoryAdapter,
            new Lazy<string>(() => srcDirPath),
            new Lazy<string>(() => dstDirPath));

            copyFilesDeploymentStep.PrepareAndExecute();

            Assert.IsTrue(Directory.Exists(dstDirPath));

            Assert.AreEqual(
              Directory.GetFiles(srcDirPath, "*.*", SearchOption.AllDirectories).Length,
              Directory.GetFiles(dstDirPath, "*.*", SearchOption.AllDirectories).Length);
              }
              finally
              {
            if (Directory.Exists(dstDirPath))
            {
              Directory.Delete(dstDirPath, true);
            }
              }
        }
        public void Test_copying_all_files_throws_when_no_src()
        {
            const string srcDirPath = "Core\\TestData\\aoisdiasyd";
              const string dstDirPath = "Core\\TestData\\TestDstDir";

              try
              {
            var copyFilesDeploymentStep =
              new CopyFilesDeploymentStep(
            _directoryAdapter,
            new Lazy<string>(() => srcDirPath),
            new Lazy<string>(() => dstDirPath));

            Assert.Throws<DeploymentTaskException>(() => copyFilesDeploymentStep.PrepareAndExecute());
              }
              finally
              {
            if (Directory.Exists(dstDirPath))
            {
              Directory.Delete(dstDirPath, true);
            }
              }
        }
        protected override void DoPrepare()
        {
            EnvironmentInfo environmentInfo = GetEnvironmentInfo();
              _projectInfo = GetProjectInfo<PowerShellScriptProjectInfo>();

              IEnumerable<string> targetMachineNames = _projectInfo.GetTargetMachines(environmentInfo);

              // create a step for downloading the artifacts
              var downloadArtifactsDeploymentStep =
            new DownloadArtifactsDeploymentStep(
              _projectInfo,
              DeploymentInfo,
              GetTempDirPath(),
              _artifactsRepository);

              AddSubTask(downloadArtifactsDeploymentStep);

              // create a step for extracting the artifacts
              var extractArtifactsDeploymentStep =
            new ExtractArtifactsDeploymentStep(
              _projectInfo,
              environmentInfo,
              DeploymentInfo,
              downloadArtifactsDeploymentStep.ArtifactsFilePath,
              GetTempDirPath(),
              _fileAdapter,
              _directoryAdapter,
              _zipFileAdapter);

              AddSubTask(extractArtifactsDeploymentStep);

              if (_projectInfo.ArtifactsAreEnvironmentSpecific)
              {
            var binariesConfiguratorStep =
              new ConfigureBinariesStep(
            environmentInfo.ConfigurationTemplateName,
            GetTempDirPath());

            AddSubTask(binariesConfiguratorStep);
              }

              if (_projectInfo.IsRemote == false)
              {
            // Run powershell script
            var runPowerShellScriptStep =
              new RunPowerShellScriptStep(
            _projectInfo.IsRemote,
            null,
            new Lazy<string>(() => extractArtifactsDeploymentStep.BinariesDirPath),
            _projectInfo.ScriptName);

            AddSubTask(runPowerShellScriptStep);

            return;
              }

              foreach (var targetMachineName in targetMachineNames)
              {
            // Create temp dir on remote machine
            var createRemoteTempDirStep = new CreateRemoteTempDirStep(targetMachineName);

            AddSubTask(createRemoteTempDirStep);

            // Copy files to remote machine
            string machineName = targetMachineName;

            var copyFilesDeploymentStep = new CopyFilesDeploymentStep(
              _directoryAdapter,
              srcDirPathProvider : new Lazy<string>(() => extractArtifactsDeploymentStep.BinariesDirPath),
              dstDirPath: new Lazy<string>(() => EnvironmentInfo.GetNetworkPath(machineName, createRemoteTempDirStep.RemoteTempDirPath)));

            AddSubTask(copyFilesDeploymentStep);

            // Run powershell script
            var runPowerShellScriptStep =
              new RunPowerShellScriptStep(
            _projectInfo.IsRemote,
            targetMachineName,
            new Lazy<string>(() => createRemoteTempDirStep.RemoteTempDirPath),
            _projectInfo.ScriptName);

            AddSubTask(runPowerShellScriptStep);

            // Delete remote temp dir
            var removeRemoteDirectory = new RemoveRemoteDirectoryStep(
              targetMachineName,
              new Lazy<string>(() => createRemoteTempDirStep.RemoteTempDirPath));

            AddSubTask(removeRemoteDirectory);
              }
        }