diff --git a/TASVideos/TagHelpers/WikiLinkTagHelpers.cs b/TASVideos/TagHelpers/WikiLinkTagHelpers.cs
index 59475486e..6973d1ec4 100644
--- a/TASVideos/TagHelpers/WikiLinkTagHelpers.cs
+++ b/TASVideos/TagHelpers/WikiLinkTagHelpers.cs
@@ -5,36 +5,42 @@
namespace TASVideos.TagHelpers;
-public class PubLinkTagHelper : TagHelper
+public class PubLinkTagHelper(IHtmlGenerator generator) : AnchorTagHelper(generator)
{
public int Id { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
- output.Attributes.Add("href", $"/{Id}M");
+ Page = "/Publications/View";
+ RouteValues.Add(nameof(Pages.Publications.ViewModel.Id), Id.ToString());
+ base.Process(context, output);
}
}
-public class SubLinkTagHelper : TagHelper
+public class SubLinkTagHelper(IHtmlGenerator generator) : AnchorTagHelper(generator)
{
public int Id { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
- output.Attributes.Add("href", $"/{Id}S");
+ Page = "/Submissions/View";
+ RouteValues.Add(nameof(Pages.Submissions.ViewModel.Id), Id.ToString());
+ base.Process(context, output);
}
}
-public class GameLinkTagHelper : TagHelper
+public class GameLinkTagHelper(IHtmlGenerator generator) : AnchorTagHelper(generator)
{
public int Id { get; set; }
public override void Process(TagHelperContext context, TagHelperOutput output)
{
output.TagName = "a";
- output.Attributes.Add("href", $"/{Id}G");
+ Page = "/Games/Index";
+ RouteValues.Add(nameof(Pages.Games.IndexModel.Id), Id.ToString());
+ base.Process(context, output);
}
}
@@ -85,7 +91,7 @@ public override async Task ProcessAsync(TagHelperContext context, TagHelperOutpu
output.TagName = "a";
Page = "/Users/Profile";
- RouteValues.Add("UserName", Username);
+ RouteValues.Add(nameof(Pages.Users.ProfileModel.UserName), Username);
await base.ProcessAsync(context, output);
}
}
diff --git a/tests/TASVideos.RazorPages.Tests/TagHelpers/GameLinkTagHelperTests.cs b/tests/TASVideos.RazorPages.Tests/TagHelpers/GameLinkTagHelperTests.cs
new file mode 100644
index 000000000..3a6153fde
--- /dev/null
+++ b/tests/TASVideos.RazorPages.Tests/TagHelpers/GameLinkTagHelperTests.cs
@@ -0,0 +1,19 @@
+using TASVideos.Extensions;
+using TASVideos.TagHelpers;
+
+namespace TASVideos.RazorPages.Tests.TagHelpers;
+
+[TestClass]
+public sealed class GameLinkTagHelperTests : LinkTagHelperTestsBase
+{
+ [DataRow(123, "some game", """some game""")]
+ [TestMethod]
+ public async Task TestGameLinkHelper(int id, string label, string expected)
+ {
+ var generator = TestableHtmlGenerator.Create(out var viewCtx, ServiceCollectionExtensions.Aliases.First(kvp => kvp.Key is "/Games/Index"));
+ GameLinkTagHelper gameLinkHelper = new(generator) { Id = id, ViewContext = viewCtx };
+ var output = GetOutputObj(contentsUnencoded: label, tagName: "game-link");
+ await gameLinkHelper.ProcessAsync(GetHelperContext(), output);
+ Assert.AreEqual(expected, GetHtmlString(output));
+ }
+}
diff --git a/tests/TASVideos.RazorPages.Tests/TagHelpers/LinkTagHelperTestsBase.cs b/tests/TASVideos.RazorPages.Tests/TagHelpers/LinkTagHelperTestsBase.cs
new file mode 100644
index 000000000..e82a3aeac
--- /dev/null
+++ b/tests/TASVideos.RazorPages.Tests/TagHelpers/LinkTagHelperTestsBase.cs
@@ -0,0 +1,31 @@
+using System.Collections.Immutable;
+
+using Microsoft.AspNetCore.Razor.TagHelpers;
+
+namespace TASVideos.RazorPages.Tests.TagHelpers;
+
+public abstract class LinkTagHelperTestsBase
+{
+ public static TagHelperContext GetHelperContext()
+ => new(
+ [],
+ ImmutableDictionary