From ed67ef8efd5e2a6d422df613cae776d2902efe42 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Fri, 5 Jul 2024 10:47:58 +0800 Subject: [PATCH 1/3] Order endpoints in resource details --- .../Components/Pages/Resources.razor.cs | 11 ----------- .../Model/ResourceEndpointHelpers.cs | 8 +++++++- .../Model/ResourceEndpointHelpersTests.cs | 17 +++++++++++++++++ 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/Aspire.Dashboard/Components/Pages/Resources.razor.cs b/src/Aspire.Dashboard/Components/Pages/Resources.razor.cs index 1fb53c32d9e..de87ce666cb 100644 --- a/src/Aspire.Dashboard/Components/Pages/Resources.razor.cs +++ b/src/Aspire.Dashboard/Components/Pages/Resources.razor.cs @@ -363,17 +363,6 @@ private List GetDisplayedEndpoints(ResourceViewModel resource additionalMessage = null; - // Make sure that endpoints have a consistent ordering. Show https first, then everything else. - return [.. GetEndpoints(resource) - .OrderByDescending(e => e.Url?.StartsWith("https") == true) - .ThenBy(e=> e.Url ?? e.Text)]; - } - - /// - /// A resource has services and endpoints. These can overlap. This method attempts to return a single list without duplicates. - /// - private static List GetEndpoints(ResourceViewModel resource) - { return ResourceEndpointHelpers.GetEndpoints(resource, includeInteralUrls: false); } diff --git a/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs b/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs index 1055ec87ed0..71cfe443d7c 100644 --- a/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs +++ b/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs @@ -29,7 +29,13 @@ public static List GetEndpoints(ResourceViewModel resource, b } } - return endpoints; + // Make sure that endpoints have a consistent ordering. Show https first, then everything else. + var orderedEndpoints = endpoints + .OrderByDescending(e => e.Url?.StartsWith("https") == true) + .ThenBy(e => e.Name) + .ToList(); + + return orderedEndpoints; } } diff --git a/tests/Aspire.Dashboard.Tests/Model/ResourceEndpointHelpersTests.cs b/tests/Aspire.Dashboard.Tests/Model/ResourceEndpointHelpersTests.cs index 52192114d9e..fe2cda7d800 100644 --- a/tests/Aspire.Dashboard.Tests/Model/ResourceEndpointHelpersTests.cs +++ b/tests/Aspire.Dashboard.Tests/Model/ResourceEndpointHelpersTests.cs @@ -168,6 +168,23 @@ public void GetEndpoints_IncludesIncludeInternalUrls() }); } + [Fact] + public void GetEndpoints_OrderByName() + { + var endpoints = GetEndpoints(CreateResource([ + new("a", new("http://localhost:8080"), isInternal: false), + new("C", new("http://localhost:8080"), isInternal: false), + new("B", new("http://localhost:8080"), isInternal: false), + new("Z", new("https://localhost:8080"), isInternal: false) + ])); + + Assert.Collection(endpoints, + e => Assert.Equal("Z", e.Name), + e => Assert.Equal("a", e.Name), + e => Assert.Equal("B", e.Name), + e => Assert.Equal("C", e.Name)); + } + private static ResourceViewModel CreateResource(ImmutableArray urls) { return new ResourceViewModel From 3e83061093cc6b9a9d4bcd38814241baa00052d2 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Fri, 5 Jul 2024 10:51:13 +0800 Subject: [PATCH 2/3] Update --- src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs b/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs index 71cfe443d7c..9f245d1d513 100644 --- a/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs +++ b/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs @@ -32,7 +32,7 @@ public static List GetEndpoints(ResourceViewModel resource, b // Make sure that endpoints have a consistent ordering. Show https first, then everything else. var orderedEndpoints = endpoints .OrderByDescending(e => e.Url?.StartsWith("https") == true) - .ThenBy(e => e.Name) + .ThenBy(e => e.Name, StringComparers.EndpointAnnotationName) .ToList(); return orderedEndpoints; From fb5de07c2eade450c96d410ea70935ba137d8787 Mon Sep 17 00:00:00 2001 From: James Newton-King Date: Fri, 5 Jul 2024 12:12:05 +0800 Subject: [PATCH 3/3] Update --- src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs | 7 ++++++- .../Model/ResourceEndpointHelpersTests.cs | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs b/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs index 9f245d1d513..f56934c599b 100644 --- a/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs +++ b/src/Aspire.Dashboard/Model/ResourceEndpointHelpers.cs @@ -29,9 +29,14 @@ public static List GetEndpoints(ResourceViewModel resource, b } } - // Make sure that endpoints have a consistent ordering. Show https first, then everything else. + // Make sure that endpoints have a consistent ordering. + // Order: + // - https + // - other urls + // - endpoint name var orderedEndpoints = endpoints .OrderByDescending(e => e.Url?.StartsWith("https") == true) + .ThenByDescending(e => e.Url != null) .ThenBy(e => e.Name, StringComparers.EndpointAnnotationName) .ToList(); diff --git a/tests/Aspire.Dashboard.Tests/Model/ResourceEndpointHelpersTests.cs b/tests/Aspire.Dashboard.Tests/Model/ResourceEndpointHelpersTests.cs index fe2cda7d800..977c00a6b49 100644 --- a/tests/Aspire.Dashboard.Tests/Model/ResourceEndpointHelpersTests.cs +++ b/tests/Aspire.Dashboard.Tests/Model/ResourceEndpointHelpersTests.cs @@ -174,15 +174,17 @@ public void GetEndpoints_OrderByName() var endpoints = GetEndpoints(CreateResource([ new("a", new("http://localhost:8080"), isInternal: false), new("C", new("http://localhost:8080"), isInternal: false), - new("B", new("http://localhost:8080"), isInternal: false), + new("D", new("tcp://localhost:8080"), isInternal: false), + new("B", new("tcp://localhost:8080"), isInternal: false), new("Z", new("https://localhost:8080"), isInternal: false) ])); Assert.Collection(endpoints, e => Assert.Equal("Z", e.Name), e => Assert.Equal("a", e.Name), + e => Assert.Equal("C", e.Name), e => Assert.Equal("B", e.Name), - e => Assert.Equal("C", e.Name)); + e => Assert.Equal("D", e.Name)); } private static ResourceViewModel CreateResource(ImmutableArray urls)