Browse Source

Fix Manage button in Manage Packages dialog being disabled after a NuGet package is installed.

pull/16/merge
Matt Ward 15 years ago
parent
commit
e936e539d6
  1. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs
  2. 1
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelFactory.cs
  3. 19
      src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs
  4. 24
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
  5. 4
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs
  6. 4
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs
  7. 2
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModelFactory.cs
  8. 9
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageViewModelFactory.cs
  9. 8
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs
  10. 10
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs
  11. 41
      src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSelectedProjectsTests.cs
  12. 11
      src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs

2
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementSolution.cs

@ -28,10 +28,12 @@ namespace ICSharpCode.PackageManagement.Design @@ -28,10 +28,12 @@ namespace ICSharpCode.PackageManagement.Design
public int GetActiveProjectCallCount;
public FakePackageManagementProject FakeActiveProject = new FakePackageManagementProject();
public bool IsGetActiveProjectWithNoParametersCalled;
public virtual IPackageManagementProject GetActiveProject()
{
GetActiveProjectCallCount++;
IsGetActiveProjectWithNoParametersCalled = true;
return FakeActiveProject;
}

1
src/AddIns/Misc/PackageManagement/Project/Src/IPackageViewModelFactory.cs

@ -12,6 +12,7 @@ namespace ICSharpCode.PackageManagement @@ -12,6 +12,7 @@ namespace ICSharpCode.PackageManagement
PackageViewModel CreatePackageViewModel(IPackageFromRepository package);
IPackageManagementSolution Solution { get; }
PackageManagementSelectedProjects SelectedProjects { get; }
IPackageManagementEvents PackageManagementEvents { get; }
IPackageActionRunner PackageActionRunner { get; }
}

19
src/AddIns/Misc/PackageManagement/Project/Src/PackageManagementSelectedProjects.cs

@ -14,6 +14,8 @@ namespace ICSharpCode.PackageManagement @@ -14,6 +14,8 @@ namespace ICSharpCode.PackageManagement
public class PackageManagementSelectedProjects
{
IPackageManagementSolution solution;
bool? singledProjectSelected;
IProject singleMSBuildProjectSelected;
public PackageManagementSelectedProjects(IPackageManagementSolution solution)
{
@ -33,12 +35,11 @@ namespace ICSharpCode.PackageManagement @@ -33,12 +35,11 @@ namespace ICSharpCode.PackageManagement
public bool HasSingleProjectSelected()
{
return GetSingleMSBuildProjectSelected() != null;
}
IProject GetSingleMSBuildProjectSelected()
{
return solution.GetActiveMSBuildProject();
if (!singledProjectSelected.HasValue) {
singleMSBuildProjectSelected = solution.GetActiveMSBuildProject();
singledProjectSelected = singleMSBuildProjectSelected != null;
}
return singledProjectSelected.Value;
}
IEnumerable<IProject> GetOpenProjects()
@ -48,8 +49,7 @@ namespace ICSharpCode.PackageManagement @@ -48,8 +49,7 @@ namespace ICSharpCode.PackageManagement
IPackageManagementSelectedProject GetSingleProjectSelected(IPackageFromRepository package)
{
IProject project = GetSingleMSBuildProjectSelected();
return CreateSelectedProject(project, package);
return CreateSelectedProject(singleMSBuildProjectSelected, package);
}
IPackageManagementSelectedProject CreateSelectedProject(IProject msbuildProject, IPackageFromRepository package)
@ -88,8 +88,7 @@ namespace ICSharpCode.PackageManagement @@ -88,8 +88,7 @@ namespace ICSharpCode.PackageManagement
string GetSingleProjectSelectedName()
{
IProject project = GetSingleMSBuildProjectSelected();
return project.Name;
return singleMSBuildProjectSelected.Name;
}
string GetSolutionFileNameWithoutFullPath()

24
src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs

@ -16,7 +16,6 @@ namespace ICSharpCode.PackageManagement @@ -16,7 +16,6 @@ namespace ICSharpCode.PackageManagement
DelegateCommand removePackageCommand;
DelegateCommand managePackageCommand;
IPackageManagementSolution solution;
PackageManagementSelectedProjects selectedProjects;
IPackageManagementEvents packageManagementEvents;
IPackageFromRepository package;
@ -26,19 +25,17 @@ namespace ICSharpCode.PackageManagement @@ -26,19 +25,17 @@ namespace ICSharpCode.PackageManagement
public PackageViewModel(
IPackageFromRepository package,
IPackageManagementSolution solution,
PackageManagementSelectedProjects selectedProjects,
IPackageManagementEvents packageManagementEvents,
IPackageActionRunner actionRunner,
ILogger logger)
{
this.package = package;
this.solution = solution;
this.selectedProjects = selectedProjects;
this.packageManagementEvents = packageManagementEvents;
this.actionRunner = actionRunner;
this.logger = CreateLogger(logger);
selectedProjects = new PackageManagementSelectedProjects(solution);
CreateCommands();
}
@ -175,11 +172,16 @@ namespace ICSharpCode.PackageManagement @@ -175,11 +172,16 @@ namespace ICSharpCode.PackageManagement
void GetPackageOperations()
{
IPackageManagementProject project = solution.GetActiveProject();
IPackageManagementProject project = GetActiveProject();
project.Logger = logger;
packageOperations = project.GetInstallPackageOperations(package, false);
}
IPackageManagementProject GetActiveProject()
{
return selectedProjects.GetActiveProject(package.Repository);
}
bool CanInstallPackage()
{
IEnumerable<IPackage> packages = GetPackagesRequiringLicenseAcceptance();
@ -236,15 +238,13 @@ namespace ICSharpCode.PackageManagement @@ -236,15 +238,13 @@ namespace ICSharpCode.PackageManagement
void InstallPackage()
{
InstallPackage(package, packageOperations);
InstallPackage(packageOperations);
OnPropertyChanged(model => model.IsAdded);
}
void InstallPackage(
IPackageFromRepository package,
IEnumerable<PackageOperation> packageOperations)
void InstallPackage(IEnumerable<PackageOperation> packageOperations)
{
IPackageManagementProject project = solution.GetActiveProject(package.Repository);
IPackageManagementProject project = GetActiveProject();
ProcessPackageOperationsAction action = CreateInstallPackageAction(project);
action.Package = package;
action.Operations = packageOperations;
@ -280,7 +280,7 @@ namespace ICSharpCode.PackageManagement @@ -280,7 +280,7 @@ namespace ICSharpCode.PackageManagement
void TryUninstallingPackage()
{
try {
IPackageManagementProject project = solution.GetActiveProject(package.Repository);
IPackageManagementProject project = GetActiveProject();
UninstallPackageAction action = project.CreateUninstallPackageAction();
action.Package = package;
actionRunner.Run(action);

4
src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModelFactory.cs

@ -23,6 +23,7 @@ namespace ICSharpCode.PackageManagement @@ -23,6 +23,7 @@ namespace ICSharpCode.PackageManagement
IPackageActionRunner actionRunner)
{
this.Solution = solution;
this.SelectedProjects = new PackageManagementSelectedProjects(solution);
this.PackageManagementEvents = packageManagementEvents;
this.PackageActionRunner = actionRunner;
this.Logger = new PackageManagementLogger(packageManagementEvents);
@ -32,13 +33,14 @@ namespace ICSharpCode.PackageManagement @@ -32,13 +33,14 @@ namespace ICSharpCode.PackageManagement
{
return new PackageViewModel(
package,
Solution,
SelectedProjects,
PackageManagementEvents,
PackageActionRunner,
Logger);
}
public IPackageManagementSolution Solution { get; private set; }
public PackageManagementSelectedProjects SelectedProjects { get; private set; }
public IPackageManagementEvents PackageManagementEvents { get; private set; }
public ILogger Logger { get; private set; }
public IPackageActionRunner PackageActionRunner { get; private set; }

4
src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs

@ -12,11 +12,11 @@ namespace ICSharpCode.PackageManagement @@ -12,11 +12,11 @@ namespace ICSharpCode.PackageManagement
{
public UpdatedPackageViewModel(
IPackageFromRepository package,
IPackageManagementSolution solution,
PackageManagementSelectedProjects selectedProjects,
IPackageManagementEvents packageManagementEvents,
IPackageActionRunner actionRunner,
ILogger logger)
: base(package, solution, packageManagementEvents, actionRunner, logger)
: base(package, selectedProjects, packageManagementEvents, actionRunner, logger)
{
}

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

@ -17,7 +17,7 @@ namespace ICSharpCode.PackageManagement @@ -17,7 +17,7 @@ namespace ICSharpCode.PackageManagement
{
return new UpdatedPackageViewModel(
package,
Solution,
SelectedProjects,
PackageManagementEvents,
PackageActionRunner,
Logger);

9
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/FakePackageViewModelFactory.cs

@ -16,11 +16,16 @@ namespace PackageManagement.Tests.Helpers @@ -16,11 +16,16 @@ namespace PackageManagement.Tests.Helpers
public FakeLogger FakeLogger = new FakeLogger();
public FakePackageActionRunner FakeActionRunner = new FakePackageActionRunner();
public FakePackageViewModelFactory()
{
SelectedProjects = new PackageManagementSelectedProjects(FakeSolution);
}
public PackageViewModel CreatePackageViewModel(IPackageFromRepository package)
{
return new PackageViewModel(
package,
FakeSolution,
SelectedProjects,
FakePackageManagementEvents,
FakeActionRunner,
FakeLogger);
@ -30,6 +35,8 @@ namespace PackageManagement.Tests.Helpers @@ -30,6 +35,8 @@ namespace PackageManagement.Tests.Helpers
get { return FakeSolution; }
}
public PackageManagementSelectedProjects SelectedProjects { get; set; }
public IPackageManagementEvents PackageManagementEvents {
get { return FakePackageManagementEvents; }
}

8
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestablePackageViewModel.cs

@ -19,28 +19,28 @@ namespace PackageManagement.Tests.Helpers @@ -19,28 +19,28 @@ namespace PackageManagement.Tests.Helpers
public TestablePackageViewModel(FakePackageManagementSolution solution)
: this(
new FakePackage("Test"),
solution,
new PackageManagementSelectedProjects(solution),
new FakePackageManagementEvents(),
new FakePackageActionRunner(),
new FakeLogger())
{
this.FakeSolution = solution;
}
public TestablePackageViewModel(
FakePackage package,
FakePackageManagementSolution solution,
PackageManagementSelectedProjects selectedProjects,
FakePackageManagementEvents packageManagementEvents,
FakePackageActionRunner actionRunner,
FakeLogger logger)
: base(
package,
solution,
selectedProjects,
packageManagementEvents,
actionRunner,
logger)
{
this.FakePackage = package;
this.FakeSolution = solution;
this.FakePackageManagementEvents = packageManagementEvents;
this.FakeActionRunner = actionRunner;
this.FakeLogger = logger;

10
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableUpdatedPackageViewModel.cs

@ -26,28 +26,28 @@ namespace PackageManagement.Tests.Helpers @@ -26,28 +26,28 @@ namespace PackageManagement.Tests.Helpers
public TestableUpdatedPackageViewModel(FakePackageManagementSolution solution)
: this(
new FakePackage(),
solution,
new PackageManagementSelectedProjects(solution),
new FakePackageManagementEvents(),
new FakePackageActionRunner(),
new FakeLogger())
{
{
this.FakeSolution = solution;
}
public TestableUpdatedPackageViewModel(
FakePackage package,
FakePackageManagementSolution solution,
PackageManagementSelectedProjects selectedProjects,
FakePackageManagementEvents packageManagementEvents,
FakePackageActionRunner actionRunner,
FakeLogger logger)
: base(
package,
solution,
selectedProjects,
packageManagementEvents,
actionRunner,
logger)
{
this.FakePackage = package;
this.FakeSolution = solution;
this.FakeActionRunner = actionRunner;
this.FakeLogger = logger;
}

41
src/AddIns/Misc/PackageManagement/Test/Src/PackageManagementSelectedProjectsTests.cs

@ -75,6 +75,33 @@ namespace PackageManagement.Tests @@ -75,6 +75,33 @@ namespace PackageManagement.Tests
SelectedProjectCollectionAssert.AreEqual(expectedProjects, projects);
}
[Test]
public void GetProjects_SolutionHasTwoProjectsAndOneProjectSelectedInitiallyAndGetProjectsCalledAgainAfterNoProjectsAreSelected_ReturnsProjectSelectedInProjects()
{
CreateSelectedProjects();
List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService();
IProject project = projectsAddedToSolution[1];
project.Name = "MyProject";
fakeSolution.FakeActiveMSBuildProject = project;
var fakeProject = fakeSolution.AddFakeProjectToReturnFromGetProject("MyProject");
var fakePackage = new FakePackage();
var projects = new List<IPackageManagementSelectedProject>();
projects.AddRange(selectedProjects.GetProjects(fakePackage));
projects.Clear();
NoProjectsSelected();
projects.AddRange(selectedProjects.GetProjects(fakePackage));
var expectedProject = new FakeSelectedProject("MyProject");
var expectedProjects = new List<IPackageManagementSelectedProject>();
expectedProjects.Add(expectedProject);
SelectedProjectCollectionAssert.AreEqual(expectedProjects, projects);
}
[Test]
public void GetProjects_SolutionHasTwoProjectsAndOneProjectSelectedInProjectsBrowserAndPackageIsInstalledInProject_ReturnsProjectAndIsSelectedIsTrue()
{
@ -387,6 +414,20 @@ namespace PackageManagement.Tests @@ -387,6 +414,20 @@ namespace PackageManagement.Tests
Assert.IsFalse(singleProjectSelected);
}
[Test]
public void HasSingleProjectSelected_NoProjectsInitiallySelectedAndProjectSelectedAfterInitialCall_IsUnchangedAndReturnsFalse()
{
CreateSelectedProjects();
List<IProject> projectsAddedToSolution = AddSolutionWithTwoProjectsToProjectService();
NoProjectsSelected();
bool singleProjectSelected = selectedProjects.HasSingleProjectSelected();
fakeSolution.FakeActiveMSBuildProject = fakeSolution.FakeMSBuildProjects[0];
singleProjectSelected = selectedProjects.HasSingleProjectSelected();
Assert.IsFalse(singleProjectSelected);
}
[Test]
public void GetInstalledPackages_PackageInstalledInSolutionAndProjectNotSelected_ReturnsPackageInstalledInSolution()
{

11
src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs

@ -156,6 +156,17 @@ namespace PackageManagement.Tests @@ -156,6 +156,17 @@ namespace PackageManagement.Tests
Assert.AreEqual(fakePackage.Repository, fakeSolution.RepositoryPassedToGetActiveProject);
}
[Test]
public void AddPackage_PackageAddedSuccessfully_SourcePackageRepositoryWhenGettingPackageOperations()
{
CreateViewModel();
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
viewModel.AddPackage();
Assert.IsFalse(fakeSolution.IsGetActiveProjectWithNoParametersCalled);
}
[Test]
public void AddPackage_PackageAddedSuccessfully_PackageIsInstalled()
{

Loading…
Cancel
Save