[TestCase("Assembly.Common", "0.0", "[1.0,2.0]", false, Result = "0.0")] // get latest constrained version (0.0 version)
 public string FindPackageLatestTests(string id, string version, string versionSpec, bool latest)
 {
     var pr = new PackageReference(id, SemanticVersion.Parse(version), string.IsNullOrEmpty(versionSpec) ? new VersionSpec() : VersionUtility.ParseVersionSpec(versionSpec));
     var prc = new PackageResolutionManager(new Mock<ILogger>().Object, latest, new MemoryBasedPackageCache(new Mock<ILogger>().Object));
     var v = prc.ResolveInstallableVersion(Utilities.GetFactory().CreateRepository("SingleAggregate"), pr);
     return v != null ? v.ToString() : null;
 }
        public void WillNotUseODataIfPackageLocal()
        {
            var console = new Mock<ILogger>().Object;
            var resolver = new PackageResolutionManager(console, true, new MemoryBasedPackageCache(console));
            var odata = new Mock<DataServicePackageRepository>(new Uri(@"http://nuget.org"));
            var list = new List<IPackage>()
                           {
                               new DataServicePackage()
                                   {
                                       Id = "Assembly.Common",
                                       Version = "3.0"
                                   }
                           };
            odata.Setup(o => o.GetPackages()).Returns(list.AsQueryable());
            var remoteRepository = new AggregateRepository(new List<IPackageRepository>()
                                                               {
                                                                   Utilities.GetFactory().CreateRepository("SingleAggregate"),
                                                                   odata.Object
                                                               });
        

            var localRepository = new MockPackageRepository();

            var package = new DataServicePackage()
            {
                Id = "Assembly.Common",
                Version = "3.0"
            };

            Assert.AreEqual(true,remoteRepository.GetPackages().Contains(package));
            var local = resolver.FindPackageInAllLocalSources(localRepository, remoteRepository, package, false, false);
            Assert.AreEqual(null, local);

        }
        public string ResolvesUsingMultipleRepos(string id, string version, string spec, bool isLatest)
        {
            var versionSpec = spec == null ? null : VersionUtility.ParseVersionSpec(spec);

            //Add to appropriate cache we want to test based on whether we have a versionspec or not.
            var console = new Mock<ILogger>().Object;
            var cache = new MemoryBasedPackageCache(console);

            //Repository does not have these versions, so any call to it will fail...
            var resolver = new PackageResolutionManager(console, isLatest, cache);
            var remoteRepository = Utilities.GetFactory().CreateRepository("MultiAggregate");
            var result = resolver.ResolveLatestInstallablePackage(remoteRepository, new PackageReference(id, SemanticVersion.Parse(version), versionSpec));

            //Null result when we call ResolveLastestInstallablePackage when PackageResolutionManager not using Latest
            return result == null ? "" : result.Version.ToString();
        }
        public void CanResolveFromLocalRepository()
        {
            var console = new Mock<ILogger>().Object;
            var resolver = new PackageResolutionManager(console, true, new MemoryBasedPackageCache(console));
            var remoteRepository = Utilities.GetFactory().CreateRepository("SingleAggregate");
            var localRepository = new MockPackageRepository();

            var package = new DataServicePackage()
                              {
                                  Id = "Assembly.Common",
                                  Version = "1.0"
                              };

            var test = resolver.FindPackageInAllLocalSources(localRepository, remoteRepository, package, false, false);
            Assert.AreEqual("Assembly.Common", test.Id);
        }
        public string ResolvesFromCacheFirst(string id, string version, string spec, string cacheVersion, bool isLatest)
        {
            //Setup the package and versionspec for the cache
            var cachePackage = new DataServicePackage() { Id = id, Version = cacheVersion };
            var versionSpec = spec == null ? null : VersionUtility.ParseVersionSpec(spec);

            //Add to appropriate cache we want to test based on whether we have a versionspec or not.
            var console = new Mock<ILogger>().Object;
            var cache = new MemoryBasedPackageCache(console);
            if (versionSpec == null)
                cache.AddCacheEntryByIsLatest(cachePackage);
            else
                cache.AddCacheEntryByConstraint(cachePackage, versionSpec);

            //Repository does not have these versions, so any call to it will fail...
            var resolver = new PackageResolutionManager(console, isLatest, cache);
            var remoteRepository = Utilities.GetFactory().CreateRepository("SingleAggregate");
            var result = resolver.ResolveLatestInstallablePackage(remoteRepository, new PackageReference(id, SemanticVersion.Parse(version), versionSpec));
            
            //Null result when we call ResolveLastestInstallablePackage when PackageResolutionManager not using Latest
            return result == null ? "" : result.Version.ToString();
        }
        public void CanResolveInstallablePackages()
        {
            var console = new Mock<ILogger>().Object;
            var resolver = new PackageResolutionManager(console, true, new MemoryBasedPackageCache(console));
            var remoteRepository = Utilities.GetFactory().CreateRepository("SingleAggregate");

            var packageReference = new PackageReference("Assembly.Common", SemanticVersion.Parse("1.0"), new VersionSpec());

            var test = resolver.ResolveLatestInstallablePackage(remoteRepository, packageReference);
            Assert.AreEqual("Assembly.Common", test.Id);
        }