Merge pull request #6 from isbeorn/main
Fix lodestone character id extraction
This commit is contained in:
		| @@ -7,6 +7,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MareSynchronosServer", "Mar | |||||||
| EndProject | EndProject | ||||||
| Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MareSynchronos.API", "..\MareAPI\MareSynchronosAPI\MareSynchronos.API.csproj", "{326BFB1B-5571-47A6-8513-1FFDB32D53B0}" | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MareSynchronos.API", "..\MareAPI\MareSynchronosAPI\MareSynchronos.API.csproj", "{326BFB1B-5571-47A6-8513-1FFDB32D53B0}" | ||||||
| EndProject | EndProject | ||||||
|  | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MareSynchronosServerTest", "MareSynchronosServerTest\MareSynchronosServerTest.csproj", "{25A82A2A-35C2-4EE0-A0E8-DFDD77978DDA}" | ||||||
|  | EndProject | ||||||
| Global | Global | ||||||
| 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | 	GlobalSection(SolutionConfigurationPlatforms) = preSolution | ||||||
| 		Debug|Any CPU = Debug|Any CPU | 		Debug|Any CPU = Debug|Any CPU | ||||||
| @@ -21,6 +23,10 @@ Global | |||||||
| 		{326BFB1B-5571-47A6-8513-1FFDB32D53B0}.Debug|Any CPU.Build.0 = Debug|Any CPU | 		{326BFB1B-5571-47A6-8513-1FFDB32D53B0}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
| 		{326BFB1B-5571-47A6-8513-1FFDB32D53B0}.Release|Any CPU.ActiveCfg = Release|Any CPU | 		{326BFB1B-5571-47A6-8513-1FFDB32D53B0}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
| 		{326BFB1B-5571-47A6-8513-1FFDB32D53B0}.Release|Any CPU.Build.0 = Release|Any CPU | 		{326BFB1B-5571-47A6-8513-1FFDB32D53B0}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
|  | 		{25A82A2A-35C2-4EE0-A0E8-DFDD77978DDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||||||
|  | 		{25A82A2A-35C2-4EE0-A0E8-DFDD77978DDA}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||||||
|  | 		{25A82A2A-35C2-4EE0-A0E8-DFDD77978DDA}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||||||
|  | 		{25A82A2A-35C2-4EE0-A0E8-DFDD77978DDA}.Release|Any CPU.Build.0 = Release|Any CPU | ||||||
| 	EndGlobalSection | 	EndGlobalSection | ||||||
| 	GlobalSection(SolutionProperties) = preSolution | 	GlobalSection(SolutionProperties) = preSolution | ||||||
| 		HideSolutionNode = FALSE | 		HideSolutionNode = FALSE | ||||||
|   | |||||||
| @@ -304,12 +304,14 @@ namespace MareSynchronosServer.Discord | |||||||
|  |  | ||||||
|         private int? ParseCharacterIdFromLodestoneUrl(string lodestoneUrl)  |         private int? ParseCharacterIdFromLodestoneUrl(string lodestoneUrl)  | ||||||
|         { |         { | ||||||
|             var isLodestoneUrl = Regex.Match(lodestoneUrl, @"https:\/\/(na|eu|de|fr|jp)\.finalfantasyxiv\.com\/lodestone\/character\/\d+").Success; |             var regex = new Regex(@"https:\/\/(na|eu|de|fr|jp)\.finalfantasyxiv\.com\/lodestone\/character\/\d+"); | ||||||
|             if (!isLodestoneUrl) return null; |             var matches = regex.Match(lodestoneUrl); | ||||||
|  |             var isLodestoneUrl = matches.Success; | ||||||
|  |             if (!isLodestoneUrl || matches.Groups.Count < 1) return null; | ||||||
|  |  | ||||||
|             lodestoneUrl = lodestoneUrl.Split('/', StringSplitOptions.RemoveEmptyEntries).Last(); |             lodestoneUrl = matches.Groups[0].ToString(); | ||||||
|             if (!int.TryParse(lodestoneUrl, out int lodestoneId)) |             var stringId = lodestoneUrl.Split('/', StringSplitOptions.RemoveEmptyEntries).Last(); | ||||||
|             { |             if (!int.TryParse(stringId, out int lodestoneId)) { | ||||||
|                 return null; |                 return null; | ||||||
|             } |             } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,53 @@ | |||||||
|  | using FluentAssertions; | ||||||
|  | using MareSynchronosServer.Discord; | ||||||
|  | using Microsoft.Extensions.Configuration; | ||||||
|  | using Microsoft.Extensions.Logging; | ||||||
|  | using Microsoft.Extensions.Primitives; | ||||||
|  | using Moq; | ||||||
|  | using System; | ||||||
|  | using System.Collections.Generic; | ||||||
|  | using System.Linq; | ||||||
|  | using System.Reflection; | ||||||
|  | using System.Text; | ||||||
|  | using System.Threading.Tasks; | ||||||
|  |  | ||||||
|  | namespace MareSynchronosServerTest.Discord { | ||||||
|  |     public class DiscordBotTest { | ||||||
|  |  | ||||||
|  |         [Test] | ||||||
|  |         [TestCase("", null)] | ||||||
|  |         [TestCase("abcd", null)] | ||||||
|  |         [TestCase("www.google.de", null)] | ||||||
|  |         [TestCase("https://www.google.de", null)] | ||||||
|  |         [TestCase("de.finalfantasyxiv.com/lodestone/character/1234", null)] | ||||||
|  |         [TestCase("https://cn.finalfantasyxiv.com/lodestone/character/1234", null)] | ||||||
|  |         [TestCase("http://jp.finalfantasyxiv.com/lodestone/character/1234", null)] | ||||||
|  |         [TestCase("https://jp.finalfantasyxiv.com/character/1234", null)] | ||||||
|  |         [TestCase("https://jp.finalfantasyxiv.com/lodestone/1234", null)] | ||||||
|  |         [TestCase("https://www.finalfantasyxiv.com/lodestone/character/1234", null)] | ||||||
|  |         [TestCase("https://jp.finalfantasyxiv.com/lodestone/character/1234", 1234)] | ||||||
|  |         [TestCase("https://fr.finalfantasyxiv.com/lodestone/character/1234", 1234)] | ||||||
|  |         [TestCase("https://eu.finalfantasyxiv.com/lodestone/character/1234/", 1234)] | ||||||
|  |         [TestCase("https://eu.finalfantasyxiv.com/lodestone/character/1234?myurlparameter=500", 1234)] | ||||||
|  |         [TestCase("https://de.finalfantasyxiv.com/lodestone/character/1234/whatever/3456", 1234)] | ||||||
|  |         [TestCase("https://na.finalfantasyxiv.com/lodestone/character/1234abcd4321/whatever/3456", 1234)] | ||||||
|  |         public void Test1(string url, int? expectedId) { | ||||||
|  |             var inMemorySettings = new Dictionary<string, string> { | ||||||
|  |                 {"DiscordBotToken", "1234"} | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             IConfiguration configuration = new ConfigurationBuilder() | ||||||
|  |                 .AddInMemoryCollection(inMemorySettings) | ||||||
|  |                 .Build(); | ||||||
|  |  | ||||||
|  |             var spMock = new Mock<IServiceProvider>(); | ||||||
|  |             var loggerMock = new Mock<ILogger<DiscordBot>>(); | ||||||
|  |  | ||||||
|  |             var sut = new DiscordBot(spMock.Object, configuration, loggerMock.Object); | ||||||
|  |             MethodInfo methodInfo = sut.GetType().GetMethod("ParseCharacterIdFromLodestoneUrl", BindingFlags.NonPublic | BindingFlags.Instance); | ||||||
|  |             var actualId = methodInfo.Invoke(sut, new object[] { url }); | ||||||
|  |  | ||||||
|  |             actualId.Should().Be(expectedId); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -0,0 +1,25 @@ | |||||||
|  | <Project Sdk="Microsoft.NET.Sdk"> | ||||||
|  |  | ||||||
|  |   <PropertyGroup> | ||||||
|  |     <TargetFramework>net6.0</TargetFramework> | ||||||
|  |     <ImplicitUsings>enable</ImplicitUsings> | ||||||
|  |     <Nullable>enable</Nullable> | ||||||
|  |  | ||||||
|  |     <IsPackable>false</IsPackable> | ||||||
|  |   </PropertyGroup> | ||||||
|  |  | ||||||
|  |   <ItemGroup> | ||||||
|  |     <PackageReference Include="FluentAssertions" Version="6.7.0" /> | ||||||
|  |     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" /> | ||||||
|  |     <PackageReference Include="Moq" Version="4.18.2" /> | ||||||
|  |     <PackageReference Include="NUnit" Version="3.13.3" /> | ||||||
|  |     <PackageReference Include="NUnit3TestAdapter" Version="4.2.1" /> | ||||||
|  |     <PackageReference Include="NUnit.Analyzers" Version="3.3.0" /> | ||||||
|  |     <PackageReference Include="coverlet.collector" Version="3.1.2" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |  | ||||||
|  |   <ItemGroup> | ||||||
|  |     <ProjectReference Include="..\MareSynchronosServer\MareSynchronosServer.csproj" /> | ||||||
|  |   </ItemGroup> | ||||||
|  |  | ||||||
|  | </Project> | ||||||
							
								
								
									
										1
									
								
								MareSynchronosServer/MareSynchronosServerTest/Usings.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								MareSynchronosServer/MareSynchronosServerTest/Usings.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  | global using NUnit.Framework; | ||||||
		Reference in New Issue
	
	Block a user
	 rootdarkarchon
					rootdarkarchon