Browse Source

Fix #389 - Disabled package source used in Manage Packages dialog.

pull/403/head
Matt Ward 11 years ago
parent
commit
9abeedf318
  1. 10
      src/AddIns/Misc/PackageManagement/Project/Src/Design/DesignTimeRegisteredPackageSourcesViewModel.cs
  2. 5
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs
  3. 3
      src/AddIns/Misc/PackageManagement/Project/Src/IRegisteredPackageRepositories.cs
  4. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementViewModels.cs
  5. 5
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModels.cs
  6. 37
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs
  7. 17
      src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs
  8. 28
      src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageRepositoriesTests.cs
  9. 67
      src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs

10
src/AddIns/Misc/PackageManagement/Project/Src/Design/DesignTimeRegisteredPackageSourcesViewModel.cs

@ -26,17 +26,13 @@ namespace ICSharpCode.PackageManagement.Design @@ -26,17 +26,13 @@ namespace ICSharpCode.PackageManagement.Design
public class DesignTimeRegisteredPackageSourcesViewModel : RegisteredPackageSourcesViewModel
{
public DesignTimeRegisteredPackageSourcesViewModel()
: this(new PackageManagementOptions(new Properties(), new FakeSettings()))
: this(new DesignTimeRegisteredPackageRepositories())
{
}
public DesignTimeRegisteredPackageSourcesViewModel(PackageManagementOptions options)
: base(options.PackageSources)
public DesignTimeRegisteredPackageSourcesViewModel(IRegisteredPackageRepositories registeredPackageRepositories)
: base(registeredPackageRepositories)
{
options.PackageSources.Add(new PackageSource("Source2", "http://sharpdevelop.codeplex.com"));
options.PackageSources.Add(new PackageSource("Source3", "http://sharpdevelop.codeplex.com"));
options.PackageSources.Add(new PackageSource("Source4", "http://sharpdevelop.codeplex.com"));
options.PackageSources.Add(new PackageSource("Source5", "http://sharpdevelop.codeplex.com"));
Load();
}
}

5
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakeRegisteredPackageRepositories.cs

@ -103,5 +103,10 @@ namespace ICSharpCode.PackageManagement.Design @@ -103,5 +103,10 @@ namespace ICSharpCode.PackageManagement.Design
FakeAggregateRepository.FakePackages.Add(package);
return package;
}
public void UpdatePackageSources(IEnumerable<PackageSource> updatedPackageSources)
{
throw new NotImplementedException();
}
}
}

3
src/AddIns/Misc/PackageManagement/Project/Src/IRegisteredPackageRepositories.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using NuGet;
namespace ICSharpCode.PackageManagement
@ -32,5 +33,7 @@ namespace ICSharpCode.PackageManagement @@ -32,5 +33,7 @@ namespace ICSharpCode.PackageManagement
bool HasMultiplePackageSources { get; }
PackageSource ActivePackageSource { get; set; }
RegisteredPackageSources PackageSources { get; }
void UpdatePackageSources(IEnumerable<PackageSource> updatedPackageSources);
}
}

2
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementViewModels.cs

@ -128,7 +128,7 @@ namespace ICSharpCode.PackageManagement @@ -128,7 +128,7 @@ namespace ICSharpCode.PackageManagement
if (IsInDesignMode()) {
return new DesignTimeRegisteredPackageSourcesViewModel();
} else {
return new RegisteredPackageSourcesViewModel(packageSources);
return new RegisteredPackageSourcesViewModel(registeredPackageRepositories);
}
}

5
src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModels.cs

@ -22,7 +22,9 @@ namespace ICSharpCode.PackageManagement @@ -22,7 +22,9 @@ namespace ICSharpCode.PackageManagement
{
public class PackagesViewModels : IDisposable
{
protected PackagesViewModels() {}
protected PackagesViewModels()
{
}
public PackagesViewModels(
IPackageManagementSolution solution,
@ -60,6 +62,5 @@ namespace ICSharpCode.PackageManagement @@ -60,6 +62,5 @@ namespace ICSharpCode.PackageManagement
RecentPackagesViewModel.Dispose();
UpdatedPackagesViewModel.Dispose();
}
}
}

37
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageRepositories.cs

@ -17,6 +17,7 @@ @@ -17,6 +17,7 @@
// DEALINGS IN THE SOFTWARE.
using System;
using System.Collections.Generic;
using System.Linq;
using NuGet;
@ -65,8 +66,10 @@ namespace ICSharpCode.PackageManagement @@ -65,8 +66,10 @@ namespace ICSharpCode.PackageManagement
get {
activePackageSource = options.ActivePackageSource;
if (activePackageSource == null) {
if (options.PackageSources.Any()) {
activePackageSource = options.PackageSources[0];
List<PackageSource> enabledPackageSources =
options.PackageSources.GetEnabledPackageSources().ToList();
if (enabledPackageSources.Any()) {
ActivePackageSource = enabledPackageSources[0];
}
}
return activePackageSource;
@ -97,5 +100,35 @@ namespace ICSharpCode.PackageManagement @@ -97,5 +100,35 @@ namespace ICSharpCode.PackageManagement
activePackageRepository = repositoryCache.CreateRepository(ActivePackageSource.Source);
}
}
public void UpdatePackageSources(IEnumerable<PackageSource> updatedPackageSources)
{
PackageSources.Clear();
foreach (PackageSource updatedPackageSource in updatedPackageSources) {
PackageSources.Add(updatedPackageSource);
}
UpdateActivePackageSource();
}
void UpdateActivePackageSource()
{
if (activePackageSource == null)
return;
if (activePackageSource.IsAggregate()) {
if (!HasMultiplePackageSources) {
ActivePackageSource = null;
}
} else {
PackageSource matchedPackageSource = PackageSources
.GetEnabledPackageSources()
.FirstOrDefault(packageSource => packageSource.Equals(activePackageSource));
if (matchedPackageSource == null) {
ActivePackageSource = null;
}
}
}
}
}

17
src/AddIns/Misc/PackageManagement/Project/Src/RegisteredPackageSourcesViewModel.cs

@ -31,6 +31,7 @@ namespace ICSharpCode.PackageManagement @@ -31,6 +31,7 @@ namespace ICSharpCode.PackageManagement
ObservableCollection<PackageSourceViewModel> packageSourceViewModels =
new ObservableCollection<PackageSourceViewModel>();
RegisteredPackageSources packageSources;
IRegisteredPackageRepositories registeredPackageRepositories;
IFolderBrowser folderBrowser;
DelegateCommand addPackageSourceCommmand;
@ -43,16 +44,17 @@ namespace ICSharpCode.PackageManagement @@ -43,16 +44,17 @@ namespace ICSharpCode.PackageManagement
PackageSourceViewModel selectedPackageSourceViewModel;
public RegisteredPackageSourcesViewModel(
RegisteredPackageSources packageSources)
: this(packageSources, new FolderBrowser())
IRegisteredPackageRepositories registeredPackageRepositories)
: this(registeredPackageRepositories, new FolderBrowser())
{
}
public RegisteredPackageSourcesViewModel(
RegisteredPackageSources packageSources,
IRegisteredPackageRepositories registeredPackageRepositories,
IFolderBrowser folderBrowser)
{
this.packageSources = packageSources;
this.registeredPackageRepositories = registeredPackageRepositories;
this.packageSources = registeredPackageRepositories.PackageSources;
this.folderBrowser = folderBrowser;
CreateCommands();
}
@ -118,11 +120,8 @@ namespace ICSharpCode.PackageManagement @@ -118,11 +120,8 @@ namespace ICSharpCode.PackageManagement
public void Save()
{
packageSources.Clear();
foreach (PackageSourceViewModel packageSourceViewModel in packageSourceViewModels) {
PackageSource source = packageSourceViewModel.GetPackageSource();
packageSources.Add(source);
}
registeredPackageRepositories.UpdatePackageSources(
packageSourceViewModels.Select(viewModel => viewModel.GetPackageSource()));
}
public string NewPackageSourceName {

28
src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageRepositoriesTests.cs

@ -302,5 +302,33 @@ namespace PackageManagement.Tests @@ -302,5 +302,33 @@ namespace PackageManagement.Tests
Assert.IsNull(activePackageSource);
}
[Test]
public void ActivatePackageSource_NullInOptionsAndNoEnabledPackageSources_ReturnsNull()
{
CreateRegisteredPackageRepositories();
packageSourcesHelper.Options.ActivePackageSource = null;
registeredRepositories.PackageSources.Clear();
registeredRepositories.PackageSources.Add(new PackageSource("source") { IsEnabled = false });
PackageSource activePackageSource = registeredRepositories.ActivePackageSource;
Assert.IsNull(activePackageSource);
}
[Test]
public void ActivatePackageSource_NullInOptionsAndSecondPackageSourceIsEnabled_ReturnsSecondPackageSource()
{
CreateRegisteredPackageRepositories();
packageSourcesHelper.Options.ActivePackageSource = null;
registeredRepositories.PackageSources.Clear();
registeredRepositories.PackageSources.Add(new PackageSource("source1") { IsEnabled = false });
var expectedPackageSource = new PackageSource("source2") { IsEnabled = true };
registeredRepositories.PackageSources.Add(expectedPackageSource);
PackageSource activePackageSource = registeredRepositories.ActivePackageSource;
Assert.AreEqual(expectedPackageSource, activePackageSource);
}
}
}

67
src/AddIns/Misc/PackageManagement/Test/Src/RegisteredPackageSourcesViewModelTests.cs

@ -33,14 +33,17 @@ namespace PackageManagement.Tests @@ -33,14 +33,17 @@ namespace PackageManagement.Tests
FakeFolderBrowser fakeFolderBrowser;
List<string> propertiesChanged;
RegisteredPackageSources packageSources;
RegisteredPackageRepositories registeredRepositories;
void CreateViewModel()
{
var options = new TestablePackageManagementOptions();
packageSources = options.PackageSources;
var cache = new FakePackageRepositoryFactory();
registeredRepositories = new RegisteredPackageRepositories(cache, options);
packageSources.Clear();
fakeFolderBrowser = new FakeFolderBrowser();
viewModel = new RegisteredPackageSourcesViewModel(packageSources, fakeFolderBrowser);
viewModel = new RegisteredPackageSourcesViewModel(registeredRepositories, fakeFolderBrowser);
}
void CreateViewModelWithOnePackageSource()
@ -56,10 +59,11 @@ namespace PackageManagement.Tests @@ -56,10 +59,11 @@ namespace PackageManagement.Tests
AddPackageSourceToOptions("Source 2", "http://url2");
}
void AddPackageSourceToOptions(string name, string url)
PackageSource AddPackageSourceToOptions(string name, string url, bool enabled = true)
{
var source = new PackageSource(url, name);
var source = new PackageSource(url, name, enabled);
packageSources.Add(source);
return source;
}
void RecordPropertyChanges()
@ -603,5 +607,62 @@ namespace PackageManagement.Tests @@ -603,5 +607,62 @@ namespace PackageManagement.Tests
Assert.IsTrue(propertyEventFired);
}
[Test]
public void Save_ActivePackageSourceDisabled_ActivePackageSourceSetToNull()
{
CreateViewModel();
PackageSource packageSource = AddPackageSourceToOptions("Source 1", "http://url1");
registeredRepositories.ActivePackageSource = packageSource;
viewModel.Load();
viewModel.PackageSourceViewModels[0].IsEnabled = false;
viewModel.Save();
Assert.IsNull(registeredRepositories.ActivePackageSource);
}
[Test]
public void Save_TwoPackageSourcesAndSecondIsActivePackageSourceWhichIsUnchanged_ActivePackageSourceUnchanged()
{
CreateViewModel();
AddPackageSourceToOptions("Source 1", "http://url1");
PackageSource packageSource = AddPackageSourceToOptions("Source 2", "http://url1");
registeredRepositories.ActivePackageSource = packageSource;
viewModel.Load();
viewModel.Save();
Assert.AreEqual(packageSource, registeredRepositories.ActivePackageSource);
}
[Test]
public void Save_DisableOnePackageSourceWhenActivePackageSourceIsAggregate_ActivePackageSourceChangedTo()
{
CreateViewModel();
PackageSource packageSource1 = AddPackageSourceToOptions("Source 1", "http://url1");
PackageSource packageSource2 = AddPackageSourceToOptions("Source 2", "http://url1");
registeredRepositories.ActivePackageSource = RegisteredPackageSourceSettings.AggregatePackageSource;
viewModel.Load();
viewModel.PackageSourceViewModels[0].IsEnabled = false;
viewModel.Save();
Assert.AreEqual(packageSource2, registeredRepositories.ActivePackageSource);
}
[Test]
public void Save_ActivePackageSourceIsAggregateAndPackageSourcesUnchanged_ActivePackageSourceIsStillAggregate()
{
CreateViewModel();
AddPackageSourceToOptions("Source 1", "http://url1");
AddPackageSourceToOptions("Source 2", "http://url1");
registeredRepositories.ActivePackageSource = RegisteredPackageSourceSettings.AggregatePackageSource;
viewModel.Load();
viewModel.Save();
Assert.AreEqual(RegisteredPackageSourceSettings.AggregatePackageSource, registeredRepositories.ActivePackageSource);
}
}
}

Loading…
Cancel
Save