using NuGet.Client; using NuGet.Configuration; using NuGet.PackageManagement; using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.IO; using System.Reflection; namespace Test.Utility { public class TestSourceRepositoryUtility { public static PackageSource V2PackageSource = new PackageSource("https://www.nuget.org/api/v2/", "v2"); public static PackageSource V3PackageSource = new PackageSource("https://api.nuget.org/v3/index.json", "v3"); public TestSourceRepositoryUtility() {} [ImportMany] public Lazy[] ResourceProviders; private CompositionContainer Initialize() { var aggregateCatalog = new AggregateCatalog(); { aggregateCatalog.Catalogs.Add(new DirectoryCatalog(Environment.CurrentDirectory, "*.dll")); var container = new CompositionContainer(aggregateCatalog); container.ComposeParts(this); return container; } } public static SourceRepositoryProvider CreateV3OnlySourceRepositoryProvider() { return CreateSourceRepositoryProvider(new List() { V3PackageSource }); } public static SourceRepositoryProvider CreateV2OnlySourceRepositoryProvider() { return CreateSourceRepositoryProvider(new List() { V2PackageSource }); } public static SourceRepositoryProvider CreateSourceRepositoryProvider(IEnumerable packageSources) { var thisUtility = new TestSourceRepositoryUtility(); var container = thisUtility.Initialize(); var packageSourceProvider = new TestPackageSourceProvider(packageSources); var sourceRepositoryProvider = new SourceRepositoryProvider(packageSourceProvider, thisUtility.ResourceProviders); return sourceRepositoryProvider; } public static SourceRepositoryProvider CreateSourceRepositoryProvider(IPackageSourceProvider packageSourceProvider) { var thisUtility = new TestSourceRepositoryUtility(); var container = thisUtility.Initialize(); var sourceRepositoryProvider = new SourceRepositoryProvider(packageSourceProvider, thisUtility.ResourceProviders); return sourceRepositoryProvider; } } /// /// Provider that only returns V3 as a source /// public class TestPackageSourceProvider : IPackageSourceProvider { private IEnumerable PackageSources { get; set; } public TestPackageSourceProvider(IEnumerable packageSources) { PackageSources = packageSources; } public void DisablePackageSource(PackageSource source) { source.IsEnabled = false; } public bool IsPackageSourceEnabled(PackageSource source) { return true; } public IEnumerable LoadPackageSources() { return PackageSources; } public event EventHandler PackageSourcesSaved; public void SavePackageSources(IEnumerable sources) { PackageSources = sources; if(PackageSourcesSaved != null) { PackageSourcesSaved(this, null); } } public string ActivePackageSourceName { get { throw new NotImplementedException(); } } public void SaveActivePackageSource(PackageSource source) { throw new NotImplementedException(); } } public static class TestPackageSourceSettings { public static string TempPackageSourceContents = @" "; public static string CreateAndGetSettingFilePath() { var tempFolder = TestFilesystemUtility.CreateRandomTestFolder(); var fileName = "nuget.config"; File.WriteAllText(Path.Combine(tempFolder, fileName), TempPackageSourceContents); return tempFolder; } } }