public void GivenARangeVerifyNU1608Warning(string yVersion, string yDepRange, string reason)
        {
            var testLogger = new TestLogger();
            var range      = VersionRange.Parse("1.0.0");
            var tfi        = GetTFI(NuGetFramework.Parse("net46"), new LibraryRange("x", range, LibraryDependencyTarget.Package));
            var project    = new PackageSpec(tfi)
            {
                Name = "proj"
            };

            var depY = new LibraryDependency()
            {
                LibraryRange = new LibraryRange("y", VersionRange.Parse(yDepRange), LibraryDependencyTarget.Package)
            };
            var itemX = GetItem("x", "1.0.0", LibraryType.Package, depY);
            var itemY = GetItem("y", yVersion, LibraryType.Package);

            var flattened = new HashSet <GraphItem <RemoteResolveResult> >()
            {
                itemX, itemY
            };
            var indexedGraphs = GetIndexedGraphs(flattened);

            var messages = UnexpectedDependencyMessages.GetDependenciesAboveUpperBounds(indexedGraphs, testLogger).ToList();
            var message  = messages.FirstOrDefault();

            messages.Count.Should().Be(1);
            message.LibraryId.Should().Be("y");
            message.TargetGraphs.Single().Should().Be("net46");
            message.Code.Should().Be(NuGetLogCode.NU1608, reason);
            message.Level.Should().Be(LogLevel.Warning);
        }
        public void GivenAPackageVersionAboveADependencyConstraintVerifyWarning()
        {
            var testLogger = new TestLogger();
            var range      = VersionRange.Parse("1.0.0");
            var tfi        = GetTFI(NuGetFramework.Parse("net46"), new LibraryRange("x", range, LibraryDependencyTarget.Package));
            var project    = new PackageSpec(tfi)
            {
                Name = "proj"
            };

            var depY = new LibraryDependency()
            {
                LibraryRange = new LibraryRange("y", VersionRange.Parse("[1.0.0]"), LibraryDependencyTarget.Package)
            };
            var itemX = GetItem("x", "1.0.0", LibraryType.Package, depY);
            var itemY = GetItem("y", "2.0.0", LibraryType.Package);

            var flattened = new HashSet <GraphItem <RemoteResolveResult> >()
            {
                itemX, itemY
            };
            var indexedGraphs = GetIndexedGraphs(flattened);

            var messages = UnexpectedDependencyMessages.GetDependenciesAboveUpperBounds(indexedGraphs, testLogger).ToList();
            var message  = messages.FirstOrDefault();

            messages.Count.Should().Be(1);
            message.LibraryId.Should().Be("y");
            message.TargetGraphs.Single().Should().Be("net46");
            message.Message.Should().Be("Detected package version outside of dependency constraint: x 1.0.0 requires y (= 1.0.0) but version y 2.0.0 was resolved.");
            message.Code.Should().Be(NuGetLogCode.NU1608);
            message.Level.Should().Be(LogLevel.Warning);
        }
        public void GivenAPackageVersionAboveMultipleDependencyConstraintsVerifyWarnings()
        {
            var testLogger = new TestLogger();
            var range      = VersionRange.Parse("1.0.0");
            var tfi        = GetTFI(NuGetFramework.Parse("net46"), new LibraryRange("x", range, LibraryDependencyTarget.Package));
            var project    = new PackageSpec(tfi)
            {
                Name = "proj"
            };

            var depYX = new LibraryDependency()
            {
                LibraryRange = new LibraryRange("y", VersionRange.Parse("[1.0.0]"), LibraryDependencyTarget.Package)
            };
            var depYZ = new LibraryDependency()
            {
                LibraryRange = new LibraryRange("y", VersionRange.Parse("[2.0.0]"), LibraryDependencyTarget.Package)
            };
            var itemX = GetItem("x", "1.0.0", LibraryType.Package, depYX);
            var itemY = GetItem("y", "3.0.0", LibraryType.Package);
            var itemZ = GetItem("z", "1.0.0", LibraryType.Package, depYZ);

            var flattened = new HashSet <GraphItem <RemoteResolveResult> >()
            {
                itemX, itemY, itemZ
            };
            var indexedGraphs = GetIndexedGraphs(flattened);

            var messages = UnexpectedDependencyMessages.GetDependenciesAboveUpperBounds(indexedGraphs, testLogger).ToList();

            messages.Count.Should().Be(2);
            messages.Select(e => e.Code).Distinct().Single().Should().Be(NuGetLogCode.NU1608);
        }
        public void GivenAProjectVersionAboveADependencyConstraintVerifyNoWarning()
        {
            var testLogger = new TestLogger();
            var range      = VersionRange.Parse("1.0.0");
            var tfi        = GetTFI(NuGetFramework.Parse("net46"), new LibraryRange("x", range, LibraryDependencyTarget.Package));
            var project    = new PackageSpec(tfi)
            {
                Name = "proj"
            };

            var depY = new LibraryDependency()
            {
                LibraryRange = new LibraryRange("y", VersionRange.Parse("[1.0.0]"), LibraryDependencyTarget.Package)
            };
            var itemX = GetItem("x", "1.0.0", LibraryType.Package, depY);
            var itemY = GetItem("y", "2.0.0", LibraryType.Project);

            var flattened = new HashSet <GraphItem <RemoteResolveResult> >()
            {
                itemX, itemY
            };
            var indexedGraphs = GetIndexedGraphs(flattened);

            var messages = UnexpectedDependencyMessages.GetDependenciesAboveUpperBounds(indexedGraphs, testLogger).ToList();

            messages.Should().BeEmpty("project versions are not considered");
        }