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.
785 lines
36 KiB
785 lines
36 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 System.IO; |
|
using System.Linq; |
|
using System.Threading; |
|
using ICSharpCode.AddInManager2.Model; |
|
using ICSharpCode.AddInManager2.Tests.Fakes; |
|
using ICSharpCode.AddInManager2.ViewModel; |
|
using ICSharpCode.Core; |
|
using NuGet; |
|
using NUnit.Framework; |
|
|
|
namespace ICSharpCode.AddInManager2.Tests |
|
{ |
|
public class AvailableAddInsViewModelTests |
|
{ |
|
private const string SharpDevelopAddInTag = " sharpdevelopaddin "; |
|
|
|
FakeAddInManagerServices _services; |
|
|
|
AddIn _addIn1; |
|
AddIn _addIn1_new; |
|
AddIn _addIn2; |
|
AddIn _addIn2_new; |
|
AddIn _addIn_noVersion; |
|
|
|
public AvailableAddInsViewModelTests() |
|
{ |
|
} |
|
|
|
private void CreateAddIns() |
|
{ |
|
// Create AddIn objects from *.addin files available in this assembly's output directory |
|
FakeAddInTree _addInTree = new FakeAddInTree(); |
|
|
|
using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test.addin")) |
|
{ |
|
_addIn1 = AddIn.Load(_addInTree, streamReader); |
|
} |
|
|
|
using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_New.addin")) |
|
{ |
|
_addIn1_new = AddIn.Load(_addInTree, streamReader); |
|
} |
|
|
|
using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_2.addin")) |
|
{ |
|
_addIn2 = AddIn.Load(_addInTree, streamReader); |
|
} |
|
|
|
using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_2_New.addin")) |
|
{ |
|
_addIn2_new = AddIn.Load(_addInTree, streamReader); |
|
} |
|
|
|
using (StreamReader streamReader = new StreamReader(@"TestResources\AddInManager2Test_noVersion.addin")) |
|
{ |
|
_addIn_noVersion = AddIn.Load(_addInTree, streamReader); |
|
} |
|
} |
|
|
|
[SetUp] |
|
public void SetUp() |
|
{ |
|
_services = new FakeAddInManagerServices(); |
|
_services.FakeSDAddInManagement = new FakeSDAddInManagement(); |
|
_services.Events = new AddInManagerEvents(); |
|
_services.FakeSetup = new FakeAddInSetup(_services.SDAddInManagement); |
|
_services.FakeSettings = new FakeAddInManagerSettings(); |
|
_services.FakeRepositories = new FakePackageRepositories(); |
|
_services.FakeNuGet = new FakeNuGetPackageManager(); |
|
|
|
// Create SynchronizationContext needed for the view model |
|
SynchronizationContext.SetSynchronizationContext(new SynchronizationContext()); |
|
} |
|
|
|
[Test] |
|
public void ShowInstallableAddIns() |
|
{ |
|
CreateAddIns(); |
|
_addIn1.Enabled = true; |
|
|
|
// Packages to be shown in repository |
|
FakePackage fakePackage1_old = new FakePackage() |
|
{ |
|
Id = _addIn1.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn1.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = false |
|
}; |
|
FakePackage fakePackage1_new = new FakePackage() |
|
{ |
|
Id = _addIn1_new.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn1_new.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
FakePackage fakePackage2 = new FakePackage() |
|
{ |
|
Id = _addIn2.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn2.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
|
|
// List of NuGet repositories |
|
List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
registeredPackageSources.Add(new PackageSource("", "Test Repository")); |
|
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
|
|
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); |
|
remoteRepository.Source = registeredPackageSources[0].Source; |
|
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1_old, fakePackage1_new, fakePackage2 }).AsQueryable(); |
|
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
|
|
// PackageRepository service should return remoteRepository instance |
|
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
{ |
|
return remoteRepository; |
|
}; |
|
|
|
FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable(); |
|
|
|
var viewModel = new AvailableAddInsViewModel(_services); |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); |
|
|
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1_new.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); |
|
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1_new.Manifest.PrimaryIdentity), "Name of 1st AddIn"); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1_new.Version), "Version of 1st AddIn"); |
|
Assert.That(firstAddIn.IsInstalled, Is.False, "1st AddIn must not be 'installed''"); |
|
Assert.That(firstAddIn.IsOffline, Is.False, "1st AddIn must not be 'offline'"); |
|
Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); |
|
Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'"); |
|
Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'"); |
|
Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'"); |
|
Assert.That(firstAddIn.HasNuGetConnection, Is.False, "1st AddIn must not have 'NuGet connection'"); |
|
Assert.That(viewModel.AddInPackages[0].IsExternallyReferenced, Is.False, "1st AddIn must not be 'externally referenced'"); |
|
Assert.That(viewModel.AddInPackages[1].IsExternallyReferenced, Is.False, "2nd AddIn must not be 'externally referenced'"); |
|
} |
|
|
|
[Test] |
|
public void ShowInstallableAddInsFromDifferentRepositories() |
|
{ |
|
CreateAddIns(); |
|
_addIn1.Enabled = true; |
|
|
|
// Package to be shown in repository |
|
FakePackage fakePackage1 = new FakePackage() |
|
{ |
|
Id = _addIn1.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn1.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
FakePackage fakePackage2 = new FakePackage() |
|
{ |
|
Id = _addIn2.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn2.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
|
|
// List of NuGet repositories |
|
List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
registeredPackageSources.Add(new PackageSource("source1", "Test Repository 1")); |
|
registeredPackageSources.Add(new PackageSource("source2", "Test Repository 2")); |
|
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
|
|
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
FakeCorePackageRepository remoteRepository1 = new FakeCorePackageRepository(); |
|
remoteRepository1.Source = registeredPackageSources[0].Source; |
|
remoteRepository1.ReturnedPackages = (new IPackage[] { fakePackage1 }).AsQueryable(); |
|
FakeCorePackageRepository remoteRepository2 = new FakeCorePackageRepository(); |
|
remoteRepository2.Source = registeredPackageSources[1].Source; |
|
remoteRepository2.ReturnedPackages = (new IPackage[] { fakePackage2 }).AsQueryable(); |
|
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
|
|
// PackageRepository service should return remoteRepository instance |
|
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
{ |
|
if (packageSource.Source == remoteRepository1.Source) |
|
{ |
|
return remoteRepository1; |
|
} |
|
else if (packageSource.Source == remoteRepository2.Source) |
|
{ |
|
return remoteRepository2; |
|
} |
|
|
|
return null; |
|
}; |
|
|
|
FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable(); |
|
|
|
var viewModel = new AvailableAddInsViewModel(_services); |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(1), "AddIn list must contain 1 item."); |
|
|
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); |
|
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Name of 1st AddIn"); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1.Version), "Version of 1st AddIn"); |
|
|
|
viewModel.SelectedPackageSource = viewModel.PackageRepositories[1]; |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(1), "AddIn list must contain 1 item."); |
|
|
|
AddInPackageViewModelBase secondAddIn = viewModel.AddInPackages[0]; |
|
Assert.That(secondAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 2nd AddIn"); |
|
Assert.That(secondAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 2nd AddIn"); |
|
Assert.That(secondAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 2nd AddIn"); |
|
} |
|
|
|
[Test] |
|
public void SearchInstallableAddIns() |
|
{ |
|
CreateAddIns(); |
|
_addIn1.Enabled = true; |
|
|
|
// Packages to be shown in repository |
|
FakePackage fakePackage1 = new FakePackage() |
|
{ |
|
Id = _addIn1.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn1.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
FakePackage fakePackage2 = new FakePackage() |
|
{ |
|
Id = _addIn2.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn2.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
|
|
// List of NuGet repositories |
|
List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
registeredPackageSources.Add(new PackageSource("", "Test Repository")); |
|
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
|
|
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); |
|
remoteRepository.Source = registeredPackageSources[0].Source; |
|
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable(); |
|
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
|
|
// PackageRepository service should return remoteRepository instance |
|
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
{ |
|
return remoteRepository; |
|
}; |
|
|
|
FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable(); |
|
|
|
var viewModel = new AvailableAddInsViewModel(_services); |
|
viewModel.SearchTerms = fakePackage2.Id; |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(1), "AddIn list must contain 1 item."); |
|
|
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); |
|
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 1st AddIn"); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 1st AddIn"); |
|
} |
|
|
|
[Test] |
|
public void SearchInstallableAddInsWithMultipleReleasesAndDownloadCountSorting() |
|
{ |
|
CreateAddIns(); |
|
_addIn1.Enabled = true; |
|
|
|
// Packages to be shown in repository |
|
// To test correct sorting we let the newer release of addIn2 appear before the older one. |
|
FakePackage fakePackage2_new = new FakePackage() |
|
{ |
|
Id = _addIn2_new.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn2_new.Version), |
|
Tags = SharpDevelopAddInTag, |
|
DownloadCount = 30, |
|
IsLatestVersion = true |
|
}; |
|
FakePackage fakePackage1 = new FakePackage() |
|
{ |
|
Id = _addIn1.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn1.Version), |
|
Tags = SharpDevelopAddInTag, |
|
DownloadCount = 10, |
|
IsLatestVersion = true |
|
}; |
|
FakePackage fakePackage2 = new FakePackage() |
|
{ |
|
Id = _addIn2.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn2.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = false |
|
}; |
|
|
|
// List of NuGet repositories |
|
List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
registeredPackageSources.Add(new PackageSource("", "Test Repository")); |
|
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
|
|
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); |
|
remoteRepository.Source = registeredPackageSources[0].Source; |
|
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage2_new, fakePackage1, fakePackage2 }).AsQueryable(); |
|
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
|
|
// PackageRepository service should return remoteRepository instance |
|
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
{ |
|
return remoteRepository; |
|
}; |
|
|
|
FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable(); |
|
|
|
var viewModel = new AvailableAddInsViewModel(_services); |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
// There must be only 2 packages in list, because user should see only latest releases |
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); |
|
|
|
// fakePackage2_new is the first one, because it has a greater download count |
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn2_new.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); |
|
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn2_new.Manifest.PrimaryIdentity), "Name of 1st AddIn"); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2_new.Version), "Version of 1st AddIn"); |
|
} |
|
|
|
// [Test] |
|
// public void FilteringOutNonSharpDevelopPackages() |
|
// { |
|
// CreateAddIns(); |
|
// _addIn1.Enabled = true; |
|
// |
|
// // Package to be shown in repository |
|
// FakePackage fakePackage1 = new FakePackage() |
|
// { |
|
// Id = _addIn1.Manifest.PrimaryIdentity, |
|
// Version = new SemanticVersion(_addIn1.Version) |
|
// }; |
|
// FakePackage fakePackage2 = new FakePackage() |
|
// { |
|
// Id = _addIn2.Manifest.PrimaryIdentity, |
|
// Version = new SemanticVersion(_addIn2.Version), |
|
// Tags = SharpDevelopAddInTag |
|
// }; |
|
// |
|
// // List of NuGet repositories |
|
// List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
// registeredPackageSources.Add(new PackageSource("", "Test Repository")); |
|
// _services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
// |
|
// List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
// FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); |
|
// remoteRepository.Source = registeredPackageSources[0].Source; |
|
// remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable(); |
|
// _services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
// |
|
// // PackageRepository service should return remoteRepository instance |
|
// _services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
// { |
|
// return remoteRepository; |
|
// }; |
|
// |
|
// FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
// _services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
// localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable(); |
|
// |
|
// var viewModel = new AvailableAddInsViewModel(_services); |
|
// viewModel.ReadPackagesAndWaitForUpdate(); |
|
// |
|
// Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(1), "AddIn list must contain 1 item."); |
|
// |
|
// AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; |
|
// Assert.That(firstAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); |
|
// Assert.That(firstAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 1st AddIn"); |
|
// Assert.That(firstAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 1st AddIn"); |
|
// } |
|
|
|
[Test] |
|
public void ShowInstallableAddInsWithPaging() |
|
{ |
|
CreateAddIns(); |
|
_addIn1.Enabled = true; |
|
|
|
// Packages to be shown in repository |
|
FakePackage[] fakePackages = new FakePackage[35]; |
|
for (int i = 0; i < fakePackages.Length; i++) |
|
{ |
|
fakePackages[i] = new FakePackage() |
|
{ |
|
Id = _addIn1.Manifest.PrimaryIdentity + i.ToString("00"), |
|
Version = new SemanticVersion(_addIn1.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
} |
|
|
|
// List of NuGet repositories |
|
List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
registeredPackageSources.Add(new PackageSource("", "Test Repository")); |
|
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
|
|
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); |
|
remoteRepository.Source = registeredPackageSources[0].Source; |
|
remoteRepository.ReturnedPackages = fakePackages.AsQueryable(); |
|
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
|
|
// PackageRepository service should return remoteRepository instance |
|
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
{ |
|
return remoteRepository; |
|
}; |
|
|
|
FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
localRepository.ReturnedPackages = (new IPackage[] { }).AsQueryable(); |
|
|
|
var viewModel = new AvailableAddInsViewModel(_services); |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
int itemsPerPage = 10; |
|
int assumedPageCount = (fakePackages.Length / itemsPerPage) + 1; |
|
Assert.That(viewModel.Pages.Count, Is.EqualTo(assumedPageCount), "There must be " + assumedPageCount + " pages"); |
|
|
|
// First page |
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(itemsPerPage), "First page contains " + itemsPerPage + " AddIns."); |
|
for (int i = 0; i < itemsPerPage; i++) |
|
{ |
|
int realIndex = i; |
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[i]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(fakePackages[realIndex].Id), "Primary identity of AddIn " + realIndex); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(fakePackages[realIndex].Version.Version), "Version of AddIn " + realIndex); |
|
} |
|
|
|
viewModel.SetPageAndWaitForUpdate(2); |
|
|
|
// Second page |
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(itemsPerPage), "Second page contains " + itemsPerPage + " AddIns."); |
|
for (int i = 0; i < itemsPerPage; i++) |
|
{ |
|
int realIndex = i + itemsPerPage; |
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[i]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(fakePackages[realIndex].Id), "Primary identity of AddIn " + realIndex); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(fakePackages[realIndex].Version.Version), "Version of AddIn " + realIndex); |
|
} |
|
|
|
viewModel.SetPageAndWaitForUpdate(3); |
|
|
|
// Third page |
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(itemsPerPage), "Third page contains " + itemsPerPage + " AddIns."); |
|
for (int i = 0; i < itemsPerPage; i++) |
|
{ |
|
int realIndex = i + (itemsPerPage * 2); |
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[i]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(fakePackages[realIndex].Id), "Primary identity of AddIn " + realIndex); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(fakePackages[realIndex].Version.Version), "Version of AddIn " + realIndex); |
|
} |
|
} |
|
|
|
[Test] |
|
public void ShowAlreadyInstalledAddIns() |
|
{ |
|
CreateAddIns(); |
|
_addIn1.Enabled = true; |
|
|
|
// Package to be shown in repository |
|
FakePackage fakePackage1 = new FakePackage() |
|
{ |
|
Id = _addIn1.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn1.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
FakePackage fakePackage2 = new FakePackage() |
|
{ |
|
Id = _addIn2.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn2.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
|
|
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1.Id); |
|
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage1.Version.ToString()); |
|
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage2.Id); |
|
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage2.Version.ToString()); |
|
|
|
// List of NuGet repositories |
|
List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
registeredPackageSources.Add(new PackageSource("", "Test Repository")); |
|
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
|
|
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); |
|
remoteRepository.Source = registeredPackageSources[0].Source; |
|
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable(); |
|
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
|
|
// PackageRepository service should return remoteRepository instance |
|
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
{ |
|
return remoteRepository; |
|
}; |
|
|
|
FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
localRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable(); |
|
|
|
// Simulate list of AddIns |
|
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn1); |
|
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2); |
|
|
|
// Simulation of resolving AddIns <-> NuGet packages |
|
_services.FakeSetup.GetAddInForNuGetPackageCallback = delegate(IPackage package, bool withAddInsMarkedForInstallation) |
|
{ |
|
if (package.Id == _addIn1.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute]) |
|
{ |
|
return _addIn1; |
|
} |
|
else if (package.Id == _addIn2.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute]) |
|
{ |
|
return _addIn2; |
|
} |
|
|
|
return null; |
|
}; |
|
|
|
var viewModel = new AvailableAddInsViewModel(_services); |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); |
|
|
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); |
|
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1.Manifest.PrimaryIdentity), "Name of 1st AddIn"); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1.Version), "Version of 1st AddIn"); |
|
Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''"); |
|
Assert.That(firstAddIn.IsOffline, Is.False, "1st AddIn must not be 'offline'"); |
|
Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); |
|
Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'"); |
|
Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'"); |
|
Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'"); |
|
Assert.That(firstAddIn.HasNuGetConnection, Is.False, "1st AddIn must not have 'NuGet connection'"); |
|
Assert.That(viewModel.AddInPackages[0].IsExternallyReferenced, Is.False, "1st AddIn must not be 'externally referenced'"); |
|
Assert.That(viewModel.AddInPackages[1].IsExternallyReferenced, Is.False, "2nd AddIn must not be 'externally referenced'"); |
|
|
|
AddInPackageViewModelBase secondAddIn = viewModel.AddInPackages[1]; |
|
Assert.That(secondAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 2nd AddIn"); |
|
Assert.That(secondAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 2nd AddIn"); |
|
Assert.That(secondAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 2nd AddIn"); |
|
Assert.That(secondAddIn.IsInstalled, Is.True, "2nd AddIn must be 'installed''"); |
|
Assert.That(secondAddIn.IsOffline, Is.False, "2nd AddIn must not be 'offline'"); |
|
Assert.That(secondAddIn.IsEnabled, Is.True, "2nd AddIn must be 'enabled'"); |
|
Assert.That(secondAddIn.IsUpdate, Is.False, "2nd AddIn mustnot be 'update'"); |
|
Assert.That(secondAddIn.IsAdded, Is.False, "2nd AddIn must not be 'added'"); |
|
Assert.That(secondAddIn.IsRemoved, Is.False, "2nd AddIn must not be 'removed'"); |
|
Assert.That(secondAddIn.HasNuGetConnection, Is.False, "2nd AddIn must not have 'NuGet connection'"); |
|
} |
|
|
|
[Test] |
|
public void ShowAlreadyInstalledAddInsWithoutManifestVersion() |
|
{ |
|
CreateAddIns(); |
|
_addIn_noVersion.Enabled = true; |
|
|
|
// Package to be shown in repository |
|
FakePackage fakePackage1 = new FakePackage() |
|
{ |
|
Id = _addIn_noVersion.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion("1.0.2.0"), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
FakePackage fakePackage2 = new FakePackage() |
|
{ |
|
Id = _addIn2.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn2.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
|
|
_addIn_noVersion.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1.Id); |
|
_addIn_noVersion.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage1.Version.ToString()); |
|
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage2.Id); |
|
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage2.Version.ToString()); |
|
|
|
// List of NuGet repositories |
|
List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
registeredPackageSources.Add(new PackageSource("", "Test Repository")); |
|
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
|
|
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); |
|
remoteRepository.Source = registeredPackageSources[0].Source; |
|
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable(); |
|
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
|
|
// PackageRepository service should return remoteRepository instance |
|
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
{ |
|
return remoteRepository; |
|
}; |
|
|
|
FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
localRepository.ReturnedPackages = (new IPackage[] { fakePackage1, fakePackage2 }).AsQueryable(); |
|
|
|
// Simulate list of AddIns |
|
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn_noVersion); |
|
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2); |
|
|
|
// Simulation of resolving AddIns <-> NuGet packages |
|
_services.FakeSetup.GetAddInForNuGetPackageCallback = delegate(IPackage package, bool withAddInsMarkedForInstallation) |
|
{ |
|
if (package.Id == _addIn_noVersion.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute]) |
|
{ |
|
return _addIn_noVersion; |
|
} |
|
else if (package.Id == _addIn2.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute]) |
|
{ |
|
return _addIn2; |
|
} |
|
|
|
return null; |
|
}; |
|
|
|
var viewModel = new AvailableAddInsViewModel(_services); |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); |
|
|
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn_noVersion.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); |
|
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn_noVersion.Manifest.PrimaryIdentity), "Name of 1st AddIn"); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(fakePackage1.Version.Version), "Version of 1st AddIn"); |
|
Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''"); |
|
Assert.That(firstAddIn.IsOffline, Is.False, "1st AddIn must not be 'offline'"); |
|
Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); |
|
Assert.That(firstAddIn.IsUpdate, Is.False, "1st AddIn must not be 'update'"); |
|
Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'"); |
|
Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'"); |
|
Assert.That(firstAddIn.HasNuGetConnection, Is.False, "1st AddIn must not have 'NuGet connection'"); |
|
Assert.That(viewModel.AddInPackages[0].IsExternallyReferenced, Is.False, "1st AddIn must not be 'externally referenced'"); |
|
Assert.That(viewModel.AddInPackages[1].IsExternallyReferenced, Is.False, "2nd AddIn must not be 'externally referenced'"); |
|
|
|
AddInPackageViewModelBase secondAddIn = viewModel.AddInPackages[1]; |
|
Assert.That(secondAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 2nd AddIn"); |
|
Assert.That(secondAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 2nd AddIn"); |
|
Assert.That(secondAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 2nd AddIn"); |
|
Assert.That(secondAddIn.IsInstalled, Is.True, "2nd AddIn must be 'installed''"); |
|
Assert.That(secondAddIn.IsOffline, Is.False, "2nd AddIn must not be 'offline'"); |
|
Assert.That(secondAddIn.IsEnabled, Is.True, "2nd AddIn must be 'enabled'"); |
|
Assert.That(secondAddIn.IsUpdate, Is.False, "2nd AddIn mustnot be 'update'"); |
|
Assert.That(secondAddIn.IsAdded, Is.False, "2nd AddIn must not be 'added'"); |
|
Assert.That(secondAddIn.IsRemoved, Is.False, "2nd AddIn must not be 'removed'"); |
|
Assert.That(secondAddIn.HasNuGetConnection, Is.False, "2nd AddIn must not have 'NuGet connection'"); |
|
} |
|
|
|
[Test] |
|
public void ShowUpdatableAddIns() |
|
{ |
|
CreateAddIns(); |
|
_addIn1.Enabled = true; |
|
|
|
// Package to be shown in repository |
|
FakePackage fakePackage1_old = new FakePackage() |
|
{ |
|
Id = _addIn1.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn1.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = false |
|
}; |
|
FakePackage fakePackage1_new = new FakePackage() |
|
{ |
|
Id = _addIn1_new.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn1_new.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
FakePackage fakePackage2 = new FakePackage() |
|
{ |
|
Id = _addIn2.Manifest.PrimaryIdentity, |
|
Version = new SemanticVersion(_addIn2.Version), |
|
Tags = SharpDevelopAddInTag, |
|
IsLatestVersion = true |
|
}; |
|
|
|
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage1_old.Id); |
|
_addIn1.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage1_old.Version.ToString()); |
|
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageIDManifestAttribute, fakePackage2.Id); |
|
_addIn2.Properties.Set(ManagedAddIn.NuGetPackageVersionManifestAttribute, fakePackage2.Version.ToString()); |
|
|
|
// List of NuGet repositories |
|
List<PackageSource> registeredPackageSources = new List<PackageSource>(); |
|
registeredPackageSources.Add(new PackageSource("", "Test Repository")); |
|
_services.FakeRepositories.RegisteredPackageSources = registeredPackageSources; |
|
|
|
List<IPackageRepository> registeredPackageRepositories = new List<IPackageRepository>(); |
|
FakeCorePackageRepository remoteRepository = new FakeCorePackageRepository(); |
|
remoteRepository.Source = registeredPackageSources[0].Source; |
|
remoteRepository.ReturnedPackages = (new IPackage[] { fakePackage1_new, fakePackage2 }).AsQueryable(); |
|
_services.FakeRepositories.RegisteredPackageRepositories = registeredPackageRepositories; |
|
|
|
// PackageRepository service should return remoteRepository instance |
|
_services.FakeRepositories.GetRepositoryFromSourceCallback = delegate(PackageSource packageSource) |
|
{ |
|
return remoteRepository; |
|
}; |
|
|
|
FakeCorePackageRepository localRepository = new FakeCorePackageRepository(); |
|
_services.FakeNuGet.FakeCorePackageManager.LocalRepository = localRepository; |
|
localRepository.ReturnedPackages = (new IPackage[] { fakePackage1_old, fakePackage2 }).AsQueryable(); |
|
|
|
// Simulate list of AddIns |
|
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn1); |
|
_services.FakeSDAddInManagement.RegisteredAddIns.Add(_addIn2); |
|
|
|
// Simulation of resolving AddIns <-> NuGet packages |
|
_services.FakeSetup.GetAddInForNuGetPackageCallback = delegate(IPackage package, bool withAddInsMarkedForInstallation) |
|
{ |
|
if (package.Id == _addIn1.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute]) |
|
{ |
|
return _addIn1; |
|
} |
|
else if (package.Id == _addIn2.Properties[ManagedAddIn.NuGetPackageIDManifestAttribute]) |
|
{ |
|
return _addIn2; |
|
} |
|
|
|
return null; |
|
}; |
|
|
|
var viewModel = new AvailableAddInsViewModel(_services); |
|
viewModel.ReadPackagesAndWaitForUpdate(); |
|
|
|
Assert.That(viewModel.AddInPackages.Count, Is.EqualTo(2), "AddIn list must contain 2 items."); |
|
|
|
AddInPackageViewModelBase firstAddIn = viewModel.AddInPackages[0]; |
|
Assert.That(firstAddIn.Id, Is.EqualTo(_addIn1_new.Manifest.PrimaryIdentity), "Primary identity of 1st AddIn"); |
|
Assert.That(firstAddIn.Name, Is.EqualTo(_addIn1_new.Manifest.PrimaryIdentity), "Name of 1st AddIn"); |
|
Assert.That(firstAddIn.Version, Is.EqualTo(_addIn1_new.Version), "Version of 1st AddIn"); |
|
Assert.That(firstAddIn.IsInstalled, Is.True, "1st AddIn must be 'installed''"); |
|
Assert.That(firstAddIn.IsOffline, Is.False, "1st AddIn must not be 'offline'"); |
|
Assert.That(firstAddIn.IsEnabled, Is.True, "1st AddIn must be 'enabled'"); |
|
Assert.That(firstAddIn.IsUpdate, Is.True, "1st AddIn must be 'update'"); |
|
Assert.That(firstAddIn.IsAdded, Is.False, "1st AddIn must not be 'added'"); |
|
Assert.That(firstAddIn.IsRemoved, Is.False, "1st AddIn must not be 'removed'"); |
|
Assert.That(firstAddIn.HasNuGetConnection, Is.False, "1st AddIn must not have 'NuGet connection'"); |
|
Assert.That(viewModel.AddInPackages[0].IsExternallyReferenced, Is.False, "1st AddIn must not be 'externally referenced'"); |
|
Assert.That(viewModel.AddInPackages[1].IsExternallyReferenced, Is.False, "2nd AddIn must not be 'externally referenced'"); |
|
|
|
AddInPackageViewModelBase secondAddIn = viewModel.AddInPackages[1]; |
|
Assert.That(secondAddIn.Id, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Primary identity of 2nd AddIn"); |
|
Assert.That(secondAddIn.Name, Is.EqualTo(_addIn2.Manifest.PrimaryIdentity), "Name of 2nd AddIn"); |
|
Assert.That(secondAddIn.Version, Is.EqualTo(_addIn2.Version), "Version of 2nd AddIn"); |
|
Assert.That(secondAddIn.IsInstalled, Is.True, "2nd AddIn must be 'installed''"); |
|
Assert.That(secondAddIn.IsOffline, Is.False, "2nd AddIn must not be 'offline'"); |
|
Assert.That(secondAddIn.IsEnabled, Is.True, "2nd AddIn must be 'enabled'"); |
|
Assert.That(secondAddIn.IsUpdate, Is.False, "2nd AddIn mustnot be 'update'"); |
|
Assert.That(secondAddIn.IsAdded, Is.False, "2nd AddIn must not be 'added'"); |
|
Assert.That(secondAddIn.IsRemoved, Is.False, "2nd AddIn must not be 'removed'"); |
|
Assert.That(secondAddIn.HasNuGetConnection, Is.False, "2nd AddIn must not have 'NuGet connection'"); |
|
} |
|
} |
|
}
|
|
|