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. 4
      src/AddIns/Misc/PackageManagement/Project/Src/PackageFromRepository.cs
  4. 103
      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. 14
      src/AddIns/Misc/PackageManagement/Project/Src/UpdatedPackageViewModel.cs
  8. 16
      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 @@ -66,6 +66,8 @@ namespace ICSharpCode.PackageManagement.Design
return new FakePackage(id, version);
}
public bool IsProjectPackage { get { return true; } }
public string Id { get; set; }
public SemanticVersion Version { get; set; }
public string Title { get; set; }
@ -82,8 +84,6 @@ namespace ICSharpCode.PackageManagement.Design @@ -82,8 +84,6 @@ namespace ICSharpCode.PackageManagement.Design
public int RatingsCount { get; set; }
public double Rating { get; set; }
public bool HasProjectContent() { return true; }
public IEnumerable<IPackageAssemblyReference> AssemblyReferences {
get { return AssemblyReferenceList; }
}

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

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

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

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

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

@ -119,7 +119,7 @@ namespace ICSharpCode.PackageManagement @@ -119,7 +119,7 @@ namespace ICSharpCode.PackageManagement
get {
if (selectedProjects.HasSingleProjectSelected()) {
return selectedProjects.GetSingleProjectSelected(package.Repository).IsPackageInstalled(package)
|| (selectedProjects.IsPackageInstalledInSolution(package) && !package.HasProjectContent());
|| (IsPackageInstalled() && !package.IsProjectPackage);
}
return IsPackageInstalled();
}
@ -127,9 +127,7 @@ namespace ICSharpCode.PackageManagement @@ -127,9 +127,7 @@ namespace ICSharpCode.PackageManagement
protected bool IsPackageInstalled()
{
return selectedProjects.IsPackageInstalledInSolution(package);
// It works same without second condition ....
//|| selectedProjects.IsPackageInstalled(package);
return IsPackageInstalledInSolution(package);
}
public IEnumerable<PackageDependencySet> Dependencies {
@ -200,14 +198,13 @@ namespace ICSharpCode.PackageManagement @@ -200,14 +198,13 @@ namespace ICSharpCode.PackageManagement
get { return package.Published.HasValue; }
}
public void OnPackagePropertyChanged() {
public void PackageChanged() {
OnPropertyChanged(model => model.IsAdded);
OnPropertyChanged(model => model.IsManaged);
}
public void AddOrManagePackage() {
if (selectedProjects.HasMultipleProjects()) {
if (package.HasProjectContent()) {
if (package.IsProjectPackage) {
ManagePackage();
}
else {
@ -225,7 +222,7 @@ namespace ICSharpCode.PackageManagement @@ -225,7 +222,7 @@ namespace ICSharpCode.PackageManagement
logger.LogAddingPackage();
using (IDisposable operation = StartOperation(package)) {
if (package.HasProjectContent()) {
if (package.IsProjectPackage) {
TryInstallingPackage();
}
else {
@ -234,7 +231,6 @@ namespace ICSharpCode.PackageManagement @@ -234,7 +231,6 @@ namespace ICSharpCode.PackageManagement
}
logger.LogAfterPackageOperationCompletes();
OnPackagePropertyChanged();
}
protected virtual IDisposable StartOperation(IPackageFromRepository package)
@ -290,7 +286,7 @@ namespace ICSharpCode.PackageManagement @@ -290,7 +286,7 @@ namespace ICSharpCode.PackageManagement
bool IsPackageInstalledInSolution(IPackage package)
{
return selectedProjects.IsPackageInstalledInSolution(package);
return selectedProjects.Solution.IsPackageInstalled(package);
}
void TryInstallingSolutionPackage()
@ -322,6 +318,7 @@ namespace ICSharpCode.PackageManagement @@ -322,6 +318,7 @@ namespace ICSharpCode.PackageManagement
installAction.IgnoreDependencies,
installAction.AllowPrereleaseVersions);
packageManagementEvents.OnParentPackageInstalled(package);
PackageChanged();
}
} catch (Exception ex) {
ReportError(ex);
@ -335,6 +332,7 @@ namespace ICSharpCode.PackageManagement @@ -335,6 +332,7 @@ namespace ICSharpCode.PackageManagement
GetInstallPackageOperations();
if (LicensesAccepted()) {
InstallPackage();
PackageChanged();
}
} catch (Exception ex) {
ReportError(ex);
@ -370,7 +368,7 @@ namespace ICSharpCode.PackageManagement @@ -370,7 +368,7 @@ namespace ICSharpCode.PackageManagement
public void RemoveOrManagePackage() {
if (selectedProjects.HasMultipleProjects()) {
if (package.HasProjectContent()) {
if (package.IsProjectPackage) {
ManagePackage();
}
else {
@ -387,14 +385,13 @@ namespace ICSharpCode.PackageManagement @@ -387,14 +385,13 @@ namespace ICSharpCode.PackageManagement
ClearReportedMessages();
logger.LogRemovingPackage();
if (package.HasProjectContent()) {
if (package.IsProjectPackage) {
TryUninstallingPackage();
} else {
TryUninstallingSolutionPackage();
}
logger.LogAfterPackageOperationCompletes();
OnPackagePropertyChanged();
}
void LogRemovingPackage()
@ -409,6 +406,7 @@ namespace ICSharpCode.PackageManagement @@ -409,6 +406,7 @@ namespace ICSharpCode.PackageManagement
var packageManager = new NuGet.PackageManager(solutionPackageRepository.Repository, solutionPackageRepository.PackagePathResolver, solutionPackageRepository.FileSystem);
packageManager.UninstallPackage(package.Id, package.Version);
packageManagementEvents.OnParentPackageUninstalled(package);
PackageChanged();
} catch (Exception ex) {
ReportError(ex);
logger.LogError(ex);
@ -422,6 +420,7 @@ namespace ICSharpCode.PackageManagement @@ -422,6 +420,7 @@ namespace ICSharpCode.PackageManagement
UninstallPackageAction action = project.CreateUninstallPackageAction();
action.Package = package;
actionRunner.Run(action);
PackageChanged();
} catch (Exception ex) {
ReportError(ex);
logger.LogError(ex);
@ -438,14 +437,14 @@ namespace ICSharpCode.PackageManagement @@ -438,14 +437,14 @@ namespace ICSharpCode.PackageManagement
// Solution selected
// Project-level/Solution-level Package Management
if (IsAdded) {
if (package.HasProjectContent()) {
if (package.IsProjectPackage) {
return true; // [Manage] 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
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 @@ -477,15 +476,28 @@ namespace ICSharpCode.PackageManagement
}
logger.LogAfterPackageOperationCompletes();
OnPackagePropertyChanged();
}
void TryManagePackagesForSelectedProjects(IList<IPackageManagementSelectedProject> projects)
{
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);
if (actions.Any() && (IsPackageInstalled() || LicensesAccepted())) {
if (actions.Any() && LicensesAccepted()) {
RunActionsIfAnyExist(actions);
PackageChanged();
}
} catch (Exception ex) {
ReportError(ex);
@ -519,29 +531,26 @@ namespace ICSharpCode.PackageManagement @@ -519,29 +531,26 @@ namespace ICSharpCode.PackageManagement
return CreateUninstallPackageManageActionForSelectedProject(selectedProject);
}
protected ProcessPackageAction CreateUpdatePackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
ProcessPackageAction CreateInstallPackageManageActionForSelectedProject(IPackageManagementSelectedProject selectedProject)
{
// TODO? Fix UpdatedPackageViewModelTests to comply with this condition
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);
if (!selectedProject.Project.IsPackageInstalled(package)) {
return CreateInstallPackageAction(selectedProject);
}
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()) {
return CreateInstallPackageAction(selectedProject);
//}
//return null;
if (selectedProject.Project.IsPackageInstalled(package)) {
return CreateUninstallPackageAction(selectedProject);
}
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()) {
return CreateUninstallPackageAction(selectedProject);
if (!selectedProject.Project.IsPackageInstalled(package)) {
return CreateUpdatePackageAction(selectedProject);
}
return null;
}
@ -561,6 +570,7 @@ namespace ICSharpCode.PackageManagement @@ -561,6 +570,7 @@ namespace ICSharpCode.PackageManagement
project.Logger = logger;
ProcessPackageOperationsAction action = CreateInstallPackageAction(project);
action.AllowPrereleaseVersions = parent.IncludePrerelease;
action.Package = package;
return action;
}
@ -581,6 +591,7 @@ namespace ICSharpCode.PackageManagement @@ -581,6 +591,7 @@ namespace ICSharpCode.PackageManagement
project.Logger = logger;
ProcessPackageOperationsAction action = project.CreateUpdatePackageAction();
action.AllowPrereleaseVersions = parent.IncludePrerelease;
action.Package = package;
return action;
}
@ -591,32 +602,6 @@ namespace ICSharpCode.PackageManagement @@ -591,32 +602,6 @@ namespace ICSharpCode.PackageManagement
actionRunner.Run(actions);
}
}
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 @@ -95,18 +95,18 @@ namespace ICSharpCode.PackageManagement
if (PackageViewModels == null) return;
var operation = e as ParentPackageOperationEventArgs;
if (operation != null && operation.Package != null) {
foreach (var found in PackageViewModels) {
if (found.Id == operation.Package.Id) {
foreach (var packageViewModel in PackageViewModels) {
if (packageViewModel.Id == operation.Package.Id) {
// Do not compare package.Version here
// On update, two packages are changed
found.OnPackagePropertyChanged();
packageViewModel.PackageChanged();
}
}
}
else {
// Unknown operation/package -> refresh all items
foreach (var found in this.PackageViewModels) {
found.OnPackagePropertyChanged();
foreach (var packageViewModel in this.PackageViewModels) {
packageViewModel.PackageChanged();
}
}
}

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

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

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

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

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

@ -821,7 +821,11 @@ namespace PackageManagement.Tests @@ -821,7 +821,11 @@ namespace PackageManagement.Tests
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]
@ -834,7 +838,11 @@ namespace PackageManagement.Tests @@ -834,7 +838,11 @@ namespace PackageManagement.Tests
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]
@ -893,8 +901,10 @@ namespace PackageManagement.Tests @@ -893,8 +901,10 @@ namespace PackageManagement.Tests
public void ManagePackage_TwoProjectsSelectedAndUserAcceptsSelectedProjects_IsAddedPropertyChanged()
{
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
viewModel.FakePackageManagementEvents.ProjectsToSelect.Add("Project A");
viewModel.FakePackageManagementEvents.ProjectsToSelect.Add("Project B");
UserAcceptsProjectSelection();
string propertyChangedName = null;
viewModel.PropertyChanged += (sender, e) => propertyChangedName = e.PropertyName;

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

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

Loading…
Cancel
Save