using AuthApi.Services; using Xunit; namespace AuthApi.Tests; public class SteamOpenIdServiceTests { [Fact] public void BuildAuthenticationUrl_UsesSteamEndpointAndBindsReturnUrl() { const string callback = "https://pauth.ranaze.com/api/Auth/steam/callback?transactionId=abc-123"; var result = SteamOpenIdService.BuildAuthenticationUrl("https://pauth.ranaze.com", callback); Assert.StartsWith(SteamOpenIdService.Endpoint + "?", result); Assert.Contains("openid.mode=checkid_setup", result); Assert.Contains(Uri.EscapeDataString(callback), result); Assert.Contains(Uri.EscapeDataString("https://pauth.ranaze.com"), result); } [Theory] [InlineData("https://steamcommunity.com/openid/id/76561198000000000", "76561198000000000")] [InlineData("http://steamcommunity.com/openid/id/76561198000000000", "76561198000000000")] [InlineData("https://example.com/openid/id/76561198000000000", null)] [InlineData("https://steamcommunity.com/openid/id/not-a-steamid", null)] public void ExtractSteamId_OnlyAcceptsSteamClaimedIds(string claimedId, string? expected) { Assert.Equal(expected, SteamOpenIdService.ExtractSteamId(claimedId)); } [Theory] [InlineData("ns:http://specs.openid.net/auth/2.0\nis_valid:true\n", true)] [InlineData("is_valid:false\n", false)] [InlineData("is_valid:true-ish\n", false)] public void IsValidAuthenticationResponse_RequiresExactValidLine(string response, bool expected) { Assert.Equal(expected, SteamOpenIdService.IsValidAuthenticationResponse(response)); } }