Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net48</TargetFramework>

<IsPackable>false</IsPackable>

<Configurations>Debug;Release;ReleaseOfficial</Configurations>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="10.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="FluentAssertions" Version="6.11.0" />
<PackageReference Include="FluentAssertions.Analyzers" Version="0.34.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="TeamCity.VSTest.TestAdapter" Version="1.0.41" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ChocolateyGui.Common\ChocolateyGui.Common.csproj" />
</ItemGroup>

</Project>
18 changes: 18 additions & 0 deletions Source/ChocolateyGui.Common.Tests/UnitTest1.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace ChocolateyGui.Common.Tests
{
using NUnit.Framework;

public class Tests
{
[SetUp]
public void Setup()
{
}

[Test]
public void Test1()
{
Assert.Pass();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net48</TargetFramework>

<IsPackable>false</IsPackable>

<Configurations>Debug;Release;ReleaseOfficial</Configurations>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="coverlet.msbuild" Version="10.0.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="FluentAssertions" Version="6.11.0" />
<PackageReference Include="FluentAssertions.Analyzers" Version="0.34.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Moq" Version="4.20.72" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="6.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.5.0" />
<PackageReference Include="TeamCity.VSTest.TestAdapter" Version="1.0.41" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\ChocolateyGui.Common.Windows\ChocolateyGui.Common.Windows.csproj" />
</ItemGroup>

</Project>
20 changes: 20 additions & 0 deletions Source/ChocolateyGui.Common.Windows.Tests/ChocolateyTestSetup.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
using AutoMapper;
using ChocolateyGui.Common.Windows.Startup;
using NUnit.Framework;

namespace ChocolateyGui.Common.Windows.Tests
{
[SetUpFixture]
public class ChocolateyTestSetup
{
public static IMapper Mapper { get; private set; }

[OneTimeSetUp]
public void SetupAutomapper()
{
var mapperConfiguration = ChocolateyGuiMapper.CreateConfiguration();

Mapper = mapperConfiguration.CreateMapper();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
using System.Collections;
using ChocolateyGui.Common.Windows.Utilities;
using FluentAssertions;
using NUnit.Framework;

namespace ChocolateyGui.Common.Windows.Tests.Utilities
{
[TestFixture]
[TestOf(typeof(GalleryUriBuilder))]
public class GalleryUriBuilderTests
{
public static IEnumerable EmptyValues => new[]
{
null,
string.Empty,
" "
};

[TestCaseSource(nameof(EmptyValues))]
public void BuildFromPackageAndSource_ReturnsNull_ForNullOrWhitespacePackageId(string packageId)
{
GalleryUriBuilder.BuildFromPackageAndSource(packageId, "https://community.chocolatey.org/").Should().BeNull();
}

[TestCaseSource(nameof(EmptyValues))]
public void BuildFromPackageAndSource_ReturnsNull_ForNullOrWhitespaceSource(string source)
{
GalleryUriBuilder.BuildFromPackageAndSource("some-package", source).Should().BeNull();
}

[Test]
public void BuildFromPackageAndSource_ReturnsValidUri_ForValidPackageIdAndSource()
{
var uri = GalleryUriBuilder.BuildFromPackageAndSource("some-package", "https://community.chocolatey.org/");
uri.Should().NotBeNull();
uri.ToString().Should().Be("https://community.chocolatey.org/packages/some-package");
}

[Test]
public void BuildFromPackageAndSource_ReturnsValidUri_WithUnknownSource()
{
var uri = GalleryUriBuilder.BuildFromPackageAndSource("some-package", "https://myget.org/F/chocolatey/api/v2/");
uri.Should().NotBeNull();
uri.ToString().Should().Be("https://myget.org/packages/some-package");
}

[Test]
public void BuildFromPackageAndSource_ReturnsValidUri_WithVersion()
{
var uri = GalleryUriBuilder.BuildFromPackageAndSource("some-package", "https://community.chocolatey.org/", new NuGet.Versioning.NuGetVersion(1, 2, 3));
uri.Should().NotBeNull();
uri.ToString().Should().Be("https://community.chocolatey.org/packages/some-package/1.2.3");
}

[Test]
public void BuildFromPackageSource_ReturnsValidUri_WithPreReleaseVersion()
{
var uri = GalleryUriBuilder.BuildFromPackageAndSource("some-package", "https://community.chocolatey.org/", new NuGet.Versioning.NuGetVersion(1, 2, 3, "beta"));
uri.Should().NotBeNull();
uri.ToString().Should().Be("https://community.chocolatey.org/packages/some-package/1.2.3-beta");
}

[Test]
public void IsKnownSource_ReturnsFalse_ForInvalidUri()
{
GalleryUriBuilder.IsKnownSource("not a valid uri").Should().BeFalse();
}

[TestCaseSource(nameof(EmptyValues))]
public void IsKnownSource_ReturnsFalse_ForNullOrWhitespace(string source)
{
GalleryUriBuilder.IsKnownSource(source).Should().BeFalse();
}

[TestCase("https://blog.chocolatey.org/api/v2/")]
[TestCase("http://myget.org/F/chocolatey/api/v2/")]
public void IsKnownSource_ReturnsFalse_ForUnknownSources(string source)
{
GalleryUriBuilder.IsKnownSource(source).Should().BeFalse();
}

[TestCase("https://chocolatey.org/api/v2/")]
[TestCase("https://community.chocolatey.org/api/v2/")]
[TestCase("https://community-test.chocolatey.org/api/v2/")]
public void IsKnownSource_ReturnsTrue_ForKnownSources(string source)
{
GalleryUriBuilder.IsKnownSource(source).Should().BeTrue();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
using ChocolateyGui.Common.Properties;
using ChocolateyGui.Common.Services;
using ChocolateyGui.Common.Utilities;
using ChocolateyGui.Common.Windows.Utilities;
using Microsoft.VisualStudio.Threading;
using NuGet.Protocol.Core.Types;
using NuGet.Versioning;
Expand Down Expand Up @@ -716,6 +717,13 @@ private static Package GetMappedPackage(GetChocolatey choco, PackageResult packa
mappedPackage.IsInstalled = !string.IsNullOrWhiteSpace(package.InstallLocation) || forceInstalled;

mappedPackage.IsPrerelease = mappedPackage.Version.IsPrerelease;

var sourceUrl = packageInfo.SourceInstalledFrom ?? package.Source;

if (string.IsNullOrWhiteSpace(mappedPackage.GalleryDetailsUrl) && GalleryUriBuilder.IsKnownSource(sourceUrl))
{
mappedPackage.GalleryDetailsUrl = GalleryUriBuilder.BuildFromPackageAndSource(package.Identity.Id, sourceUrl, package.Identity.Version)?.ToString();
}
}

return mappedPackage;
Expand Down
72 changes: 72 additions & 0 deletions Source/ChocolateyGui.Common.Windows/Startup/ChocolateyGuiMapper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
using AutoMapper;
using chocolatey.infrastructure.app.configuration;
using chocolatey.infrastructure.app.nuget;
using ChocolateyGui.Common.Models;
using ChocolateyGui.Common.ViewModels.Items;
using ChocolateyGui.Common.Windows.ViewModels;
using NuGet.Protocol.Core.Types;
using ChocolateySource = chocolatey.infrastructure.app.configuration.ChocolateySource;
using Environment = System.Environment;

namespace ChocolateyGui.Common.Windows.Startup
{
public static class ChocolateyGuiMapper
{
public static MapperConfiguration CreateConfiguration()
{
var mapperConfiguration = new MapperConfiguration(config =>
{
config.ForAllMaps((_, mapping) => mapping.MaxDepth(64));

config.CreateMap<IPackageViewModel, IPackageViewModel>()
.ForMember(vm => vm.IsInstalled, options => options.Ignore());

config.CreateMap<IPackageSearchMetadata, Package>()
.ForMember(dest => dest.Version, opt => opt.MapFrom(src => src.Identity.Version))
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Identity.Id))
.ForMember(dest => dest.Authors, opt => opt.MapFrom(src => src.Authors.Split(',')))
.ForMember(dest => dest.Owners, opt => opt.MapFrom(src => src.Owners.Split(',')))
.ForMember(dest => dest.GalleryDetailsUrl, opt => opt.MapFrom(src => src.PackageDetailsUrl == null ? null : src.PackageDetailsUrl.AbsoluteUri));
Comment thread
vexx32 marked this conversation as resolved.

config.CreateMap<ConfigFileFeatureSetting, ChocolateyFeature>();
config.CreateMap<ConfigFileConfigSetting, ChocolateySetting>();
config.CreateMap<ConfigFileSourceSetting, Common.Models.ChocolateySource>()
.ForMember(dest => dest.Password, opt => opt.MapFrom(src => NugetEncryptionUtility.DecryptString(src.Password)))
.ForMember(dest => dest.CertificatePassword, opt => opt.MapFrom(src => NugetEncryptionUtility.DecryptString(src.CertificatePassword)));

config.CreateMap<ChocolateySource, Common.Models.ChocolateySource>()
.ForMember(dest => dest.VisibleToAdminsOnly, opt => opt.MapFrom(src => src.VisibleToAdminOnly));

config.CreateMap<AdvancedInstallViewModel, AdvancedInstall>()
.ForMember(
dest => dest.DownloadChecksum,
opt => opt.Condition(source => !source.IgnoreChecksums))
.ForMember(
dest => dest.DownloadChecksumType,
opt => opt.Condition(source =>
!source.IgnoreChecksums && !string.IsNullOrEmpty(source.DownloadChecksum)))
.ForMember(
dest => dest.DownloadChecksum64bit,
opt => opt.Condition(source =>
Environment.Is64BitOperatingSystem
&& !source.IgnoreChecksums
&& !source.Forcex86))
.ForMember(
dest => dest.DownloadChecksumType64bit,
opt => opt.Condition(source =>
Environment.Is64BitOperatingSystem
&& !source.IgnoreChecksums
&& !source.Forcex86
&& !string.IsNullOrEmpty(source.DownloadChecksum64bit)))
.ForMember(
dest => dest.PackageParameters,
opt => opt.Condition(source => !source.SkipPowerShell))
.ForMember(
dest => dest.InstallArguments,
opt => opt.Condition(source => !source.SkipPowerShell && !source.NotSilent));
});

return mapperConfiguration;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,10 @@
using Caliburn.Micro;
using chocolatey;
using chocolatey.infrastructure.adapters;
using chocolatey.infrastructure.app.configuration;
using chocolatey.infrastructure.app.nuget;
using chocolatey.infrastructure.app.services;
using chocolatey.infrastructure.cryptography;
using chocolatey.infrastructure.filesystem;
using chocolatey.infrastructure.services;
using ChocolateyGui.Common.Models;
using ChocolateyGui.Common.Properties;
using ChocolateyGui.Common.Providers;
using ChocolateyGui.Common.Services;
Expand All @@ -29,9 +26,6 @@
using ChocolateyGui.Common.Windows.ViewModels;
using ChocolateyGui.Common.Windows.Views;
using LiteDB;
using NuGet.Protocol.Core.Types;
using ChocolateySource = chocolatey.infrastructure.app.configuration.ChocolateySource;
using Environment = System.Environment;
using PackageViewModel = ChocolateyGui.Common.Windows.ViewModels.Items.PackageViewModel;

namespace ChocolateyGui.Common.Windows.Startup
Expand Down Expand Up @@ -89,56 +83,7 @@ protected override void Load(ContainerBuilder builder)
builder.RegisterType<AllowedCommandsService>().As<IAllowedCommandsService>().SingleInstance();

// Register Mapper
var mapperConfiguration = new MapperConfiguration(config =>
{
config.ForAllMaps((_, mapping) => mapping.MaxDepth(64));

config.CreateMap<IPackageViewModel, IPackageViewModel>()
.ForMember(vm => vm.IsInstalled, options => options.Ignore());

config.CreateMap<IPackageSearchMetadata, Package>()
.ForMember(dest => dest.Version, opt => opt.MapFrom(src => src.Identity.Version))
.ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Identity.Id))
.ForMember(dest => dest.Authors, opt => opt.MapFrom(src => src.Authors.Split(',')))
.ForMember(dest => dest.Owners, opt => opt.MapFrom(src => src.Owners.Split(',')));

config.CreateMap<ConfigFileFeatureSetting, ChocolateyFeature>();
config.CreateMap<ConfigFileConfigSetting, ChocolateySetting>();
config.CreateMap<ConfigFileSourceSetting, Common.Models.ChocolateySource>()
.ForMember(dest => dest.Password, opt => opt.MapFrom(src => NugetEncryptionUtility.DecryptString(src.Password)))
.ForMember(dest => dest.CertificatePassword, opt => opt.MapFrom(src => NugetEncryptionUtility.DecryptString(src.CertificatePassword)));

config.CreateMap<ChocolateySource, Common.Models.ChocolateySource>()
.ForMember(dest => dest.VisibleToAdminsOnly, opt => opt.MapFrom(src => src.VisibleToAdminOnly));

config.CreateMap<AdvancedInstallViewModel, AdvancedInstall>()
.ForMember(
dest => dest.DownloadChecksum,
opt => opt.Condition(source => !source.IgnoreChecksums))
.ForMember(
dest => dest.DownloadChecksumType,
opt => opt.Condition(source =>
!source.IgnoreChecksums && !string.IsNullOrEmpty(source.DownloadChecksum)))
.ForMember(
dest => dest.DownloadChecksum64bit,
opt => opt.Condition(source =>
Environment.Is64BitOperatingSystem
&& !source.IgnoreChecksums
&& !source.Forcex86))
.ForMember(
dest => dest.DownloadChecksumType64bit,
opt => opt.Condition(source =>
Environment.Is64BitOperatingSystem
&& !source.IgnoreChecksums
&& !source.Forcex86
&& !string.IsNullOrEmpty(source.DownloadChecksum64bit)))
.ForMember(
dest => dest.PackageParameters,
opt => opt.Condition(source => !source.SkipPowerShell))
.ForMember(
dest => dest.InstallArguments,
opt => opt.Condition(source => !source.SkipPowerShell && !source.NotSilent));
});
var mapperConfiguration = ChocolateyGuiMapper.CreateConfiguration();

builder.RegisterType<BundledThemeService>().As<IBundledThemeService>().SingleInstance();
builder.RegisterInstance(mapperConfiguration.CreateMapper()).As<IMapper>();
Expand Down
Loading
Loading