#develop (short for SharpDevelop) is a free IDE for .NET programming languages.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

324 lines
10 KiB

// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using ICSharpCode.PackageManagement;
using ICSharpCode.PackageManagement.Design;
using NuGet;
using NUnit.Framework;
using PackageManagement.Tests.Helpers;
namespace PackageManagement.Tests
{
[TestFixture]
public class AvailablePackagesViewModelTests
{
AvailablePackagesViewModel viewModel;
FakePackageManagementService packageManagementService;
void CreateViewModel()
{
CreatePackageManagementService();
CreateViewModel(packageManagementService);
}
void CreatePackageManagementService()
{
packageManagementService = new FakePackageManagementService();
}
void CreateViewModel(IPackageManagementService packageManagementService)
{
viewModel = new AvailablePackagesViewModel(packageManagementService);
}
void AddOnePackageSourceToRegisteredSources()
{
packageManagementService.ClearPackageSources();
packageManagementService.AddOnePackageSource();
packageManagementService.HasMultiplePackageSources = false;
}
void AddTwoPackageSourcesToRegisteredSources()
{
var expectedPackageSources = new PackageSource[] {
new PackageSource("http://first.com", "First"),
new PackageSource("http://second.com", "Second")
};
AddPackageSourcesToRegisteredSources(expectedPackageSources);
packageManagementService.HasMultiplePackageSources = true;
}
void AddPackageSourcesToRegisteredSources(PackageSource[] sources)
{
packageManagementService.ClearPackageSources();
packageManagementService.AddPackageSources(sources);
}
void CreateNewActiveRepositoryWithDifferentPackages()
{
var package = new FakePackage("NewRepositoryPackageId");
var newRepository = new FakePackageRepository();
newRepository.FakePackages.Add(package);
packageManagementService.FakeActivePackageRepository = newRepository;
}
void SetUpTwoPackageSourcesAndViewModelHasReadPackages()
{
CreatePackageManagementService();
AddTwoPackageSourcesToRegisteredSources();
CreateViewModel(packageManagementService);
packageManagementService.ActivePackageSource = packageManagementService.Options.PackageSources[0];
viewModel.ReadPackages();
CreateNewActiveRepositoryWithDifferentPackages();
}
void ChangeSelectedPackageSourceToSecondSource()
{
var secondPackageSource = packageManagementService.Options.PackageSources[1];
viewModel.SelectedPackageSource = secondPackageSource;
}
void ChangeSelectedPackageSourceToFirstSource()
{
var firstPackageSource = packageManagementService.Options.PackageSources[0];
viewModel.SelectedPackageSource = firstPackageSource;
}
[Test]
public void ReadPackages_RepositoryHasThreePackagesWithSameIdButDifferentVersions_HasLatestPackageVersionOnly()
{
CreateViewModel();
var package1 = new FakePackage() {
Id = "Test",
Version = new Version(0, 1, 0, 0)
};
var package2 = new FakePackage() {
Id = "Test",
Version = new Version(0, 2, 0, 0)
};
var package3 = new FakePackage() {
Id = "Test",
Version = new Version(0, 3, 0, 0)
};
var packages = new FakePackage[] {
package1, package2, package3
};
packageManagementService.FakeActivePackageRepository.FakePackages.AddRange(packages);
viewModel.ReadPackages();
var expectedPackages = new FakePackage[] {
package3
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void IsSearchable_ByDefault_ReturnsTrue()
{
CreateViewModel();
Assert.IsTrue(viewModel.IsSearchable);
}
[Test]
public void Search_RepositoryHasThreePackagesWithSameIdButSearchTermsMatchNoPackageIds_ReturnsNoPackages()
{
CreateViewModel();
var package1 = new FakePackage() {
Id = "Test",
Description = "",
Version = new Version(0, 1, 0, 0)
};
var package2 = new FakePackage() {
Id = "Test",
Description = "",
Version = new Version(0, 2, 0, 0)
};
var package3 = new FakePackage() {
Id = "Test",
Description = "",
Version = new Version(0, 3, 0, 0)
};
var packages = new FakePackage[] {
package1, package2, package3
};
packageManagementService.FakeActivePackageRepository.FakePackages.AddRange(packages);
viewModel.ReadPackages();
viewModel.SearchTerms = "NotAMatch";
viewModel.Search();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
[Test]
public void ShowNextPage_TwoObjectsWatchingForPagesCollectionChangedEventAndUserMovesToPageTwoAndFilteredPackagesReturnsLessThanExpectedPackagesDueToMatchingVersions_InvalidOperationExceptionNotThrownWhen()
{
CreateViewModel();
viewModel.PageSize = 2;
var package1 = new FakePackage() {
Id = "First",
Description = "",
Version = new Version(0, 1, 0, 0)
};
var package2 = new FakePackage() {
Id = "Secon",
Description = "",
Version = new Version(0, 2, 0, 0)
};
var package3 = new FakePackage() {
Id = "Test",
Description = "",
Version = new Version(0, 3, 0, 0)
};
var package4 = new FakePackage() {
Id = "Test",
Description = "",
Version = new Version(0, 4, 0, 0)
};
var packages = new FakePackage[] {
package1, package2, package3, package4
};
packageManagementService.FakeActivePackageRepository.FakePackages.AddRange(packages);
viewModel.ReadPackages();
bool collectionChangedEventFired = false;
viewModel.Pages.CollectionChanged += (sender, e) => collectionChangedEventFired = true;
viewModel.ShowNextPage();
var expectedPackages = new FakePackage[] {
package4
};
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
Assert.IsTrue(collectionChangedEventFired);
}
[Test]
public void ShowSources_TwoPackageSources_ReturnsTrue()
{
CreatePackageManagementService();
AddTwoPackageSourcesToRegisteredSources();
CreateViewModel(packageManagementService);
Assert.IsTrue(viewModel.ShowPackageSources);
}
[Test]
public void ShowPackageSources_OnePackageSources_ReturnsFalse()
{
CreatePackageManagementService();
AddOnePackageSourceToRegisteredSources();
CreateViewModel(packageManagementService);
Assert.IsFalse(viewModel.ShowPackageSources);
}
[Test]
public void PackageSources_TwoPackageSourcesInOptions_HasTwoRepositoriesInCollection()
{
CreatePackageManagementService();
AddTwoPackageSourcesToRegisteredSources();
CreateViewModel(packageManagementService);
var expectedPackageSources = packageManagementService.Options.PackageSources;
PackageSourceCollectionAssert.AreEqual(expectedPackageSources, viewModel.PackageSources);
}
[Test]
public void SelectedPackageSource_TwoPackageSourcesInOptionsAndActivePackageSourceIsFirstSource_IsFirstPackageSource()
{
CreatePackageManagementService();
AddTwoPackageSourcesToRegisteredSources();
CreateViewModel(packageManagementService);
var expectedPackageSource = packageManagementService.Options.PackageSources[0];
packageManagementService.ActivePackageSource = expectedPackageSource;
Assert.AreEqual(expectedPackageSource, viewModel.SelectedPackageSource);
}
[Test]
public void SelectedPackageSource_TwoPackageSourcesInOptionsAndActivePackageSourceIsSecondSource_IsSecondPackageSource()
{
CreatePackageManagementService();
AddTwoPackageSourcesToRegisteredSources();
CreateViewModel(packageManagementService);
var expectedPackageSource = packageManagementService.Options.PackageSources[1];
packageManagementService.ActivePackageSource = expectedPackageSource;
Assert.AreEqual(expectedPackageSource, viewModel.SelectedPackageSource);
}
[Test]
public void SelectedPackageSource_Changed_PackageManagementServiceActivatePackageSourceChanged()
{
CreatePackageManagementService();
AddTwoPackageSourcesToRegisteredSources();
CreateViewModel(packageManagementService);
packageManagementService.ActivePackageSource = packageManagementService.Options.PackageSources[0];
var expectedPackageSource = packageManagementService.Options.PackageSources[1];
viewModel.SelectedPackageSource = expectedPackageSource;
Assert.AreEqual(expectedPackageSource, packageManagementService.ActivePackageSource);
}
[Test]
public void SelectedPackageSource_PackageSourceChangedAfterReadingPackages_PackagesReadFromNewPackageSourceAndDisplayed()
{
SetUpTwoPackageSourcesAndViewModelHasReadPackages();
ChangeSelectedPackageSourceToSecondSource();
var expectedPackages = packageManagementService.FakeActivePackageRepository.FakePackages;
PackageCollectionAssert.AreEqual(expectedPackages, viewModel.PackageViewModels);
}
[Test]
public void SelectedPackageSource_PackageSourceChangedAfterReadingPackages_PropertyChangedEventFiredAfterPackagesAreRead()
{
SetUpTwoPackageSourcesAndViewModelHasReadPackages();
int packageCountWhenPropertyChangedEventFired = -1;
viewModel.PropertyChanged += (sender, e) => packageCountWhenPropertyChangedEventFired = viewModel.PackageViewModels.Count;
ChangeSelectedPackageSourceToSecondSource();
Assert.AreEqual(1, packageCountWhenPropertyChangedEventFired);
}
[Test]
public void SelectedPackageSource_PackageSourceChangedButToSameSelectedPackageSource_PackagesAreNotRead()
{
SetUpTwoPackageSourcesAndViewModelHasReadPackages();
ChangeSelectedPackageSourceToFirstSource();
Assert.AreEqual(0, viewModel.PackageViewModels.Count);
}
[Test]
public void SelectedPackageSource_PackageSourceChangedButToSameSelectedPackageSource_PropertyChangedEventNotFired()
{
SetUpTwoPackageSourcesAndViewModelHasReadPackages();
bool fired = false;
viewModel.PropertyChanged += (sender, e) => fired = true;
ChangeSelectedPackageSourceToFirstSource();
Assert.IsFalse(fired);
}
}
}