Skip to content

Commit 434a643

Browse files
Copilotjoelverhagen
andcommitted
Address PR feedback: use case-insensitive Id sorting and simplify framework comparer
Co-authored-by: joelverhagen <[email protected]>
1 parent 934baa8 commit 434a643

2 files changed

Lines changed: 41 additions & 11 deletions

File tree

src/NuGetGallery/ViewModels/DependencySetsViewModel.cs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,21 +44,12 @@ public DependencySetsViewModel(IEnumerable<PackageDependency> packageDependencie
4444
friendlyName = framework.ToFriendlyName();
4545
}
4646

47-
var dependencies = dependencySet.OrderBy(x => x.Id).Select(d => d.Id == null ? null : new DependencyViewModel(d.Id, d.VersionSpec));
47+
var dependencies = dependencySet.OrderBy(x => x.Id, StringComparer.OrdinalIgnoreCase).Select(d => d.Id == null ? null : new DependencyViewModel(d.Id, d.VersionSpec));
4848
frameworkGroups.Add((tfmString, framework, friendlyName, dependencies));
4949
}
5050

5151
// Sort by framework using NuGetFrameworkSorter, with null frameworks (All Frameworks) first
52-
var sortedGroups = frameworkGroups.OrderBy(g => g.framework,
53-
Comparer<NuGetFramework>.Create((a, b) =>
54-
{
55-
// Put "All Frameworks" (null) first
56-
if (a == null && b == null) return 0;
57-
if (a == null) return -1;
58-
if (b == null) return 1;
59-
// Use NuGetFrameworkSorter for actual frameworks
60-
return NuGetFrameworkSorter.Instance.Compare(a, b);
61-
}));
52+
var sortedGroups = frameworkGroups.OrderBy(g => g.framework, new NullableFrameworkComparer());
6253

6354
// Build the final dictionary with friendly names
6455
foreach (var group in sortedGroups)
@@ -101,5 +92,18 @@ public DependencyViewModel(string id, string versionSpec)
10192
public string VersionSpec { get; private set; }
10293
public string PackageUrl { get; private set; }
10394
}
95+
96+
private class NullableFrameworkComparer : IComparer<NuGetFramework>
97+
{
98+
public int Compare(NuGetFramework x, NuGetFramework y)
99+
{
100+
// Put "All Frameworks" (null) first
101+
if (x == null && y == null) return 0;
102+
if (x == null) return -1;
103+
if (y == null) return 1;
104+
// Use NuGetFrameworkSorter for actual frameworks
105+
return NuGetFrameworkSorter.Instance.Compare(x, y);
106+
}
107+
}
104108
}
105109
}

tests/NuGetGallery.Facts/ViewModels/DependencySetsViewModelFacts.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,32 @@ public void GivenAListOfDependenciesPackageIdsWillBeOrdered()
9292
Assert.Equal("def", dependencyViewModels[3].Id);
9393
}
9494

95+
[Fact]
96+
public void GivenAListOfDependenciesPackageIdsWillBeOrderedCaseInsensitively()
97+
{
98+
// Arrange
99+
var dependencies = new[] {
100+
new PackageDependency { TargetFramework = null, Id = "Zebra" },
101+
new PackageDependency { TargetFramework = null, Id = "apple" },
102+
new PackageDependency { TargetFramework = null, Id = "Banana" },
103+
new PackageDependency { TargetFramework = null, Id = "cherry" }
104+
};
105+
106+
// Act
107+
var viewModel = new DependencySetsViewModel(dependencies);
108+
109+
// Assert
110+
Assert.Single(viewModel.DependencySets);
111+
Assert.Equal(4, viewModel.DependencySets.First().Value.Count());
112+
113+
var dependencyViewModels = viewModel.DependencySets.First().Value.ToList();
114+
115+
Assert.Equal("apple", dependencyViewModels[0].Id);
116+
Assert.Equal("Banana", dependencyViewModels[1].Id);
117+
Assert.Equal("cherry", dependencyViewModels[2].Id);
118+
Assert.Equal("Zebra", dependencyViewModels[3].Id);
119+
}
120+
95121
[Fact]
96122
public void GivenAListOfDependenciesNet10WillBeOrderedAfterNet9()
97123
{

0 commit comments

Comments
 (0)