Browse Source

Fix: Under certain circumstances multiple releases of a package are shown in list of available packages.

pull/48/head
Andreas Weizel 12 years ago
parent
commit
54811a1329
  1. 64
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs
  2. 5
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs
  3. 9
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs
  4. 2
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs

64
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/AvailableAddInsViewModelTests.cs

@ -272,6 +272,68 @@ namespace ICSharpCode.AddInManager2.Tests
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 1st AddIn"); Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 1st AddIn");
} }
[Test]
public void SearchInstallableAddInsWithMultipleReleasesAndDownloadCountSorting()
{
CreateAddIns();
_addIn1.Enabled = true;
// Package to be shown in repository
FakePackage fakePackage2 = new FakePackage()
{
Id = _addIn2.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2.Version),
Tags = SharpDevelopAddInTag
};
FakePackage fakePackage1 = new FakePackage()
{
Id = _addIn1.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn1.Version),
Tags = SharpDevelopAddInTag,
DownloadCount = 10
};
FakePackage fakePackage2_new = new FakePackage()
{
Id = _addIn2_new.Manifest.PrimaryIdentity,
Version = new SemanticVersion(_addIn2_new.Version),
Tags = SharpDevelopAddInTag,
DownloadCount = 20
};
// List of NuGet repositories
List<PackageSource> registeredPackageSources = new List<PackageSource>();
registeredPackageSources.Add(new PackageSource("", "Test Repository"));
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources;
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>();
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository();
remoteRepository.Source = registeredPackageSources[0].Source;
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage2, fakePackage1, fakePackage2_new }).AsQueryable();
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories;
// PackageRepository service should return remoteRepository instance
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource)
{
return remoteRepository;
};
FakeCorePackageRepository localRepository = new FakeCorePackageRepository();
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository;
localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable();
var viewModel = new AvailableAddInsViewModel(_services);
viewModel.ReadPackagesAndWaitForUpdate();
// There must be only 2 packages in list, because user should see only latest releases
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items.");
// fakePackage2_new is the first one, because it has a greater download count
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0];
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn2_new.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn");
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn2_new.Manifest.PrimaryIdentity), "Name of 1st AddIn");
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2_new.Version), "Version of 1st AddIn");
}
// [Test] // [Test]
// public void FilteringOutNonSharpDevelopPackages() // public void FilteringOutNonSharpDevelopPackages()
// { // {
@ -335,7 +397,7 @@ namespace ICSharpCode.AddInManager2.Tests
{ {
fakePackages[i] = new FakePackage() fakePackages[i] = new FakePackage()
{ {
Id = _addIn1.Manifest.PrimaryIdentity + i.ToString(), Id = _addIn1.Manifest.PrimaryIdentity + i.ToString("00"),
Version = new SemanticVersion(_addIn1.Version), Version = new SemanticVersion(_addIn1.Version),
Tags = SharpDevelopAddInTag Tags = SharpDevelopAddInTag
}; };

5
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakePackage.cs

@ -182,5 +182,10 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
throw new NotImplementedException(); throw new NotImplementedException();
} }
} }
public override string ToString()
{
return string.Format("[FakePackage Id={0}, Version={1}]", Id, Version);
}
} }
} }

9
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/AvailableAddInsViewModel.cs

@ -50,13 +50,8 @@ namespace ICSharpCode.AddInManager2.ViewModel
protected override IEnumerable<IPackage> GetFilteredPackagesBeforePagingResults(IQueryable<IPackage> allPackages) protected override IEnumerable<IPackage> GetFilteredPackagesBeforePagingResults(IQueryable<IPackage> allPackages)
{ {
return base.GetFilteredPackagesBeforePagingResults(allPackages) return base.GetFilteredPackagesBeforePagingResults(allPackages)
.Where(package => package.IsReleaseVersion()) .OrderByDescending(package => package.DownloadCount)
.DistinctLast(PackageEqualityComparer.Id); .ThenBy(package => package.Id);
}
protected override IQueryable<IPackage> OrderPackages(IQueryable<IPackage> packages)
{
return packages.OrderByDescending(package => package.DownloadCount);
} }
protected override void UpdatePrereleaseFilter() protected override void UpdatePrereleaseFilter()

2
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetAddInsViewModelBase.cs

@ -143,7 +143,7 @@ namespace ICSharpCode.AddInManager2.ViewModel
return _allPackages; return _allPackages;
} }
protected virtual IQueryable<IPackage> OrderPackages(IQueryable<IPackage> packages) private IQueryable<IPackage> OrderPackages(IQueryable<IPackage> packages)
{ {
return packages return packages
.OrderBy(package => package.Id); .OrderBy(package => package.Id);

Loading…
Cancel
Save