1
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
2
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
5
using System.Collections.Generic;
7
using ICSharpCode.PackageManagement;
8
using ICSharpCode.PackageManagement.Design;
9
using ICSharpCode.PackageManagement.Scripting;
11
using NUnit.Framework;
12
using PackageManagement.Tests.Helpers;
14
namespace PackageManagement.Tests
17
public class PackageViewModelTests
19
TestablePackageViewModel viewModel;
20
FakePackage fakePackage;
21
FakePackageManagementSolution fakeSolution;
22
FakePackageManagementEvents fakePackageManagementEvents;
23
ExceptionThrowingPackageManagementSolution exceptionThrowingSolution;
24
ExceptionThrowingPackageManagementProject exceptionThrowingProject;
25
FakeInstallPackageAction fakeInstallPackageAction;
26
FakeUninstallPackageAction fakeUninstallPackageAction;
27
FakeLogger fakeLogger;
28
FakePackageActionRunner fakeActionRunner;
29
List<FakeSelectedProject> fakeSelectedProjects;
31
void CreateFakeSolution()
33
fakeSolution = new FakePackageManagementSolution();
34
fakeSolution.FakeActiveMSBuildProject = ProjectHelper.CreateTestProject();
37
void CreateViewModel()
40
CreateViewModel(fakeSolution);
43
void CreateViewModelWithExceptionThrowingSolution()
45
exceptionThrowingSolution = new ExceptionThrowingPackageManagementSolution();
46
exceptionThrowingSolution.FakeActiveMSBuildProject = ProjectHelper.CreateTestProject();
47
CreateViewModel(exceptionThrowingSolution);
50
void CreateViewModelWithExceptionThrowingProject()
53
exceptionThrowingProject = new ExceptionThrowingPackageManagementProject();
54
viewModel.FakeSolution.FakeProjectToReturnFromGetProject = exceptionThrowingProject;
57
void CreateViewModel(FakePackageManagementSolution solution)
59
viewModel = new TestablePackageViewModel(solution);
60
fakePackage = viewModel.FakePackage;
61
this.fakeSolution = solution;
62
fakePackageManagementEvents = viewModel.FakePackageManagementEvents;
63
fakeLogger = viewModel.FakeLogger;
64
fakeInstallPackageAction = solution.FakeProjectToReturnFromGetProject.FakeInstallPackageAction;
65
fakeUninstallPackageAction = solution.FakeProjectToReturnFromGetProject.FakeUninstallPackageAction;
66
fakeActionRunner = viewModel.FakeActionRunner;
69
void AddProjectToSolution()
71
TestableProject project = ProjectHelper.CreateTestProject();
72
fakeSolution.FakeMSBuildProjects.Add(project);
75
void CreateViewModelWithTwoProjectsSelected(string projectName1, string projectName2)
78
AddTwoProjectsSelected(projectName1, projectName2);
79
CreateViewModel(fakeSolution);
82
void AddTwoProjectsSelected(string projectName1, string projectName2)
84
AddProjectToSolution();
85
AddProjectToSolution();
86
fakeSolution.FakeMSBuildProjects[0].Name = projectName1;
87
fakeSolution.FakeMSBuildProjects[1].Name = projectName2;
88
fakeSolution.NoProjectsSelected();
90
fakeSolution.AddFakeProjectToReturnFromGetProject(projectName1);
91
fakeSolution.AddFakeProjectToReturnFromGetProject(projectName2);
94
void SetPackageIdAndVersion(string id, string version)
97
fakePackage.Version = new Version(version);
100
void UserCancelsProjectSelection()
102
fakePackageManagementEvents.OnSelectProjectsReturnValue = false;
105
void UserAcceptsProjectSelection()
107
fakePackageManagementEvents.OnSelectProjectsReturnValue = true;
110
List<FakeSelectedProject> CreateTwoFakeSelectedProjects()
112
fakeSelectedProjects = new List<FakeSelectedProject>();
113
fakeSelectedProjects.Add(new FakeSelectedProject("Project A"));
114
fakeSelectedProjects.Add(new FakeSelectedProject("Project B"));
115
return fakeSelectedProjects;
118
FakePackageOperation AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FakeSelectedProject selectedProject)
120
return AddFakeInstallPackageOperationWithPackage(selectedProject, requireLicenseAcceptance: true);
123
FakePackageOperation AddFakeInstallPackageOperationWithPackageThatDoesNotRequireLicenseAcceptance(FakeSelectedProject selectedProject)
125
return AddFakeInstallPackageOperationWithPackage(selectedProject, requireLicenseAcceptance: false);
128
FakePackageOperation AddFakeInstallPackageOperationWithPackage(FakeSelectedProject selectedProject, bool requireLicenseAcceptance)
130
FakePackageOperation operation = selectedProject.AddFakeInstallPackageOperation();
131
operation.FakePackage.RequireLicenseAcceptance = requireLicenseAcceptance;
135
FakePackageOperation AddFakeUninstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FakeSelectedProject selectedProject)
137
FakePackageOperation uninstallOperation = selectedProject.AddFakeUninstallPackageOperation();
138
uninstallOperation.FakePackage.RequireLicenseAcceptance = true;
139
return uninstallOperation;
142
FakeSelectedProject FirstFakeSelectedProject {
143
get { return fakeSelectedProjects[0]; }
146
FakeSelectedProject SecondFakeSelectedProject {
147
get { return fakeSelectedProjects[1]; }
151
public void AddPackageCommand_CommandExecuted_InstallsPackage()
154
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
156
viewModel.AddPackageCommand.Execute(null);
158
Assert.AreEqual(fakePackage, fakeInstallPackageAction.Package);
162
public void AddPackage_PackageAddedSuccessfully_SourcePackageRepositoryUsedToCreateProject()
165
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
167
viewModel.AddPackage();
169
Assert.AreEqual(fakePackage.Repository, fakeSolution.RepositoryPassedToGetProject);
173
public void AddPackage_PackageAddedSuccessfully_PackageIsInstalled()
176
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
178
viewModel.AddPackage();
180
ProcessPackageAction actionExecuted = fakeActionRunner.ActionPassedToRun;
182
Assert.AreEqual(fakeInstallPackageAction, actionExecuted);
186
public void AddPackage_PackageAddedSuccessfully_PackageOperationsUsedWhenInstallingPackage()
189
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
190
viewModel.AddPackage();
192
PackageOperation[] expectedOperations = new PackageOperation[] {
193
new PackageOperation(fakePackage, PackageAction.Install)
196
CollectionAssert.AreEqual(expectedOperations, fakeInstallPackageAction.Operations);
200
public void AddPackage_PackageAddedSuccessfully_PropertyNotifyChangedFiredForIsAddedProperty()
203
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
205
string propertyChangedName = null;
206
viewModel.PropertyChanged += (sender, e) => propertyChangedName = e.PropertyName;
207
viewModel.AddPackage();
209
Assert.AreEqual("IsAdded", propertyChangedName);
213
public void AddPackage_PackageAddedSuccessfully_PropertyNotifyChangedFiredAfterPackageInstalled()
216
IPackage packagePassedToInstallPackageWhenPropertyNameChanged = null;
217
viewModel.PropertyChanged += (sender, e) => {
218
packagePassedToInstallPackageWhenPropertyNameChanged = fakeInstallPackageAction.Package;
220
viewModel.AddPackage();
222
Assert.AreEqual(fakePackage, packagePassedToInstallPackageWhenPropertyNameChanged);
226
public void HasLicenseUrl_PackageHasLicenseUrl_ReturnsTrue()
229
fakePackage.LicenseUrl = new Uri("http://sharpdevelop.com");
231
Assert.IsTrue(viewModel.HasLicenseUrl);
235
public void HasLicenseUrl_PackageHasNoLicenseUrl_ReturnsFalse()
238
fakePackage.LicenseUrl = null;
240
Assert.IsFalse(viewModel.HasLicenseUrl);
244
public void HasProjectUrl_PackageHasProjectUrl_ReturnsTrue()
247
fakePackage.ProjectUrl = new Uri("http://sharpdevelop.com");
249
Assert.IsTrue(viewModel.HasProjectUrl);
253
public void HasProjectUrl_PackageHasNoProjectUrl_ReturnsFalse()
256
fakePackage.ProjectUrl = null;
258
Assert.IsFalse(viewModel.HasProjectUrl);
262
public void HasReportAbuseUrl_PackageHasReportAbuseUrl_ReturnsTrue()
265
fakePackage.ReportAbuseUrl = new Uri("http://sharpdevelop.com");
267
Assert.IsTrue(viewModel.HasReportAbuseUrl);
271
public void HasReportAbuseUrl_PackageHasNoReportAbuseUrl_ReturnsFalse()
274
fakePackage.ReportAbuseUrl = null;
276
Assert.IsFalse(viewModel.HasReportAbuseUrl);
280
public void IsAdded_ProjectHasPackageAdded_ReturnsTrue()
283
fakeSolution.FakeProjectToReturnFromGetProject.FakePackages.Add(fakePackage);
285
Assert.IsTrue(viewModel.IsAdded);
289
public void IsAdded_ProjectDoesNotHavePackageInstalled_ReturnsFalse()
292
fakeSolution.FakeProjectToReturnFromGetProject.FakePackages.Clear();
294
Assert.IsFalse(viewModel.IsAdded);
298
public void RemovePackageCommand_CommandExecuted_UninstallsPackage()
301
viewModel.RemovePackageCommand.Execute(null);
303
Assert.AreEqual(fakePackage, fakeUninstallPackageAction.Package);
307
public void RemovePackage_PackageRemovedSuccessfully_RepositoryUsedToCreateProject()
310
viewModel.RemovePackage();
312
Assert.AreEqual(fakePackage.Repository, fakeSolution.RepositoryPassedToGetProject);
316
public void RemovePackage_PackageRemovedSuccessfully_PropertyNotifyChangedFiredForIsAddedProperty()
319
string propertyChangedName = null;
320
viewModel.PropertyChanged += (sender, e) => propertyChangedName = e.PropertyName;
321
viewModel.RemovePackage();
323
Assert.AreEqual("IsAdded", propertyChangedName);
327
public void RemovePackage_PackageRemovedSuccessfully_PropertyNotifyChangedFiredAfterPackageUninstalled()
330
IPackage packagePassedToUninstallPackageWhenPropertyNameChanged = null;
331
viewModel.PropertyChanged += (sender, e) => {
332
packagePassedToUninstallPackageWhenPropertyNameChanged = fakeUninstallPackageAction.Package;
334
viewModel.RemovePackage();
336
Assert.AreEqual(fakePackage, packagePassedToUninstallPackageWhenPropertyNameChanged);
340
public void HasDependencies_PackageHasNoDependencies_ReturnsFalse()
343
fakePackage.HasDependencies = false;
345
Assert.IsFalse(viewModel.HasDependencies);
349
public void HasDependencies_PackageHasDependency_ReturnsTrue()
352
fakePackage.HasDependencies = true;
354
Assert.IsTrue(viewModel.HasDependencies);
358
public void HasNoDependencies_PackageHasNoDependencies_ReturnsTrue()
361
fakePackage.HasDependencies = false;
363
Assert.IsTrue(viewModel.HasNoDependencies);
367
public void HasNoDependencies_PackageHasOneDependency_ReturnsFalse()
370
fakePackage.HasDependencies = true;
372
Assert.IsFalse(viewModel.HasNoDependencies);
376
public void HasDownloadCount_DownloadCountIsZero_ReturnsTrue()
379
fakePackage.DownloadCount = 0;
381
Assert.IsTrue(viewModel.HasDownloadCount);
385
public void HasDownloadCount_DownloadCountIsMinusOne_ReturnsFalse()
388
fakePackage.DownloadCount = -1;
390
Assert.IsFalse(viewModel.HasDownloadCount);
394
public void HasLastUpdated_PackageHasLastUpdatedDate_ReturnsTrue()
397
fakePackage.LastUpdated = new DateTime(2011, 1, 2);
399
Assert.IsTrue(viewModel.HasLastUpdated);
403
public void HasLastUpdated_PackageHasNoLastUpdatedDate_ReturnsFalse()
406
fakePackage.LastUpdated = null;
408
Assert.IsFalse(viewModel.HasLastUpdated);
412
public void AddPackage_PackageRequiresLicenseAgreementAcceptance_UserAskedToAcceptLicenseAgreementForPackageBeforeInstalling()
415
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
416
fakePackage.RequireLicenseAcceptance = true;
417
fakePackageManagementEvents.OnAcceptLicensesReturnValue = true;
419
viewModel.AddPackage();
421
var expectedPackages = new FakePackage[] {
425
IEnumerable<IPackage> actualPackages = fakePackageManagementEvents.LastPackagesPassedToOnAcceptLicenses;
427
CollectionAssert.AreEqual(expectedPackages, actualPackages);
431
public void AddPackage_PackageRequiresLicenseAgreementAcceptanceButPackageInstalledInSolutionAlready_UserNotAskedToAcceptLicenseAgreementForPackageBeforeInstalling()
434
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
435
fakePackage.RequireLicenseAcceptance = true;
436
fakePackageManagementEvents.OnAcceptLicensesReturnValue = true;
437
fakeSolution.FakeInstalledPackages.Add(fakePackage);
439
viewModel.AddPackage();
441
bool acceptLicenses = fakePackageManagementEvents.IsOnAcceptLicensesCalled;
443
Assert.IsFalse(acceptLicenses);
447
public void AddPackage_PackageDoesNotRequireLicenseAgreementAcceptance_UserNotAskedToAcceptLicenseAgreementBeforeInstalling()
450
fakePackage.RequireLicenseAcceptance = false;
451
viewModel.AddPackage();
453
Assert.IsFalse(fakePackageManagementEvents.IsOnAcceptLicensesCalled);
457
public void AddPackage_PackageRequiresLicenseAgreementAcceptanceAndUserDeclinesAgreement_PackageIsNotInstalled()
460
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
461
fakePackage.RequireLicenseAcceptance = true;
462
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
464
viewModel.AddPackage();
466
Assert.IsFalse(fakeInstallPackageAction.IsExecuteCalled);
470
public void AddPackage_PackageRequiresLicenseAgreementAcceptanceAndUserDeclinesAgreement_PropertyChangedEventNotFired()
473
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
474
fakePackage.RequireLicenseAcceptance = true;
475
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
476
bool propertyChangedEventFired = false;
477
viewModel.PropertyChanged += (sender, e) => propertyChangedEventFired = true;
479
viewModel.AddPackage();
481
Assert.IsFalse(propertyChangedEventFired);
485
public void AddPackage_OnePackageOperationIsToUninstallPackageWhichRequiresLicenseAcceptance_UserIsNotAskedToAcceptLicenseAgreementForPackageToBeUninstalled()
488
fakePackage.RequireLicenseAcceptance = false;
489
PackageOperation operation = viewModel.AddOneFakeUninstallPackageOperation();
490
FakePackage packageToUninstall = operation.Package as FakePackage;
491
packageToUninstall.RequireLicenseAcceptance = true;
492
viewModel.AddPackage();
494
Assert.IsFalse(fakePackageManagementEvents.IsOnAcceptLicensesCalled);
498
public void AddPackage_CheckLoggerUsed_PackageViewModelLoggerUsedWhenResolvingPackageOperations()
501
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
502
viewModel.AddPackage();
504
ILogger expectedLogger = viewModel.OperationLoggerCreated;
505
ILogger actualLogger = fakeSolution.FakeProjectToReturnFromGetProject.Logger;
506
Assert.AreEqual(expectedLogger, actualLogger);
510
public void AddPackage_PackageAddedSuccessfully_InstallingPackageMessageIsFirstMessageLogged()
513
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
514
fakePackage.Id = "Test.Package";
515
fakePackage.Version = new Version(1, 2, 0, 55);
516
viewModel.AddPackage();
518
string expectedMessage = "------- Installing...Test.Package 1.2.0.55 -------";
519
string actualMessage = fakeLogger.FirstFormattedMessageLogged;
521
Assert.AreEqual(expectedMessage, actualMessage);
525
public void AddPackage_PackageAddedSuccessfully_NextToLastMessageLoggedMarksEndOfInstallation()
528
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
529
viewModel.AddPackage();
531
string expectedMessage = "==============================";
532
string actualMessage = fakeLogger.NextToLastFormattedMessageLogged;
534
Assert.AreEqual(expectedMessage, actualMessage);
538
public void AddPackage_PackageAddedSuccessfully_LastMessageLoggedIsEmptyLine()
541
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
542
viewModel.AddPackage();
544
string expectedMessage = String.Empty;
545
string actualMessage = fakeLogger.LastFormattedMessageLogged;
547
Assert.AreEqual(expectedMessage, actualMessage);
551
public void RemovePackage_PackageRemovedSuccessfully_UninstallingPackageMessageIsFirstMessageLogged()
554
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
555
fakePackage.Id = "Test.Package";
556
fakePackage.Version = new Version(1, 2, 0, 55);
557
viewModel.RemovePackage();
559
string expectedMessage = "------- Uninstalling...Test.Package 1.2.0.55 -------";
560
string actualMessage = fakeLogger.FirstFormattedMessageLogged;
562
Assert.AreEqual(expectedMessage, actualMessage);
566
public void RemovePackage_PackageRemovedSuccessfully_NextToLastMessageLoggedMarksEndOfInstallation()
569
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
570
viewModel.RemovePackage();
572
string expectedMessage = "==============================";
573
string actualMessage = fakeLogger.NextToLastFormattedMessageLogged;
575
Assert.AreEqual(expectedMessage, actualMessage);
579
public void RemovePackage_PackageRemovedSuccessfully_LastMessageLoggedIsEmptyLine()
582
viewModel.RemovePackage();
584
string expectedMessage = String.Empty;
585
string actualMessage = fakeLogger.LastFormattedMessageLogged;
587
Assert.AreEqual(expectedMessage, actualMessage);
591
public void AddPackage_ExceptionWhenInstallingPackage_ExceptionErrorMessageReported()
593
CreateViewModelWithExceptionThrowingProject();
594
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
595
Exception ex = new Exception("Test");
596
exceptionThrowingProject.ExceptionToThrowWhenCreateInstallPackageActionCalled = ex;
597
viewModel.AddPackage();
599
Assert.AreEqual(ex, fakePackageManagementEvents.ExceptionPassedToOnPackageOperationError);
603
public void AddPackage_PackageAddedSuccessfully_MessagesReportedPreviouslyAreCleared()
606
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
607
viewModel.AddPackage();
609
Assert.IsTrue(fakePackageManagementEvents.IsOnPackageOperationsStartingCalled);
613
public void AddPackage_ExceptionWhenInstallingPackage_ExceptionLogged()
615
CreateViewModelWithExceptionThrowingProject();
616
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
617
Exception ex = new Exception("Exception error message");
618
exceptionThrowingProject.ExceptionToThrowWhenCreateInstallPackageActionCalled = ex;
619
viewModel.AddPackage();
621
string actualMessage = fakeLogger.SecondFormattedMessageLogged;
622
bool containsExceptionErrorMessage = actualMessage.Contains("Exception error message");
624
Assert.IsTrue(containsExceptionErrorMessage, actualMessage);
628
public void RemovePackage_ExceptionWhenUninstallingPackage_ExceptionErrorMessageReported()
630
CreateViewModelWithExceptionThrowingProject();
631
Exception ex = new Exception("Test");
632
exceptionThrowingProject.ExceptionToThrowWhenCreateUninstallPackageActionCalled = ex;
633
viewModel.RemovePackage();
635
Assert.AreEqual(ex, fakePackageManagementEvents.ExceptionPassedToOnPackageOperationError);
639
public void RemovePackage_PackageUninstalledSuccessfully_MessagesReportedPreviouslyAreCleared()
642
viewModel.RemovePackage();
644
Assert.IsTrue(fakePackageManagementEvents.IsOnPackageOperationsStartingCalled);
648
public void RemovePackage_ExceptionWhenUninstallingPackage_ExceptionLogged()
650
CreateViewModelWithExceptionThrowingProject();
651
Exception ex = new Exception("Exception error message");
652
exceptionThrowingProject.ExceptionToThrowWhenCreateUninstallPackageActionCalled = ex;
653
viewModel.RemovePackage();
655
string actualMessage = fakeLogger.SecondFormattedMessageLogged;
656
bool containsExceptionErrorMessage = actualMessage.Contains("Exception error message");
658
Assert.IsTrue(containsExceptionErrorMessage, actualMessage);
662
public void AddPackage_ExceptionThrownWhenResolvingPackageOperations_ExceptionReported()
664
CreateViewModelWithExceptionThrowingSolution();
665
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
667
var exception = new Exception("Test");
668
exceptionThrowingSolution.ExceptionToThrowWhenGetProjectCalled = exception;
669
viewModel.AddPackage();
671
Assert.AreEqual(exception, fakePackageManagementEvents.ExceptionPassedToOnPackageOperationError);
675
public void AddPackage_PackagesInstalledSuccessfully_ViewModelPackageUsedWhenResolvingPackageOperations()
678
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
679
viewModel.AddPackage();
681
FakePackage expectedPackage = fakePackage;
682
IPackage actualPackage = fakeSolution
683
.FakeProjectToReturnFromGetProject
684
.PackagePassedToGetInstallPackageOperations;
686
Assert.AreEqual(expectedPackage, actualPackage);
690
public void AddPackage_PackagesInstalledSuccessfully_PackageDependenciesNotIgnoredWhenCheckingForPackageOperations()
693
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
694
viewModel.AddPackage();
696
bool result = fakeSolution
697
.FakeProjectToReturnFromGetProject
698
.IgnoreDependenciesPassedToGetInstallPackageOperations;
700
Assert.IsFalse(result);
704
public void RemovePackage_PackageRemovedSuccessfully_PackageIsRemoved()
707
viewModel.AddOneFakeInstallPackageOperationForViewModelPackage();
708
viewModel.RemovePackage();
710
ProcessPackageAction actionExecuted = fakeActionRunner.ActionPassedToRun;
712
Assert.AreEqual(fakeUninstallPackageAction, actionExecuted);
716
public void IsAdded_SolutionSelectedContainingOneProjectAndPackageIsInstalledInSolutionSharedRepository_ReturnsTrue()
718
CreateFakeSolution();
719
AddProjectToSolution();
720
fakeSolution.NoProjectsSelected();
721
fakeSolution.FakeInstalledPackages.Add(fakePackage);
722
CreateViewModel(fakeSolution);
724
bool added = viewModel.IsAdded;
726
Assert.IsTrue(added);
730
public void IsAdded_SolutionSelectedContainingOneProjectAndPackageIsNotInstalledInSolutionSharedRepository_ReturnsFalse()
733
AddProjectToSolution();
734
fakeSolution.NoProjectsSelected();
736
bool added = viewModel.IsAdded;
738
Assert.IsFalse(added);
742
public void IsManaged_SolutionSelectedContainingTwoProjects_ReturnsTrue()
744
CreateFakeSolution();
745
AddProjectToSolution();
746
AddProjectToSolution();
747
fakeSolution.NoProjectsSelected();
748
CreateViewModel(fakeSolution);
750
bool managed = viewModel.IsManaged;
752
Assert.IsTrue(managed);
756
public void IsManaged_SolutionWithOneProjectSelected_ReturnsFalse()
758
CreateFakeSolution();
759
AddProjectToSolution();
760
fakeSolution.FakeActiveMSBuildProject = fakeSolution.FakeMSBuildProjects[0];
761
CreateViewModel(fakeSolution);
763
bool managed = viewModel.IsManaged;
765
Assert.IsFalse(managed);
769
public void ManagePackageCommand_TwoProjectsSelectedAndCommandExecuted_UserPromptedToSelectTwoProjects()
771
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
772
UserCancelsProjectSelection();
773
viewModel.ManagePackageCommand.Execute(null);
775
IEnumerable<IPackageManagementSelectedProject> selectedProjects =
776
fakePackageManagementEvents.SelectedProjectsPassedToOnSelectProjects;
778
var expectedSelectedProjects = new List<IPackageManagementSelectedProject>();
779
expectedSelectedProjects.Add(new FakeSelectedProject("Project A"));
780
expectedSelectedProjects.Add(new FakeSelectedProject("Project B"));
782
SelectedProjectCollectionAssert.AreEqual(expectedSelectedProjects, selectedProjects);
786
public void ManagePackage_TwoProjectsSelectedAndUserAcceptsSelectedProjects_MessagesReportedPreviouslyAreCleared()
788
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
789
UserAcceptsProjectSelection();
791
viewModel.ManagePackage();
793
Assert.IsTrue(fakePackageManagementEvents.IsOnPackageOperationsStartingCalled);
797
public void ManagePackage_TwoProjectsSelectedAndUserCancelsSelectedProjects_MessagesReportedPreviouslyAreNotCleared()
799
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
800
UserCancelsProjectSelection();
802
viewModel.ManagePackage();
804
Assert.IsFalse(fakePackageManagementEvents.IsOnPackageOperationsStartingCalled);
808
public void ManagePackage_TwoProjectsSelectedAndUserAcceptsSelectedProjects_IsAddedPropertyChanged()
810
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
811
UserAcceptsProjectSelection();
813
string propertyChangedName = null;
814
viewModel.PropertyChanged += (sender, e) => propertyChangedName = e.PropertyName;
816
viewModel.ManagePackage();
818
Assert.AreEqual("IsAdded", propertyChangedName);
822
public void ManagePackage_TwoProjectsSelectedAndUserAcceptsSelectedProjects_NextToLastMessageLoggedMarksEndOfInstallation()
824
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
825
UserAcceptsProjectSelection();
827
viewModel.ManagePackage();
829
string expectedMessage = "==============================";
830
string actualMessage = fakeLogger.NextToLastFormattedMessageLogged;
832
Assert.AreEqual(expectedMessage, actualMessage);
836
public void ManagePackage_TwoProjectsSelectedAndUserAcceptsSelectedProjects_LastMessageLoggedIsEmptyLine()
838
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
839
UserAcceptsProjectSelection();
841
viewModel.ManagePackage();
843
string expectedMessage = String.Empty;
844
string actualMessage = fakeLogger.LastFormattedMessageLogged;
846
Assert.AreEqual(expectedMessage, actualMessage);
850
public void ManagePackagesForSelectedProjects_OneProjectIsSelected_OneProjectIsInstalled()
853
CreateTwoFakeSelectedProjects();
854
FakeSelectedProject project = fakeSelectedProjects[1];
855
project.IsSelected = true;
856
InstallPackageAction expectedAction = project.FakeInstallPackageAction;
858
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
860
List<ProcessPackageAction> actions = fakeActionRunner.GetActionsRunInOneCallAsList();
861
InstallPackageAction action = actions[0] as InstallPackageAction;
863
Assert.AreEqual(1, actions.Count);
864
Assert.AreEqual(fakePackage, action.Package);
865
Assert.AreEqual(expectedAction, action);
869
public void ManagePackagesForSelectedProjects_FirstProjectIsSelectedAndPackageOperationRequiresLicenseAcceptance_UserPromptedToAcceptLicenses()
872
CreateTwoFakeSelectedProjects();
873
FakeSelectedProject selectedProject = fakeSelectedProjects[0];
874
selectedProject.IsSelected = true;
875
FakePackageOperation operation = selectedProject.AddFakeInstallPackageOperation();
876
operation.FakePackage.RequireLicenseAcceptance = true;
877
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
879
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
881
var expectedPackages = new FakePackage[] {
882
operation.FakePackage
885
List<IPackage> actualPackages = fakePackageManagementEvents.GetPackagesPassedToOnAcceptLicensesAsList();
887
CollectionAssert.AreEqual(expectedPackages, actualPackages);
891
public void ManagePackagesForSelectedProjects_FirstProjectIsSelectedAndPackageOperationRequiresLicenseAcceptance_PackageInViewModelUsedToGetPackageOperations()
894
CreateTwoFakeSelectedProjects();
895
FakeSelectedProject selectedProject = fakeSelectedProjects[0];
896
selectedProject.IsSelected = true;
897
FakePackageOperation operation = selectedProject.AddFakeInstallPackageOperation();
898
operation.FakePackage.RequireLicenseAcceptance = true;
899
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
901
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
903
IPackage actualPackage = selectedProject.FakeProject.PackagePassedToGetInstallPackageOperations;
905
Assert.AreEqual(fakePackage, actualPackage);
909
public void ManagePackagesForSelectedProjects_FirstProjectIsSelectedAndPackageOperationRequiresLicenseAcceptance_PackageDependenciesAreNotIgnored()
912
CreateTwoFakeSelectedProjects();
913
FakeSelectedProject selectedProject = fakeSelectedProjects[0];
914
selectedProject.IsSelected = true;
915
FakePackageOperation operation = selectedProject.AddFakeInstallPackageOperation();
916
operation.FakePackage.RequireLicenseAcceptance = true;
917
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
919
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
921
bool ignored = selectedProject.FakeProject.IgnoreDependenciesPassedToGetInstallPackageOperations;
923
Assert.IsFalse(ignored);
927
public void ManagePackagesForSelectedProjects_FirstProjectIsSelectedAndTwoPackageOperationsRequireLicenseAcceptance_UserPromptedToAcceptLicensesForTwoPackages()
930
CreateTwoFakeSelectedProjects();
931
FirstFakeSelectedProject.IsSelected = true;
933
FakePackageOperation firstOperation =
934
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
936
FakePackageOperation secondOperation =
937
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
939
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
941
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
943
var expectedPackages = new FakePackage[] {
944
firstOperation.FakePackage,
945
secondOperation.FakePackage
948
List<IPackage> actualPackages = fakePackageManagementEvents.GetPackagesPassedToOnAcceptLicensesAsList();
950
CollectionAssert.AreEqual(expectedPackages, actualPackages);
954
public void ManagePackagesForSelectedProjects_TwoPackageOperationsRequireLicenseAcceptanceButOneIsUninstallPackageOperation_UserPromptedToAcceptLicenseForInstallPackageOperationOnly()
957
CreateTwoFakeSelectedProjects();
958
FirstFakeSelectedProject.IsSelected = true;
959
FakePackageOperation installOperation =
960
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
961
AddFakeUninstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
963
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
965
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
967
var expectedPackages = new FakePackage[] {
968
installOperation.FakePackage
971
List<IPackage> actualPackages = fakePackageManagementEvents.GetPackagesPassedToOnAcceptLicensesAsList();
973
CollectionAssert.AreEqual(expectedPackages, actualPackages);
977
public void ManagePackagesForSelectedProjects_OneInstallPackageOperationsDoesNotRequireLicenseAcceptance_UserIsNotPromptedToAcceptLicense()
980
CreateTwoFakeSelectedProjects();
981
FirstFakeSelectedProject.IsSelected = true;
982
AddFakeInstallPackageOperationWithPackageThatDoesNotRequireLicenseAcceptance(FirstFakeSelectedProject);
984
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
986
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
988
Assert.IsFalse(fakePackageManagementEvents.IsOnAcceptLicensesCalled);
992
public void ManagePackagesForSelectedProjects_OneInstallPackageOperationsRequiresLicenseAcceptanceButIsInstalledInSolutionAlready_UserIsNotPromptedToAcceptLicense()
995
CreateTwoFakeSelectedProjects();
996
FirstFakeSelectedProject.IsSelected = true;
998
FakePackageOperation installOperation =
999
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
1001
fakeSolution.FakeInstalledPackages.Add(installOperation.FakePackage);
1003
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
1005
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1007
Assert.IsFalse(fakePackageManagementEvents.IsOnAcceptLicensesCalled);
1011
public void ManagePackagesForSelectedProjects_FirstProjectIsSelectedAndUserDoesNotAcceptPackageLicense_PackageIsNotInstalled()
1014
CreateTwoFakeSelectedProjects();
1015
FirstFakeSelectedProject.IsSelected = true;
1017
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
1019
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
1021
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1023
Assert.IsFalse(fakeActionRunner.IsRunCalled);
1027
public void ManagePackagesForSelectedProjects_TwoProjectsButNeitherIsSelected_NoPackageActionsAreRun()
1030
CreateTwoFakeSelectedProjects();
1032
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1034
Assert.IsFalse(fakeActionRunner.IsRunCalled);
1038
public void ManagePackagesForSelectedProjects_FirstProjectIsSelectedAndUserAcceptsPackageLicense_PackageIsInstalled()
1041
CreateTwoFakeSelectedProjects();
1042
FirstFakeSelectedProject.IsSelected = true;
1044
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
1046
fakePackageManagementEvents.OnAcceptLicensesReturnValue = true;
1048
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1050
InstallPackageAction expectedAction = FirstFakeSelectedProject.FakeInstallPackageAction;
1051
List<ProcessPackageAction> actions = fakeActionRunner.GetActionsRunInOneCallAsList();
1052
InstallPackageAction action = actions[0] as InstallPackageAction;
1054
Assert.AreEqual(1, actions.Count);
1055
Assert.AreEqual(fakePackage, action.Package);
1056
Assert.AreEqual(expectedAction, action);
1060
public void ManagePackagesForSelectedProjects_TwoProjectsAreSelectedAndUserAcceptsPackageLicense_UserIsNotPromptedTwiceToAcceptLicenses()
1063
CreateTwoFakeSelectedProjects();
1064
FirstFakeSelectedProject.IsSelected = true;
1065
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
1067
SecondFakeSelectedProject.IsSelected = true;
1068
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(SecondFakeSelectedProject);
1070
fakePackageManagementEvents.OnAcceptLicensesReturnValue = true;
1072
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1074
List<IEnumerable<IPackage>> packagesPassedToAcceptLicenses =
1075
fakePackageManagementEvents.PackagesPassedToAcceptLicenses;
1076
Assert.AreEqual(1, packagesPassedToAcceptLicenses.Count);
1080
public void ManagePackagesForSelectedProjects_FirstProjectSelectedAndExceptionThrownWhenResolvingPackageOperations_ExceptionReported()
1083
CreateTwoFakeSelectedProjects();
1084
FirstFakeSelectedProject.IsSelected = true;
1085
var exceptionThrowingProject = new ExceptionThrowingPackageManagementProject();
1086
FirstFakeSelectedProject.FakeProject = exceptionThrowingProject;
1087
AddFakeInstallPackageOperationWithPackageThatDoesNotRequireLicenseAcceptance(FirstFakeSelectedProject);
1089
var exception = new Exception("Test");
1090
exceptionThrowingProject.ExceptionToThrowWhenGetInstallPackageOperationsCalled = exception;
1091
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1093
Assert.AreEqual(exception, fakePackageManagementEvents.ExceptionPassedToOnPackageOperationError);
1097
public void ManagePackagesForSelectedProjects_FirstProjectSelectedAndExceptionThrownWhenCreatingInstallAction_ExceptionLogged()
1100
CreateTwoFakeSelectedProjects();
1101
FirstFakeSelectedProject.IsSelected = true;
1102
var exceptionThrowingProject = new ExceptionThrowingPackageManagementProject();
1103
FirstFakeSelectedProject.FakeProject = exceptionThrowingProject;
1104
AddFakeInstallPackageOperationWithPackageThatDoesNotRequireLicenseAcceptance(FirstFakeSelectedProject);
1106
var exception = new Exception("Exception error message");
1107
exceptionThrowingProject.ExceptionToThrowWhenCreateInstallPackageActionCalled = exception;
1108
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1110
bool contains = fakeLogger.FormattedMessagesLoggedContainsText("Exception error message");
1112
Assert.IsTrue(contains);
1116
public void ManagePackagesForSelectedProjects_TwoProjectsOneSelectedAndPackageRequiresLicenseAcceptance_PackageViewModelLoggerUsedWhenResolvingPackageOperations()
1119
CreateTwoFakeSelectedProjects();
1120
FirstFakeSelectedProject.IsSelected = true;
1121
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
1122
fakePackageManagementEvents.OnAcceptLicensesReturnValue = false;
1124
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1126
ILogger expectedLogger = viewModel.OperationLoggerCreated;
1127
ILogger actualLogger = FirstFakeSelectedProject.Project.Logger;
1128
Assert.AreEqual(expectedLogger, actualLogger);
1132
public void ManagePackage_UserAcceptsProjectSelection_ManagingPackageMessageIsFirstMessageLogged()
1134
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
1135
UserAcceptsProjectSelection();
1136
fakePackage.Id = "Test.Package";
1137
fakePackage.Version = new Version(1, 2, 0, 55);
1138
viewModel.ManagePackage();
1140
string expectedMessage = "------- Managing...Test.Package 1.2.0.55 -------";
1141
string actualMessage = fakeLogger.FirstFormattedMessageLogged;
1143
Assert.AreEqual(expectedMessage, actualMessage);
1147
public void ManagePackagesForSelectedProjects_TwoProjectsNoneSelectedAndFirstPackageHasLicense_UserIsNotPromptedToAcceptLicense()
1150
CreateTwoFakeSelectedProjects();
1151
AddFakeInstallPackageOperationWithPackageThatRequiresLicenseAcceptance(FirstFakeSelectedProject);
1153
viewModel.ManagePackagesForSelectedProjects(fakeSelectedProjects);
1155
Assert.IsFalse(fakePackageManagementEvents.IsOnAcceptLicensesCalled);
1159
public void ManagePackage_TwoProjectsAndFirstSelectedInDialog_PackageIsInstalled()
1161
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
1162
UserAcceptsProjectSelection();
1163
fakePackageManagementEvents.ProjectsToSelect.Add("Project A");
1164
viewModel.ManagePackage();
1166
List<ProcessPackageAction> actions = fakeActionRunner.GetActionsRunInOneCallAsList();
1167
ProcessPackageAction action = actions[0];
1168
FakePackageManagementProject expectedProject = fakeSolution.FakeProjectsToReturnFromGetProject["Project A"];
1170
Assert.AreEqual(expectedProject, action.Project);
1174
public void ManagePackage_TwoProjectsAndSecondSelectedInDialog_ProjectHasLoggerSet()
1176
CreateViewModelWithTwoProjectsSelected("Project A", "Project B");
1177
UserAcceptsProjectSelection();
1178
fakePackageManagementEvents.ProjectsToSelect.Add("Project B");
1179
viewModel.ManagePackage();
1181
FakePackageManagementProject project = fakeSolution.FakeProjectsToReturnFromGetProject["Project B"];
1182
ILogger expectedLogger = viewModel.OperationLoggerCreated;
1183
ILogger actualLogger = project.Logger;
1184
Assert.AreEqual(expectedLogger, actualLogger);