using GmRelay.Shared.Features.Sessions.CreateSession; using GmRelay.Shared.Platform; namespace GmRelay.Bot.Tests.Features.Sessions.CreateSession; public sealed class CreateSessionCommandContractTests { [Fact] public void CreateSessionCommand_ShouldExposePlatformNeutralContext() { AssertProperty("User", typeof(PlatformUser)); AssertProperty("Group", typeof(PlatformGroup)); AssertProperty("Title", typeof(string)); AssertProperty("Link", typeof(string)); AssertProperty("ScheduledTimes", typeof(IReadOnlyList)); AssertProperty("MaxPlayers", typeof(int?)); AssertProperty("ImageReference", typeof(string)); AssertNoTelegramSpecificProperties(); } private static void AssertProperty(string name, Type expectedType) { var property = Assert.Single(typeof(T).GetProperties(), p => p.Name == name); Assert.Equal(expectedType, property.PropertyType); } private static void AssertNoTelegramSpecificProperties() { var names = typeof(T).GetProperties().Select(p => p.Name).ToArray(); Assert.DoesNotContain(names, name => name.Contains("Telegram", StringComparison.Ordinal)); Assert.DoesNotContain("ChatId", names); Assert.DoesNotContain("MessageId", names); Assert.DoesNotContain("TelegramUserId", names); Assert.DoesNotContain("TelegramUsername", names); } }