Browse Source

PackageManagement: Tests OK

pull/374/head
Dragan 12 years ago
parent
commit
a95a42d7c7
  1. 4
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs
  2. 1
      src/AddIns/Misc/PackageManagement/Project/Src/IPackageFromRepository.cs
  3. 2
      src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
  4. 101
      src/AddIns/Misc/PackageManagement/Project/Src/PackageViewModel.cs
  5. 10
      src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs
  6. 10
      src/AddIns/Misc/PackageManagement/Project/Src/RecentPackagesViewModel.cs
  7. 12
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs
  8. 14
      src/AddIns/Misc/PackageManagement/Test/Src/PackageViewModelTests.cs
  9. 2
      src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs

4
src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackage.cs

@ -66,6 +66,8 @@ namespace ICSharpCode.PackageManagement.Design
return new FakePackage(id, version); return new FakePackage(id, version);
} }
public bool IsProjectPackage { get { return true; } }
public string Id { get; set; } public string Id { get; set; }
public SemanticVersion Version { get; set; } public SemanticVersion Version { get; set; }
public string Title { get; set; } public string Title { get; set; }
@ -82,8 +84,6 @@ namespace ICSharpCode.PackageManagement.Design
public int RatingsCount { get; set; } public int RatingsCount { get; set; }
public double Rating { get; set; } public double Rating { get; set; }
public bool HasProjectContent() { return true; }
public IEnumerable<IPackageAssemblyReference> AssemblyReferences { public IEnumerable<IPackageAssemblyReference> AssemblyReferences {
get { return AssemblyReferenceList; } get { return AssemblyReferenceList; }
} }

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

@ -27,5 +27,6 @@ namespace ICSharpCode.PackageManagement
bool HasDependencies { get; } bool HasDependencies { get; }
DateTime? LastUpdated { get; } DateTime? LastUpdated { get; }
Uri GalleryUrl { get; } Uri GalleryUrl { get; }
bool IsProjectPackage { get; }
} }
} }

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

@ -36,6 +36,8 @@ namespace ICSharpCode.PackageManagement
this.Repository = repository; this.Repository = repository;
} }
public bool IsProjectPackage { get { return this.HasProjectContent(); } }
public IPackageRepository Repository { get; private set; } public IPackageRepository Repository { get; private set; }
public IEnumerable<IPackageAssemblyReference> AssemblyReferences { public IEnumerable<IPackageAssemblyReference> AssemblyReferences {

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

@ -119,7 +119,7 @@ namespace ICSharpCode.PackageManagement
get { get {
if (selectedProjects.HasSingleProjectSelected()) { if (selectedProjects.HasSingleProjectSelected()) {
return selectedProjects.GetSingleProjectSelected(package.Repository).IsPackageInstalled(package) return selectedProjects.GetSingleProjectSelected(package.Repository).IsPackageInstalled(package)
|| (selectedProjects.IsPackageInstalledInSolution(package) && !package.HasProjectContent()); || (IsPackageInstalled() && !package.IsProjectPackage);
} }
return IsPackageInstalled(); return IsPackageInstalled();
} }
@ -127,9 +127,7 @@ namespace ICSharpCode.PackageManagement
protected bool IsPackageInstalled() protected bool IsPackageInstalled()
{ {
return selectedProjects.IsPackageInstalledInSolution(package); return IsPackageInstalledInSolution(package);
// It works same without second condition ....
//|| selectedProjects.IsPackageInstalled(package);
} }
public IEnumerable<PackageDependencySet> Dependencies { public IEnumerable<PackageDependencySet> Dependencies {
@ -200,14 +198,13 @@ namespace ICSharpCode.PackageManagement
get { return package.Published.HasValue; } get { return package.Published.HasValue; }
} }
public void OnPackagePropertyChanged() { public void PackageChanged() {
OnPropertyChanged(model => model.IsAdded); OnPropertyChanged(model => model.IsAdded);
OnPropertyChanged(model => model.IsManaged);
} }
public void AddOrManagePackage() { public void AddOrManagePackage() {
if (selectedProjects.HasMultipleProjects()) { if (selectedProjects.HasMultipleProjects()) {
if (package.HasProjectContent()) { if (package.IsProjectPackage) {
ManagePackage(); ManagePackage();
} }
else { else {
@ -225,7 +222,7 @@ namespace ICSharpCode.PackageManagement
logger.LogAddingPackage(); logger.LogAddingPackage();
using (IDisposable operation = StartOperation(package)) { using (IDisposable operation = StartOperation(package)) {
if (package.HasProjectContent()) { if (package.IsProjectPackage) {
TryInstallingPackage(); TryInstallingPackage();
} }
else { else {
@ -234,7 +231,6 @@ namespace ICSharpCode.PackageManagement
} }
logger.LogAfterPackageOperationCompletes(); logger.LogAfterPackageOperationCompletes();
OnPackagePropertyChanged();
} }
protected virtual IDisposable StartOperation(IPackageFromRepository package) protected virtual IDisposable StartOperation(IPackageFromRepository package)
@ -290,7 +286,7 @@ namespace ICSharpCode.PackageManagement
bool IsPackageInstalledInSolution(IPackage package) bool IsPackageInstalledInSolution(IPackage package)
{ {
return selectedProjects.IsPackageInstalledInSolution(package); return selectedProjects.Solution.IsPackageInstalled(package);
} }
void TryInstallingSolutionPackage() void TryInstallingSolutionPackage()
@ -322,6 +318,7 @@ namespace ICSharpCode.PackageManagement
installAction.IgnoreDependencies, installAction.IgnoreDependencies,
installAction.AllowPrereleaseVersions); installAction.AllowPrereleaseVersions);
packageManagementEvents.OnParentPackageInstalled(package); packageManagementEvents.OnParentPackageInstalled(package);
PackageChanged();
} }
} catch (Exception ex) { } catch (Exception ex) {
ReportError(ex); ReportError(ex);
@ -335,6 +332,7 @@ namespace ICSharpCode.PackageManagement
GetInstallPackageOperations(); GetInstallPackageOperations();
if (LicensesAccepted()) { if (LicensesAccepted()) {
InstallPackage(); InstallPackage();
PackageChanged();
} }
} catch (Exception ex) { } catch (Exception ex) {
ReportError(ex); ReportError(ex);
@ -370,7 +368,7 @@ namespace ICSharpCode.PackageManagement
public void RemoveOrManagePackage() { public void RemoveOrManagePackage() {
if (selectedProjects.HasMultipleProjects()) { if (selectedProjects.HasMultipleProjects()) {
if (package.HasProjectContent()) { if (package.IsProjectPackage) {
ManagePackage(); ManagePackage();
} }
else { else {
@ -387,14 +385,13 @@ namespace ICSharpCode.PackageManagement
ClearReportedMessages(); ClearReportedMessages();
logger.LogRemovingPackage(); logger.LogRemovingPackage();
if (package.HasProjectContent()) { if (package.IsProjectPackage) {
TryUninstallingPackage(); TryUninstallingPackage();
} else { } else {
TryUninstallingSolutionPackage(); TryUninstallingSolutionPackage();
} }
logger.LogAfterPackageOperationCompletes(); logger.LogAfterPackageOperationCompletes();
OnPackagePropertyChanged();
} }
void LogRemovingPackage() void LogRemovingPackage()
@ -409,6 +406,7 @@ namespace ICSharpCode.PackageManagement
var packageManager = new NuGet.PackageManager(solutionPackageRepository.Repository, solutionPackageRepository.PackagePathResolver, solutionPackageRepository.FileSystem); var packageManager = new NuGet.PackageManager(solutionPackageRepository.Repository, solutionPackageRepository.PackagePathResolver, solutionPackageRepository.FileSystem);
packageManager.UninstallPackage(package.Id, package.Version); packageManager.UninstallPackage(package.Id, package.Version);
packageManagementEvents.OnParentPackageUninstalled(package); packageManagementEvents.OnParentPackageUninstalled(package);
PackageChanged();
} catch (Exception ex) { } catch (Exception ex) {
ReportError(ex); ReportError(ex);
logger.LogError(ex); logger.LogError(ex);
@ -422,6 +420,7 @@ namespace ICSharpCode.PackageManagement
UninstallPackageAction action = project.CreateUninstallPackageAction(); UninstallPackageAction action = project.CreateUninstallPackageAction();
action.Package = package; action.Package = package;
actionRunner.Run(action); actionRunner.Run(action);
PackageChanged();
} catch (Exception ex) { } catch (Exception ex) {
ReportError(ex); ReportError(ex);
logger.LogError(ex); logger.LogError(ex);
@ -438,14 +437,14 @@ namespace ICSharpCode.PackageManagement
// Solution selected // Solution selected
// Project-level/Solution-level Package Management // Project-level/Solution-level Package Management
if (IsAdded) { if (IsAdded) {
if (package.HasProjectContent()) { if (package.IsProjectPackage) {
return true; // [Manage] Button return true; // [Manage] Button
} }
return false; // [Remove] Button return false; // [Remove] Button
} }
// package.HasProjectContent() is too slow on uninstalled packages // package.IsProjectPackage() is too slow on uninstalled packages
// check ([Add] or [Manage]) after user press on [Add] Package Button // check ([Add] or [Manage]) after user press on [Add] Package Button
return false; // [Add] Button -> redirect to [Manage] if (package.HasProjectContent()) return false; // [Add] Button -> redirect to [Manage] if (package.IsProjectPackage())
} }
} }
@ -477,15 +476,28 @@ namespace ICSharpCode.PackageManagement
} }
logger.LogAfterPackageOperationCompletes(); logger.LogAfterPackageOperationCompletes();
OnPackagePropertyChanged();
} }
void TryManagePackagesForSelectedProjects(IList<IPackageManagementSelectedProject> projects) void TryManagePackagesForSelectedProjects(IList<IPackageManagementSelectedProject> projects)
{ {
try { try {
packageOperations = new PackageOperation[0];
if (!IsPackageInstalled()) {
IPackageManagementSelectedProject firstSelectedProject = (
from project in projects
where project.IsSelected
select project).FirstOrDefault();
if (firstSelectedProject != null) {
InstallPackageAction installAction = firstSelectedProject.Project.CreateInstallPackageAction();
installAction.AllowPrereleaseVersions = parent.IncludePrerelease;
packageOperations = firstSelectedProject.Project.GetInstallPackageOperations(package, installAction);
}
}
IList<ProcessPackageAction> actions = GetProcessPackageActionsForSelectedProjects(projects); IList<ProcessPackageAction> actions = GetProcessPackageActionsForSelectedProjects(projects);
if (actions.Any() && (IsPackageInstalled() || LicensesAccepted())) { if (actions.Any() && LicensesAccepted()) {
RunActionsIfAnyExist(actions); RunActionsIfAnyExist(actions);
PackageChanged();
} }
} catch (Exception ex) { } catch (Exception ex) {
ReportError(ex); ReportError(ex);
@ -519,29 +531,26 @@ namespace ICSharpCode.PackageManagement
return CreateUninstallPackageManageActionForSelectedProject(selectedProject); return CreateUninstallPackageManageActionForSelectedProject(selectedProject);
} }
protected ProcessPackageAction CreateUpdatePackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject) ProcessPackageAction CreateInstallPackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{ {
if (!selectedProject.Project.IsPackageInstalled(package)) {
// TODO? Fix UpdatedPackageViewModelTests to comply with this condition return CreateInstallPackageAction(selectedProject);
if (selectedProject.Project.GetPackages().Where(p => p.Id == package.Id).Any() &&
!selectedProject.Project.GetPackages().Where(p => p.Id == package.Id && p.Version == package.Version).Any()) {
return CreateUpdatePackageAction(selectedProject);
} }
return null; return null;
} }
ProcessPackageAction CreateInstallPackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject) ProcessPackageAction CreateUninstallPackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{ {
//if (!selectedProject.Project.GetPackages().Where(p => p.Id == package.Id && p.Version == package.Version).Any()) { if (selectedProject.Project.IsPackageInstalled(package)) {
return CreateInstallPackageAction(selectedProject); return CreateUninstallPackageAction(selectedProject);
//} }
//return null; return null;
} }
ProcessPackageAction CreateUninstallPackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject) protected ProcessPackageAction CreateUpdatePackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{ {
if (selectedProject.Project.GetPackages().Where(p => p.Id == package.Id && p.Version == package.Version).Any()) { if (!selectedProject.Project.IsPackageInstalled(package)) {
return CreateUninstallPackageAction(selectedProject); return CreateUpdatePackageAction(selectedProject);
} }
return null; return null;
} }
@ -561,6 +570,7 @@ namespace ICSharpCode.PackageManagement
project.Logger = logger; project.Logger = logger;
ProcessPackageOperationsAction action = CreateInstallPackageAction(project); ProcessPackageOperationsAction action = CreateInstallPackageAction(project);
action.AllowPrereleaseVersions = parent.IncludePrerelease;
action.Package = package; action.Package = package;
return action; return action;
} }
@ -581,6 +591,7 @@ namespace ICSharpCode.PackageManagement
project.Logger = logger; project.Logger = logger;
ProcessPackageOperationsAction action = project.CreateUpdatePackageAction(); ProcessPackageOperationsAction action = project.CreateUpdatePackageAction();
action.AllowPrereleaseVersions = parent.IncludePrerelease;
action.Package = package; action.Package = package;
return action; return action;
} }
@ -592,31 +603,5 @@ namespace ICSharpCode.PackageManagement
} }
} }
IEnumerable<IPackage> GetPackagesRequiringLicenseAcceptance(IPackageManagementSelectedProject selectedProject)
{
IPackageManagementProject project = selectedProject.Project;
project.Logger = logger;
InstallPackageAction installAction = project.CreateInstallPackageAction();
installAction.AllowPrereleaseVersions = parent.IncludePrerelease;
IEnumerable<PackageOperation> operations = project.GetInstallPackageOperations(package, installAction);
return GetPackagesRequiringLicenseAcceptance(operations);
}
IEnumerable<IPackage> GetPackagesRequiringLicenseAcceptance(IEnumerable<PackageOperation> operations)
{
foreach (PackageOperation operation in operations) {
if (PackageOperationRequiresLicenseAcceptance(operation)) {
yield return operation.Package;
}
}
}
bool PackageOperationRequiresLicenseAcceptance(PackageOperation operation)
{
return
(operation.Action == PackageAction.Install) &&
operation.Package.RequireLicenseAcceptance &&
!IsPackageInstalledInSolution(operation.Package);
}
} }
} }

10
src/AddIns/Misc/PackageManagement/Project/Src/PackagesViewModel.cs

@ -95,18 +95,18 @@ namespace ICSharpCode.PackageManagement
if (PackageViewModels == null) return; if (PackageViewModels == null) return;
var operation = e as ParentPackageOperationEventArgs; var operation = e as ParentPackageOperationEventArgs;
if (operation != null && operation.Package != null) { if (operation != null && operation.Package != null) {
foreach (var found in PackageViewModels) { foreach (var packageViewModel in PackageViewModels) {
if (found.Id == operation.Package.Id) { if (packageViewModel.Id == operation.Package.Id) {
// Do not compare package.Version here // Do not compare package.Version here
// On update, two packages are changed // On update, two packages are changed
found.OnPackagePropertyChanged(); packageViewModel.PackageChanged();
} }
} }
} }
else { else {
// Unknown operation/package -> refresh all items // Unknown operation/package -> refresh all items
foreach (var found in this.PackageViewModels) { foreach (var packageViewModel in this.PackageViewModels) {
found.OnPackagePropertyChanged(); packageViewModel.PackageChanged();
} }
} }
} }

10
src/AddIns/Misc/PackageManagement/Project/Src/RecentPackagesViewModel.cs

@ -45,19 +45,19 @@ namespace ICSharpCode.PackageManagement
void RegisterEvents() void RegisterEvents()
{ {
packageManagementEvents.ParentPackageInstalled += OnNewRecentPackage; packageManagementEvents.ParentPackageInstalled += OnAddRecentPackage;
packageManagementEvents.ParentPackageUninstalled += OnPackageChanged; packageManagementEvents.ParentPackageUninstalled += OnPackageChanged;
packageManagementEvents.ParentPackagesUpdated += OnNewRecentPackage; packageManagementEvents.ParentPackagesUpdated += OnAddRecentPackage;
} }
protected override void OnDispose() protected override void OnDispose()
{ {
packageManagementEvents.ParentPackageInstalled -= OnNewRecentPackage; packageManagementEvents.ParentPackageInstalled -= OnAddRecentPackage;
packageManagementEvents.ParentPackageUninstalled -= OnPackageChanged; packageManagementEvents.ParentPackageUninstalled -= OnPackageChanged;
packageManagementEvents.ParentPackagesUpdated -= OnNewRecentPackage; packageManagementEvents.ParentPackagesUpdated -= OnAddRecentPackage;
} }
void OnNewRecentPackage(object sender, EventArgs e) void OnAddRecentPackage(object sender, EventArgs e)
{ {
ReadPackages(); ReadPackages();
} }

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

@ -35,13 +35,21 @@ namespace ICSharpCode.PackageManagement
} }
protected override ProcessPackageAction CreatePackageManageAction(IPackageManagementSelectedProject selectedProject) protected override ProcessPackageAction CreatePackageManageAction(IPackageManagementSelectedProject selectedProject)
{ { // Modify PackageViewModel logic
if (selectedProject.IsSelected) {
return base.CreateUpdatePackageManageActionForSelectedProject(selectedProject); return base.CreateUpdatePackageManageActionForSelectedProject(selectedProject);
} }
return null;
}
protected override IDisposable StartOperation(IPackageFromRepository package) protected override IDisposable StartOperation(IPackageFromRepository package)
{ { // Modify PackageViewModel logic
return package.StartUpdateOperation(); return package.StartUpdateOperation();
} }
protected override ProcessPackageOperationsAction CreateInstallPackageAction(IPackageManagementProject project)
{ // Modify UpdatePackageAction logic
return project.CreateUpdatePackageAction();
}
} }
} }

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

@ -821,7 +821,11 @@ namespace PackageManagement.Tests
bool managed = viewModel.IsManaged; bool managed = viewModel.IsManaged;
Assert.IsTrue(managed); // Assert.IsTrue(managed);
// Only installed project-level package "IsManaged"
Assert.IsFalse(managed);
bool added = viewModel.IsAdded;
Assert.IsFalse(added);
} }
[Test] [Test]
@ -834,7 +838,11 @@ namespace PackageManagement.Tests
bool managed = viewModel.IsManaged; bool managed = viewModel.IsManaged;
Assert.IsTrue(managed); // Assert.IsTrue(managed);
// Only installed project-level package "IsManaged"
Assert.IsFalse(managed);
bool added = viewModel.IsAdded;
Assert.IsFalse(added);
} }
[Test] [Test]
@ -893,6 +901,8 @@ namespace PackageManagement.Tests
public void ManagePackage_TwoProjectsSelectedAndUserAcceptsSelectedProjects_IsAddedPropertyChanged() public void ManagePackage_TwoProjectsSelectedAndUserAcceptsSelectedProjects_IsAddedPropertyChanged()
{ {
CreateViewModelWithTwoProjectsSelected("Project A", "Project B"); CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
viewModel.FakePackageManagementEvents.ProjectsToSelect.Add("Project A");
viewModel.FakePackageManagementEvents.ProjectsToSelect.Add("Project B");
UserAcceptsProjectSelection(); UserAcceptsProjectSelection();
string propertyChangedName = null; string propertyChangedName = null;

2
src/AddIns/Misc/PackageManagement/Test/Src/UpdatedPackageViewModelTests.cs

@ -49,7 +49,6 @@ namespace PackageManagement.Tests
viewModelParent = MockRepository.GenerateStub<IPackageViewModelParent>(); viewModelParent = MockRepository.GenerateStub<IPackageViewModelParent>();
viewModel = new TestableUpdatedPackageViewModel(viewModelParent, fakeSolution); viewModel = new TestableUpdatedPackageViewModel(viewModelParent, fakeSolution);
fakeProject = fakeSolution.FakeProjectToReturnFromGetProject; fakeProject = fakeSolution.FakeProjectToReturnFromGetProject;
fakeSolution.AddPackageToSharedLocalRepository("","0.0.0.0");
fakeActionRunner = viewModel.FakeActionRunner; fakeActionRunner = viewModel.FakeActionRunner;
fakePackageManagementEvents = viewModel.FakePackageManagementEvents; fakePackageManagementEvents = viewModel.FakePackageManagementEvents;
} }
@ -135,6 +134,7 @@ namespace PackageManagement.Tests
CreateViewModelWithTwoProjectsSelected("Project A", "Project B"); CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
fakePackageManagementEvents.ProjectsToSelect.Add("Project B"); fakePackageManagementEvents.ProjectsToSelect.Add("Project B");
fakePackageManagementEvents.OnSelectProjectsReturnValue = true; fakePackageManagementEvents.OnSelectProjectsReturnValue = true;
viewModel.ManagePackage(); viewModel.ManagePackage();
FakePackage expectedPackage = viewModel.FakePackage; FakePackage expectedPackage = viewModel.FakePackage;

Loading…
Cancel
Save