Browse Source

Handle errors on opening Add Package Reference dialog.

pull/21/head
mrward 14 years ago
parent
commit
6bfdcc0912
  1. 10
      src/AddIns/Misc/PackageManagement/Project/Src/AvailablePackagesViewModel.cs
  2. 2
      src/AddIns/Misc/PackageManagement/Project/Src/Design/FakePackageManagementService.cs
  3. 3
      src/AddIns/Misc/PackageManagement/Project/Src/InstalledPackagesViewModel.cs
  4. 18
      src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs
  5. 19
      src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs
  6. 11
      src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementService.cs
  7. 20
      src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs
  8. 42
      src/AddIns/Misc/PackageManagement/Test/Src/PackageUpdatesViewModelTests.cs

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

@ -12,6 +12,7 @@ namespace ICSharpCode.PackageManagement
public class AvailablePackagesViewModel : PackagesViewModel public class AvailablePackagesViewModel : PackagesViewModel
{ {
IPackageRepository repository; IPackageRepository repository;
string errorMessage;
public AvailablePackagesViewModel( public AvailablePackagesViewModel(
IPackageManagementService packageManagementService, IPackageManagementService packageManagementService,
@ -25,11 +26,18 @@ namespace ICSharpCode.PackageManagement
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{ {
repository = PackageManagementService.ActivePackageRepository; try {
repository = PackageManagementService.ActivePackageRepository;
} catch (Exception ex) {
errorMessage = ex.Message;
}
} }
protected override IQueryable<IPackage> GetAllPackages() protected override IQueryable<IPackage> GetAllPackages()
{ {
if (repository == null) {
throw new ApplicationException(errorMessage);
}
return repository.GetPackages(); return repository.GetPackages();
} }

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

@ -53,7 +53,7 @@ namespace ICSharpCode.PackageManagement.Design
FakeActiveProjectManager.FakeSourceRepository = FakeActivePackageRepository; FakeActiveProjectManager.FakeSourceRepository = FakeActivePackageRepository;
} }
public IPackageRepository ActivePackageRepository { get; set; } public virtual IPackageRepository ActivePackageRepository { get; set; }
public virtual IProjectManager ActiveProjectManager { public virtual IProjectManager ActiveProjectManager {
get { return FakeActiveProjectManager; } get { return FakeActiveProjectManager; }

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

@ -31,8 +31,7 @@ namespace ICSharpCode.PackageManagement
try { try {
this.projectManager = PackageManagementService.ActiveProjectManager; this.projectManager = PackageManagementService.ActiveProjectManager;
} catch (Exception ex) { } catch (Exception ex) {
SaveError(ex); errorMessage = ex.Message;
errorMessage = ErrorMessage;
} }
} }

18
src/AddIns/Misc/PackageManagement/Project/Src/PackageUpdatesViewModel.cs

@ -15,6 +15,7 @@ namespace ICSharpCode.PackageManagement
IPackageManagementService packageManagementService; IPackageManagementService packageManagementService;
IPackageRepository localRepository; IPackageRepository localRepository;
IPackageRepository sourceRepository; IPackageRepository sourceRepository;
string errorMessage = String.Empty;
public PackageUpdatesViewModel( public PackageUpdatesViewModel(
IPackageManagementService packageManagementService, IPackageManagementService packageManagementService,
@ -27,14 +28,20 @@ namespace ICSharpCode.PackageManagement
protected override void UpdateRepositoryBeforeReadPackagesTaskStarts() protected override void UpdateRepositoryBeforeReadPackagesTaskStarts()
{ {
IProjectManager projectManager = packageManagementService.ActiveProjectManager; try {
localRepository = projectManager.LocalRepository; IProjectManager projectManager = packageManagementService.ActiveProjectManager;
localRepository = projectManager.LocalRepository;
} catch (Exception ex) {
errorMessage = ex.Message;
}
sourceRepository = packageManagementService.CreateAggregatePackageRepository(); sourceRepository = packageManagementService.CreateAggregatePackageRepository();
} }
protected override IQueryable<IPackage> GetAllPackages() protected override IQueryable<IPackage> GetAllPackages()
{ {
if (localRepository == null) {
ThrowSavedException();
}
IQueryable<IPackage> localPackages = localRepository.GetPackages(); IQueryable<IPackage> localPackages = localRepository.GetPackages();
return GetUpdatedPackages(localPackages); return GetUpdatedPackages(localPackages);
} }
@ -43,5 +50,10 @@ namespace ICSharpCode.PackageManagement
{ {
return sourceRepository.GetUpdates(localPackages).AsQueryable(); return sourceRepository.GetUpdates(localPackages).AsQueryable();
} }
void ThrowSavedException()
{
throw new ApplicationException(errorMessage);
}
} }
} }

19
src/AddIns/Misc/PackageManagement/Test/Src/AvailablePackagesViewModelTests.cs

@ -17,6 +17,7 @@ namespace PackageManagement.Tests
AvailablePackagesViewModel viewModel; AvailablePackagesViewModel viewModel;
FakePackageManagementService packageManagementService; FakePackageManagementService packageManagementService;
FakeTaskFactory taskFactory = new FakeTaskFactory(); FakeTaskFactory taskFactory = new FakeTaskFactory();
ExceptionThrowingPackageManagementService exceptionThrowingPackageManagementService;
void CreateViewModel() void CreateViewModel()
{ {
@ -36,6 +37,11 @@ namespace PackageManagement.Tests
viewModel = new AvailablePackagesViewModel(packageManagementService, messageReporter, taskFactory); viewModel = new AvailablePackagesViewModel(packageManagementService, messageReporter, taskFactory);
} }
void CreateExceptionThrowingPackageManagementService()
{
exceptionThrowingPackageManagementService = new ExceptionThrowingPackageManagementService();
}
void CompleteReadPackagesTask() void CompleteReadPackagesTask()
{ {
taskFactory.ExecuteAllFakeTasks(); taskFactory.ExecuteAllFakeTasks();
@ -360,5 +366,18 @@ namespace PackageManagement.Tests
Assert.AreEqual(1, viewModel.PackageViewModels.Count); Assert.AreEqual(1, viewModel.PackageViewModels.Count);
} }
[Test]
public void ReadPackages_ExceptionThrownWhenAccessingActiveRepository_ErrorMessageFromExceptionNotOverriddenByReadPackagesCall()
{
CreateExceptionThrowingPackageManagementService();
exceptionThrowingPackageManagementService.ExeptionToThrowWhenActiveRepositoryAccessed =
new Exception("Test");
CreateViewModel(exceptionThrowingPackageManagementService);
viewModel.ReadPackages();
ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
Assert.AreEqual("Test", ex.Message);
}
} }
} }

11
src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ExceptionThrowingPackageManagementService.cs

@ -13,6 +13,7 @@ namespace PackageManagement.Tests.Helpers
public Exception ExeptionToThrowWhenActiveProjectManagerAccessed { get; set; } public Exception ExeptionToThrowWhenActiveProjectManagerAccessed { get; set; }
public Exception ExeptionToThrowWhenInstallPackageCalled { get; set; } public Exception ExeptionToThrowWhenInstallPackageCalled { get; set; }
public Exception ExeptionToThrowWhenUninstallPackageCalled { get; set; } public Exception ExeptionToThrowWhenUninstallPackageCalled { get; set; }
public Exception ExeptionToThrowWhenActiveRepositoryAccessed { get; set; }
public override IProjectManager ActiveProjectManager { public override IProjectManager ActiveProjectManager {
get { get {
@ -23,6 +24,16 @@ namespace PackageManagement.Tests.Helpers
} }
} }
public override IPackageRepository ActivePackageRepository {
get {
if (ExeptionToThrowWhenActiveRepositoryAccessed != null) {
throw ExeptionToThrowWhenActiveRepositoryAccessed;
}
return base.ActivePackageRepository;
}
set { base.ActivePackageRepository = value; }
}
public override void InstallPackage(IPackageRepository repository, IPackage package, IEnumerable<PackageOperation> operations) public override void InstallPackage(IPackageRepository repository, IPackage package, IEnumerable<PackageOperation> operations)
{ {
throw ExeptionToThrowWhenInstallPackageCalled; throw ExeptionToThrowWhenInstallPackageCalled;

20
src/AddIns/Misc/PackageManagement/Test/Src/InstalledPackagesViewModelTests.cs

@ -90,26 +90,6 @@ namespace PackageManagement.Tests
Assert.AreEqual(0, viewModel.PackageViewModels.Count); Assert.AreEqual(0, viewModel.PackageViewModels.Count);
} }
[Test]
public void HasError_ActiveProjectManagerThrowsException_ReturnsTrue()
{
CreateExceptionThrowingPackageManagementService();
exceptionThrowingPackageManagementService.ExeptionToThrowWhenActiveProjectManagerAccessed = new Exception();
CreateViewModel(exceptionThrowingPackageManagementService);
Assert.IsTrue(viewModel.HasError);
}
[Test]
public void ErrorMessage_ActiveProjectManagerThrowsException_ReturnsErrorMessageFromException()
{
CreateExceptionThrowingPackageManagementService();
exceptionThrowingPackageManagementService.ExeptionToThrowWhenActiveProjectManagerAccessed = new Exception("Test");
CreateViewModel(exceptionThrowingPackageManagementService);
Assert.AreEqual("Test", viewModel.ErrorMessage);
}
[Test] [Test]
public void ReadPackages_ActiveProjectManagerThrowsException_ErrorMessageFromExceptionNotOverriddenByReadPackagesCall() public void ReadPackages_ActiveProjectManagerThrowsException_ErrorMessageFromExceptionNotOverriddenByReadPackagesCall()
{ {

42
src/AddIns/Misc/PackageManagement/Test/Src/PackageUpdatesViewModelTests.cs

@ -15,15 +15,31 @@ namespace PackageManagement.Tests
PackageUpdatesViewModel viewModel; PackageUpdatesViewModel viewModel;
FakePackageManagementService packageManagementService; FakePackageManagementService packageManagementService;
FakeTaskFactory taskFactory; FakeTaskFactory taskFactory;
ExceptionThrowingPackageManagementService exceptionThrowingPackageManagementService;
void CreateViewModel() void CreateViewModel()
{
CreatePackageManagementService();
CreateViewModel(packageManagementService);
}
void CreatePackageManagementService()
{ {
packageManagementService = new FakePackageManagementService(); packageManagementService = new FakePackageManagementService();
}
void CreateViewModel(FakePackageManagementService packageManagementService)
{
taskFactory = new FakeTaskFactory(); taskFactory = new FakeTaskFactory();
var messageReporter = new FakeMessageReporter(); var messageReporter = new FakeMessageReporter();
viewModel = new PackageUpdatesViewModel(packageManagementService, messageReporter, taskFactory); viewModel = new PackageUpdatesViewModel(packageManagementService, messageReporter, taskFactory);
} }
void CreateExceptionThrowingPackageManagementService()
{
exceptionThrowingPackageManagementService = new ExceptionThrowingPackageManagementService();
}
void CompleteReadPackagesTask() void CompleteReadPackagesTask()
{ {
taskFactory.ExecuteAllFakeTasks(); taskFactory.ExecuteAllFakeTasks();
@ -103,5 +119,31 @@ namespace PackageManagement.Tests
Assert.AreEqual(1, viewModel.PackageViewModels.Count); Assert.AreEqual(1, viewModel.PackageViewModels.Count);
} }
[Test]
public void ReadPackages_ActiveProjectManagerThrowsException_ErrorMessageFromExceptionNotOverriddenByReadPackagesCall()
{
CreateExceptionThrowingPackageManagementService();
exceptionThrowingPackageManagementService.ExeptionToThrowWhenActiveProjectManagerAccessed =
new Exception("Test");
CreateViewModel(exceptionThrowingPackageManagementService);
viewModel.ReadPackages();
ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
Assert.AreEqual("Test", ex.Message);
}
// [Test]
// public void ReadPackages_ActiveProjectManagerThrowsException_ErrorMessageFromExceptionReturned()
// {
// CreateExceptionThrowingPackageManagementService();
// exceptionThrowingPackageManagementService.ExeptionToThrowWhenActiveProjectManagerAccessed =
// new Exception("Test");
// CreateViewModel(exceptionThrowingPackageManagementService);
// viewModel.ReadPackages();
//
// ApplicationException ex = Assert.Throws<ApplicationException>(() => CompleteReadPackagesTask());
// Assert.AreEqual("Test", ex.Message);
// }
} }
} }

Loading…
Cancel
Save