File: GivenARemoveDuplicatePackageReferences.cs
Web Access
Project: ..\..\..\src\Tasks\Microsoft.NET.Build.Tasks.UnitTests\Microsoft.NET.Build.Tasks.UnitTests.csproj (Microsoft.NET.Build.Tasks.UnitTests)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using FluentAssertions;
using Microsoft.Build.Framework;
using NuGet.Packaging.Core;
using NuGet.Versioning;
using Xunit;
 
namespace Microsoft.NET.Build.Tasks.UnitTests
{
    public class GivenARemoveDuplicatePackageReferenceTask
    {
        private static ITaskItem[] GetPackageRefItems(List<PackageIdentity> packages)
            => packages.Select(kvp => new MockTaskItem(
                itemSpec: kvp.Id,
                metadata: new Dictionary<string, string> { { "Version", kvp.Version.ToString() } })).ToArray();
 
        [Fact]
        public void RemoveDuplicatePackageReference()
        {
            var knownpackage = new List<PackageIdentity>();
 
            knownpackage.Add(new PackageIdentity("Microsoft.NETCore.Targets", NuGetVersion.Parse("1.2.0-beta-24821-02")));
            knownpackage.Add(new PackageIdentity("System.Private.Uri", NuGetVersion.Parse("4.4.0-beta-24821-02")));
            knownpackage.Add(new PackageIdentity("Microsoft.NETCore.CoreDisTools", NuGetVersion.Parse("1.0.1-prerelease-00001")));
            knownpackage.Add(new PackageIdentity("Microsoft.NETCore.Platforms", NuGetVersion.Parse("1.2.0-beta-24821-02")));
 
            //duplicates
            knownpackage.Add(new PackageIdentity("Microsoft.NETCore.Targets", NuGetVersion.Parse("1.2.0-beta-24821-02")));
            knownpackage.Add(new PackageIdentity("Microsoft.NETCore.CoreDisTools", NuGetVersion.Parse("1.0.1-prerelease-00001")));
 
            var packagelistWithoutDups = new HashSet<PackageIdentity>(knownpackage);
 
            Assert.True(knownpackage.Count() > packagelistWithoutDups.Count());
 
            // execute task
            var task = new RemoveDuplicatePackageReferences()
            {
                InputPackageReferences = GetPackageRefItems(knownpackage)
 
            };
            task.Execute().Should().BeTrue();
 
            task.UniquePackageReferences.Count().Should().Be(packagelistWithoutDups.Count());
 
            var uniquePackages = new List<PackageIdentity>();
            foreach (var item in task.UniquePackageReferences)
            {
                var pkgName = item.ItemSpec;
                var pkgVersion = NuGetVersion.Parse(item.GetMetadata("Version"));
                uniquePackages.Add(new PackageIdentity(pkgName, pkgVersion));
            }
 
            foreach (var pkg in uniquePackages)
            {
                packagelistWithoutDups.Should().Contain(elem => elem.Equals(pkg), "package {0}, version {1} was not expected to be stored", pkg.Id, pkg.Version);
            }
        }
 
    }
}