diff --git a/Valour/Client/Utility/NotificationNavigator.cs b/Valour/Client/Utility/NotificationNavigator.cs index a39f70e6b..04e72c4ca 100644 --- a/Valour/Client/Utility/NotificationNavigator.cs +++ b/Valour/Client/Utility/NotificationNavigator.cs @@ -57,6 +57,19 @@ private static (long PlanetId, long ThreadId)? TryParseThreadRoute(string clickU return null; } + private static readonly HashSet PlanetChannelRouteSources = new() + { + NotificationSource.PlanetMemberMention, + NotificationSource.PlanetRoleMention, + NotificationSource.PlanetMemberReply, + NotificationSource.PlanetHereMention, + NotificationSource.PlanetEveryoneMention, + NotificationSource.ChannelActivity, + }; + + internal static bool IsPlanetChannelRouteSource(NotificationSource source) => + PlanetChannelRouteSources.Contains(source); + public static async Task NavigateTo(Notification notification) { if (notification?.Client is null) @@ -71,11 +84,7 @@ public static async Task NavigateTo(Notification notification) { switch (notification.Source) { - case NotificationSource.PlanetMemberMention: - case NotificationSource.PlanetRoleMention: - case NotificationSource.PlanetMemberReply: - case NotificationSource.PlanetHereMention: - case NotificationSource.PlanetEveryoneMention: + case var source when IsPlanetChannelRouteSource(source): { var planetId = notification.PlanetId; var channelId = notification.ChannelId; diff --git a/Valour/Tests/Client/NotificationNavigatorTests.cs b/Valour/Tests/Client/NotificationNavigatorTests.cs new file mode 100644 index 000000000..106c78786 --- /dev/null +++ b/Valour/Tests/Client/NotificationNavigatorTests.cs @@ -0,0 +1,34 @@ +using Valour.Client.Utility; +using Valour.Shared.Models; + +namespace Valour.Tests.Client; + +public class NotificationNavigatorTests +{ + [Theory] + [InlineData(NotificationSource.ChannelActivity)] + [InlineData(NotificationSource.PlanetMemberMention)] + [InlineData(NotificationSource.PlanetRoleMention)] + [InlineData(NotificationSource.PlanetMemberReply)] + [InlineData(NotificationSource.PlanetHereMention)] + [InlineData(NotificationSource.PlanetEveryoneMention)] + public void IsPlanetChannelRouteSource_ForPlanetChannelSources_ReturnsTrue(NotificationSource source) + { + Assert.True(NotificationNavigator.IsPlanetChannelRouteSource(source)); + } + + [Theory] + [InlineData(NotificationSource.DirectMention)] + [InlineData(NotificationSource.DirectReply)] + [InlineData(NotificationSource.DirectMessage)] + [InlineData(NotificationSource.ThreadComment)] + [InlineData(NotificationSource.ThreadReply)] + [InlineData(NotificationSource.FriendRequest)] + [InlineData(NotificationSource.FriendRequestAccepted)] + [InlineData(NotificationSource.EventReminder)] + [InlineData(NotificationSource.Platform)] + public void IsPlanetChannelRouteSource_ForNonPlanetChannelSources_ReturnsFalse(NotificationSource source) + { + Assert.False(NotificationNavigator.IsPlanetChannelRouteSource(source)); + } +}