using TeamsISO.App.ViewModels; using Xunit; namespace TeamsISO.App.Tests; /// /// Validates the title-stripping heuristic used by the IN-CALL bar pill. /// Teams' raw window title is the format the user actually sees (or doesn't — /// when auto-hide is on); we want to surface the meaningful meeting-name /// portion without the "| Microsoft Teams" suffix bloating the pill. /// public class MeetingTitleExtractionTests { [Theory] [InlineData("Weekly Standup | Microsoft Teams", "Weekly Standup")] [InlineData("Meeting with Alice | Microsoft Teams", "Meeting with Alice")] [InlineData("Q4 Planning - Microsoft Teams", "Q4 Planning")] [InlineData("Meeting | Teams", "Meeting")] public void StripsTeamsSuffix(string raw, string expected) { Assert.Equal(expected, MainViewModel.ExtractMeetingTitle(raw)); } [Fact] public void EmptyInput_ReturnsEmpty() { Assert.Equal(string.Empty, MainViewModel.ExtractMeetingTitle(string.Empty)); } [Fact] public void Whitespace_ReturnsEmpty() { Assert.Equal(string.Empty, MainViewModel.ExtractMeetingTitle(" ")); } [Fact] public void BareAppTitle_ReturnsEmpty() { // "Microsoft Teams" alone means no meeting context — pill should // stay at plain "IN CALL" rather than appending a meaningless title. Assert.Equal(string.Empty, MainViewModel.ExtractMeetingTitle("Microsoft Teams")); } [Fact] public void LongTitle_GetsTruncated() { var long_ = new string('A', 100) + " | Microsoft Teams"; var result = MainViewModel.ExtractMeetingTitle(long_); Assert.True(result.Length <= 50); Assert.EndsWith("…", result); } [Fact] public void OuterWhitespaceIsTrimmed() { // Real Teams uses single-space format " | Microsoft Teams"; we only // promise to trim outer whitespace, not normalize internal padding. Assert.Equal("Project sync", MainViewModel.ExtractMeetingTitle(" Project sync | Microsoft Teams ")); } [Fact] public void TitleWithoutSeparator_PassesThrough() { // If Teams emits an unrecognized format, return it as-is (clamped to 50). Assert.Equal("Quick chat", MainViewModel.ExtractMeetingTitle("Quick chat")); } }