public V3DetailControlModelTestBase(GlobalServiceProvider sp, V3PackageSearchMetadataFixture testData) { sp.Reset(); _testData = testData; // The versions pre-baked into the view model provide data for the first step of metadata extraction // which fails (null) in a V3 scenario--they need to be extracted using a metadata provider (below) var testVersion = new NuGetVersion(0, 0, 1); var testVersions = new List <VersionInfoContextInfo>() { new VersionInfoContextInfo(new NuGetVersion(0, 0, 1)), new VersionInfoContextInfo(new NuGetVersion(0, 0, 2)) }; _testViewModel = new PackageItemViewModel() { Id = "nuget.psm", Version = testVersion, Versions = new Lazy <Task <IReadOnlyCollection <VersionInfoContextInfo> > >(() => Task.FromResult <IReadOnlyCollection <VersionInfoContextInfo> >(testVersions)), InstalledVersion = testVersion, Sources = new List <PackageSourceContextInfo> { new PackageSourceContextInfo("nuget.psm.test") }, }; }
public async Task IconUrl_WithLocalPathAndColorProfile_LoadsImage() { // Prepare using (var testDir = TestDirectory.Create()) { byte[] bytes; Assembly testAssembly = typeof(PackageItemViewModelTests).Assembly; using (Stream sourceStream = testAssembly.GetManifestResourceStream("NuGet.PackageManagement.UI.Test.Resources.grayicc.png")) using (var memoryStream = new MemoryStream()) { sourceStream.CopyTo(memoryStream); bytes = memoryStream.ToArray(); } string grayiccImagePath = Path.Combine(testDir, "grayicc.png"); File.WriteAllBytes(grayiccImagePath, bytes); var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_WithLocalPathAndColorProfile_LoadsImage", Version = new NuGetVersion("1.0.0"), IconUrl = new Uri(grayiccImagePath, UriKind.Absolute), PackageFileService = _packageFileService, }; // Act BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); // Assert VerifyImageResult(result, packageItemViewModel.BitmapStatus); Assert.Equal(IconBitmapStatus.FetchedIcon, packageItemViewModel.BitmapStatus); } }
public async Task IconUrl_EmbeddedIcon_RelativeParentPath_ReturnsDefault(string separator) { using (var testDir = TestDirectory.Create()) { // Create decoy nuget package var zipPath = Path.Combine(testDir.Path, "file.nupkg"); CreateDummyPackage(zipPath); // prepare test var builder = new UriBuilder(new Uri(zipPath, UriKind.Absolute)) { Fragment = $"..{separator}icon.png" }; var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_EmbeddedIcon_RelativeParentPath_ReturnsDefault", Version = new NuGetVersion("1.0.0"), IconUrl = builder.Uri, PackagePath = zipPath, PackageFileService = _packageFileService, }; // Act BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); // Assert VerifyImageResult(result, packageItemViewModel.BitmapStatus); Assert.Equal(IconBitmapStatus.DefaultIconDueToNullStream, packageItemViewModel.BitmapStatus); } }
/// <summary> /// Reads an Icon from test assembly resource /// </summary> /// <param name="imageFile">Relative path to the resource in test assembly</param> /// <returns>An awitable Task</returns> private async Task ReadIconFromEmbeddedResourceAsync(string imageFile) { // Prepare using (var testDir = TestDirectory.Create()) { byte[] bytes; Assembly testAssembly = typeof(PackageItemViewModelTests).Assembly; using (Stream sourceStream = testAssembly.GetManifestResourceStream($"NuGet.PackageManagement.UI.Test.Resources.{imageFile}")) using (var memoryStream = new MemoryStream()) { sourceStream.CopyTo(memoryStream); bytes = memoryStream.ToArray(); } string imageFilePath = Path.Combine(testDir, imageFile); File.WriteAllBytes(imageFilePath, bytes); var packageItemViewModel = new PackageItemViewModel(_searchService.Object) { Id = "TestPackageId", Version = new NuGetVersion("1.0.0"), IconUrl = new Uri(imageFilePath, UriKind.Absolute), PackageFileService = _packageFileService, }; // Act BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); // Assert VerifyImageResult(result, packageItemViewModel.BitmapStatus); Assert.Equal(IconBitmapStatus.FetchedIcon, packageItemViewModel.BitmapStatus); } }
public PackageItemViewModelTests( GlobalServiceProvider globalServiceProvider, ITestOutputHelper output, LocalPackageSearchMetadataFixture testData) : base(globalServiceProvider) { globalServiceProvider.Reset(); _serviceBroker.Setup( #pragma warning disable ISB001 // Dispose of proxies x => x.GetProxyAsync <INuGetPackageFileService>( It.Is <ServiceJsonRpcDescriptor>(d => d.Moniker == NuGetServices.PackageFileService.Moniker), It.IsAny <ServiceActivationOptions>(), It.IsAny <CancellationToken>())) #pragma warning restore ISB001 // Dispose of proxies .Returns(new ValueTask <INuGetPackageFileService>(new NuGetPackageFileService(_serviceBroker.Object, _telemetryProvider.Object))); _packageFileService = new NuGetPackageFileService(_serviceBroker.Object, _telemetryProvider.Object); _testData = testData; _testInstance = new PackageItemViewModel() { PackagePath = _testData.TestData.PackagePath, PackageFileService = _packageFileService, }; _output = output; }
public async Task IconUrl_WithMalformedUrlScheme_ReturnsDefaultInitallyAndFinally() { var iconUrl = new Uri("httphttphttp://fake.test/image.png"); var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_WithMalformedUrlScheme_ReturnsDefaultInitallyAndFinally", Version = new NuGetVersion("1.0.0"), IconUrl = iconUrl, PackageFileService = _packageFileService, }; var packageIdentity = new PackageIdentity(packageItemViewModel.Id, packageItemViewModel.Version); NuGetPackageFileService.AddIconToCache(packageIdentity, packageItemViewModel.IconUrl); // initial result should be fetching and defaultpackageicon BitmapSource initialResult = packageItemViewModel.IconBitmap; Assert.Same(initialResult, Images.DefaultPackageIcon); BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel, addIconToCache : false); VerifyImageResult(result, packageItemViewModel.BitmapStatus); Assert.Equal(IconBitmapStatus.DefaultIconDueToNullStream, packageItemViewModel.BitmapStatus); }
public async Task SetCurrentPackageAsync_ClearVersions_Always() { // Arrange var installedVersion = NuGetVersion.Parse("1.0.0"); var testVersions = new List <VersionInfoContextInfo>() { new VersionInfoContextInfo(new NuGetVersion("1.0.0")), new VersionInfoContextInfo(new NuGetVersion("1.0.1")), }; var mockPropertyChangedEventHandler = new Mock <IPropertyChangedEventHandler>(); var wasVersionsListCleared = false; var searchService = new Mock <IReconnectingNuGetSearchService>(); searchService.Setup(s => s.GetPackageVersionsAsync(It.IsAny <PackageIdentity>(), It.IsAny <IReadOnlyCollection <PackageSourceContextInfo> >(), It.IsAny <bool>(), It.IsAny <CancellationToken>())) .ReturnsAsync(testVersions); var vm = new PackageItemViewModel(searchService.Object); vm.Id = "a"; vm.Sources = new ReadOnlyCollection <PackageSourceContextInfo>(new List <PackageSourceContextInfo>()); vm.InstalledVersion = installedVersion; vm.Version = installedVersion; // Test Setup already selected a package. int previousVersionListCount = _testInstance.Versions.Count; mockPropertyChangedEventHandler.Setup(x => x.PropertyChanged( It.IsAny <object>(), It.IsAny <PropertyChangedEventArgs>() )) .Callback <object, PropertyChangedEventArgs>((d, p) => { DetailControlModel detail = d as DetailControlModel; if (detail != null && detail.Versions.Count == 0 && p.PropertyName == nameof(DetailControlModel.Versions)) { wasVersionsListCleared = true; } }); _testInstance.PropertyChanged += mockPropertyChangedEventHandler.Object.PropertyChanged; // Act //Select a different VM which should clear the Versions list from the previous selection. await _testInstance.SetCurrentPackageAsync( vm, ItemFilter.All, () => vm); // Assert Assert.True(previousVersionListCount > 0, "Test setup did not pre-populate versions list."); Assert.True(wasVersionsListCleared, "Versions list was not cleared."); }
public async Task SetCurrentPackageAsync_SortsVersions_ByNuGetVersionDesc() { // Arrange NuGetVersion installedVersion = NuGetVersion.Parse("1.0.0"); var testVersions = new List <VersionInfoContextInfo>() { new VersionInfoContextInfo(new NuGetVersion("2.10.1-dev-01248")), new VersionInfoContextInfo(new NuGetVersion("2.10.1-dev-01249")), new VersionInfoContextInfo(new NuGetVersion("2.10.1-dev-01256")), new VersionInfoContextInfo(new NuGetVersion("2.10.1-dev-01265")), new VersionInfoContextInfo(new NuGetVersion("2.10.0-dev-01187")), new VersionInfoContextInfo(new NuGetVersion("2.10.0-dev-01191")), new VersionInfoContextInfo(new NuGetVersion("2.10.0-dev-01211")), new VersionInfoContextInfo(new NuGetVersion("2.10.0")), }; var searchService = new Mock <IReconnectingNuGetSearchService>(); searchService.Setup(ss => ss.GetPackageVersionsAsync(It.IsAny <PackageIdentity>(), It.IsAny <IReadOnlyCollection <PackageSourceContextInfo> >(), It.IsAny <bool>(), It.IsAny <CancellationToken>())) .ReturnsAsync(testVersions); var vm = new PackageItemViewModel(searchService.Object) { Id = "package", InstalledVersion = installedVersion, Version = installedVersion, }; // Act await _testInstance.SetCurrentPackageAsync( vm, ItemFilter.All, () => vm); // Assert var expectedAdditionalInfo = string.Empty; // Remove any added `null` separators, and any Additional Info entries (eg, "Latest Prerelease", "Latest Stable"). List <DisplayVersion> actualVersions = _testInstance.Versions .Where(v => v != null && v.AdditionalInfo == expectedAdditionalInfo).ToList(); var expectedVersions = new List <DisplayVersion>() { new DisplayVersion(version: new NuGetVersion("2.10.1-dev-01265"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.1-dev-01256"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.1-dev-01249"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.1-dev-01248"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.0"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.0-dev-01211"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.0-dev-01191"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.0-dev-01187"), additionalInfo: expectedAdditionalInfo), }; Assert.Equal(expectedVersions, actualVersions); }
public async Task SetCurrentPackageAsync_SortsVersions_ByNuGetVersionDesc() { // Arrange NuGetVersion installedVersion = NuGetVersion.Parse("1.0.0"); var testVersions = new List <VersionInfoContextInfo>() { new VersionInfoContextInfo(new NuGetVersion("2.10.1-dev-01248")), new VersionInfoContextInfo(new NuGetVersion("2.10.1-dev-01249")), new VersionInfoContextInfo(new NuGetVersion("2.10.1-dev-01256")), new VersionInfoContextInfo(new NuGetVersion("2.10.1-dev-01265")), new VersionInfoContextInfo(new NuGetVersion("2.10.0-dev-01187")), new VersionInfoContextInfo(new NuGetVersion("2.10.0-dev-01191")), new VersionInfoContextInfo(new NuGetVersion("2.10.0-dev-01211")), new VersionInfoContextInfo(new NuGetVersion("2.10.0")), }; var vm = new PackageItemViewModel() { InstalledVersion = installedVersion, Version = installedVersion, Versions = new Lazy <Task <IReadOnlyCollection <VersionInfoContextInfo> > >(() => Task.FromResult <IReadOnlyCollection <VersionInfoContextInfo> >(testVersions)), }; // Act await _testInstance.SetCurrentPackageAsync( vm, ItemFilter.All, () => vm); // Assert var expectedAdditionalInfo = string.Empty; // Remove any added `null` separators, and any Additional Info entries (eg, "Latest Prerelease", "Latest Stable"). List <DisplayVersion> actualVersions = _testInstance.Versions .Where(v => v != null && v.AdditionalInfo == expectedAdditionalInfo).ToList(); var expectedVersions = new List <DisplayVersion>() { new DisplayVersion(version: new NuGetVersion("2.10.1-dev-01265"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.1-dev-01256"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.1-dev-01249"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.1-dev-01248"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.0"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.0-dev-01211"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.0-dev-01191"), additionalInfo: expectedAdditionalInfo), new DisplayVersion(version: new NuGetVersion("2.10.0-dev-01187"), additionalInfo: expectedAdditionalInfo), }; Assert.Equal(expectedVersions, actualVersions); }
public LocalDetailControlModelTestBase(GlobalServiceProvider sp, LocalPackageSearchMetadataFixture testData) { sp.Reset(); _testData = testData; var testVersion = new NuGetVersion(0, 0, 1); _testViewModel = new PackageItemViewModel() { PackagePath = _testData.TestData.PackagePath, Version = testVersion, InstalledVersion = testVersion, }; }
public async Task IconUrl_EmbeddedIcon_NotAnIcon_ReturnsDefault( string iconElement, string iconFileLocation, string fileSourceElement, string fileTargetElement) { using (var testDir = TestDirectory.Create()) { // Create decoy nuget package var zipPath = Path.Combine(testDir.Path, "file.nupkg"); CreateDummyPackage( zipPath: zipPath, iconName: iconElement, iconFile: iconFileLocation, iconFileSourceElement: fileSourceElement, iconFileTargetElement: fileTargetElement, isRealImage: false); // prepare test UriBuilder builder = new UriBuilder(new Uri(zipPath, UriKind.Absolute)) { Fragment = iconElement }; var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_FileUri_LoadsImage" + iconElement, Version = new NuGetVersion("1.0.0"), IconUrl = builder.Uri, PackagePath = zipPath, PackageFileService = _packageFileService, }; _output.WriteLine($"ZipPath {zipPath}"); _output.WriteLine($"File Exists {File.Exists(zipPath)}"); _output.WriteLine($"Url {builder.Uri}"); // Act BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); VerifyImageResult(result, packageItemViewModel.BitmapStatus); _output.WriteLine($"result {result}"); string resultFormat = result != null?result.Format.ToString() : ""; _output.WriteLine($"Pixel format: {resultFormat}"); // Assert Assert.Equal(IconBitmapStatus.DefaultIconDueToDecodingError, packageItemViewModel.BitmapStatus); } }
public LocalDetailControlModelTestBase(GlobalServiceProvider sp, LocalPackageSearchMetadataFixture testData) { sp.Reset(); _testData = testData; var testVersion = new NuGetVersion(0, 0, 1); var searchService = new Mock <IReconnectingNuGetSearchService>(); _testViewModel = new PackageItemViewModel(searchService.Object) { Id = "package", PackagePath = _testData.TestData.PackagePath, Version = testVersion, InstalledVersion = testVersion, }; }
public async Task IconUrl_RelativeUri_ReturnsDefault() { // relative URIs are not supported in viewmodel. var iconUrl = new Uri("resources/testpackageicon.png", UriKind.Relative); var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_RelativeUri_ReturnsDefault", Version = new NuGetVersion("1.0.0"), IconUrl = iconUrl, PackageFileService = _packageFileService, }; BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); VerifyImageResult(result, packageItemViewModel.BitmapStatus); Assert.Equal(IconBitmapStatus.DefaultIconDueToRelativeUri, packageItemViewModel.BitmapStatus); }
public async Task IconUrl_EmbeddedIcon_HappyPath_LoadsImage( string iconElement, string iconFileLocation, string fileSourceElement, string fileTargetElement) { using (var testDir = TestDirectory.Create()) { // Create decoy nuget package var zipPath = Path.Combine(testDir.Path, "file.nupkg"); CreateDummyPackage( zipPath: zipPath, iconName: iconElement, iconFile: iconFileLocation, iconFileSourceElement: fileSourceElement, iconFileTargetElement: fileTargetElement, isRealImage: true); // prepare test var builder = new UriBuilder(new Uri(zipPath, UriKind.Absolute)) { Fragment = iconElement }; var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_EmbeddedIcon_HappyPath_LoadsImage", Version = new NuGetVersion("1.0.0"), IconUrl = builder.Uri, PackagePath = zipPath, PackageFileService = _packageFileService, }; _output.WriteLine($"ZipPath {zipPath}"); _output.WriteLine($"File Exists {File.Exists(zipPath)}"); _output.WriteLine($"Url {builder.Uri}"); // Act BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); // Assert _output.WriteLine($"result {result}"); Assert.Equal(IconBitmapStatus.FetchedIcon, packageItemViewModel.BitmapStatus); VerifyImageResult(result, packageItemViewModel.BitmapStatus); } }
public async Task IconUrl_WithValidImageUrl_FailsDownloadsImage_ReturnsDefault() { var iconUrl = new Uri("http://fake.test/image.png"); var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_WithValidImageUrl_FailsDownloadsImage_ReturnsDefault", Version = new NuGetVersion("1.0.0"), IconUrl = iconUrl, PackageFileService = _packageFileService, }; BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); VerifyImageResult(result, packageItemViewModel.BitmapStatus); Assert.Equal(IconBitmapStatus.DefaultIconDueToNullStream, packageItemViewModel.BitmapStatus); }
public async Task IconUrl_WhenFileNotFound_ReturnsDefault() { var iconUrl = new Uri(@"C:\path\to\image.png"); var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_WhenFileNotFound_ReturnsDefault", Version = new NuGetVersion("1.0.0"), IconUrl = iconUrl, PackageFileService = _packageFileService, }; BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); VerifyImageResult(result, packageItemViewModel.BitmapStatus); Assert.Equal(IconBitmapStatus.DefaultIconDueToNullStream, packageItemViewModel.BitmapStatus); }
/// <summary> /// Tests the final bitmap returned by the view model, by waiting for the BitmapStatus to be "complete". /// </summary> private static async Task <BitmapSource> GetFinalIconBitmapAsync(PackageItemViewModel packageItemViewModel, bool addIconToCache = true) { if (addIconToCache) { var packageIdentity = new PackageIdentity(packageItemViewModel.Id, packageItemViewModel.Version); NuGetPackageFileService.AddIconToCache(packageIdentity, packageItemViewModel.IconUrl); } BitmapSource result = packageItemViewModel.IconBitmap; int millisecondsToWait = 3000; while (!IconBitmapStatusUtility.GetIsCompleted(packageItemViewModel.BitmapStatus) && millisecondsToWait >= 0) { await Task.Delay(250); millisecondsToWait -= 250; } result = packageItemViewModel.IconBitmap; return(result); }
public async Task IconUrl_FileUri_LoadsImage() { // Prepare using (var testDir = TestDirectory.Create()) { var imagePath = Path.Combine(testDir, "image.png"); CreateNoisePngImage(path: imagePath); var packageItemViewModel = new PackageItemViewModel() { Id = "PackageId.IconUrl_FileUri_LoadsImage", Version = new NuGetVersion("1.0.0"), IconUrl = new Uri(imagePath, UriKind.Absolute), PackageFileService = _packageFileService, }; // Act BitmapSource result = await GetFinalIconBitmapAsync(packageItemViewModel); // Assert VerifyImageResult(result, packageItemViewModel.BitmapStatus); Assert.Equal(IconBitmapStatus.FetchedIcon, packageItemViewModel.BitmapStatus); } }
public PackageItemLeafViewModel(CustomNodeDefinition def, PackageItemViewModel parent) : base(def, parent) { }