using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Versioning; using Moq; using Ploeh.AutoFixture.Xunit; using ScriptCs.Command; using ScriptCs.Contracts; using ScriptCs.Package; using Xunit.Extensions; namespace ScriptCs.Tests { public class InstallCommandTests { public class ExecuteMethod { private const string CurrentDirectory = @"C:\"; [Theory, ScriptCsAutoData] public void InstallCommandShouldInstallSinglePackageIfNamePassed( [Frozen] Mock fileSystem, [Frozen] Mock packageInstaller, CommandFactory factory) { // Arrange var args = new ScriptCsArgs { AllowPreRelease = false, Install = "mypackage", ScriptName = null }; fileSystem.Setup(x => x.GetWorkingDirectory(It.IsAny())).Returns(CurrentDirectory); fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory); // Act factory.CreateCommand(args, new string[0]).Execute(); // Assert packageInstaller.Verify(i => i.InstallPackages( It.Is>(x => x.Count() == 1 && x.First().PackageId == "mypackage"), It.IsAny()), Times.Once()); } [Theory, ScriptCsAutoData] public void InstallCommandShouldInstallFromPackagesConfigIfNoNamePassed( [Frozen] Mock fileSystem, [Frozen] Mock resolver, [Frozen] Mock packageInstaller, CommandFactory factory) { // Arrange var args = new ScriptCsArgs { AllowPreRelease = false, Install = "", ScriptName = null }; fileSystem.Setup(x => x.GetWorkingDirectory(It.IsAny())).Returns(CurrentDirectory); fileSystem.SetupGet(x => x.CurrentDirectory).Returns(CurrentDirectory); resolver.Setup(i => i.GetPackages(It.IsAny())).Returns(new List { new PackageReference("a", new FrameworkName(".NETFramework,Version=v4.0"), new Version()), new PackageReference("b", new FrameworkName(".NETFramework,Version=v4.0"), new Version()) }); // Act factory.CreateCommand(args, new string[0]).Execute(); // Assert packageInstaller.Verify(i => i.InstallPackages(It.Is>(x => x.Count() == 2), It.IsAny()), Times.Once()); } } } }