2026-11-12 15:02:00 +01:00
using AIStudio.Assistants.BeyondFactsLab ;
namespace AIStudio.Tests.BeyondFactsLab ;
/// <summary>
/// Checks which names the BeyondFacts Lab suggests to remove before the person shares a session.
/// </summary>
[TestFixture]
public sealed class BflShareNamesTests
{
private static readonly DateTimeOffset NOW = new ( 2026 , 11 , 12 , 9 , 0 , 0 , TimeSpan . Zero );
[Test]
public void TheNamesInTheFieldOfTheOtherParticipantsAreSuggested ()
{
var forms = Forms ();
forms [ BflStep . FRAMEWORK ]. Set ( BflFieldCatalog . OTHER_PARTICIPANTS , "Prof. Dr. Anna Schmidt (TUM)\nModeration: Bernd Weber; Carla von der Heide und Dieter Graf, Bundestag\n- Die Moderatorin Hanna Berg\nVertreter*innen aus der Politik" );
var names = BflShareNames . Suggest ( forms , new Dictionary < BflStep , BflWorkState >(), null );
Assert . That ( names , Is . EqualTo ( new [] { "Anna Schmidt" , "Bernd Weber" , "Carla von der Heide" , "Dieter Graf" , "Bundestag" , "Hanna Berg" }));
}
[Test]
2026-11-15 15:39:34 +01:00
public void TheListOfPeopleOfTheResearchOnTheParticipantsIsSuggested ()
2026-11-12 15:02:00 +01:00
{
var research = new BflResearch
{
Text = "## Teilnehmende\n\n### Dr. Eva Klein\n\n- Rolle: Podium\n\n### Frank Ott (Moderation)\n\n## Offene Punkte\n\n- Wer noch?" ,
CreatedAtUtc = NOW ,
};
2026-11-15 15:39:34 +01:00
research . Participants = [.. BflParticipant . ListIn ( research . Text )];
2026-11-12 15:02:00 +01:00
var names = BflShareNames . Suggest ( Forms (), new Dictionary < BflStep , BflWorkState >(), research );
Assert . That ( names , Is . EqualTo ( new [] { "Eva Klein" , "Frank Ott" }));
}
2026-11-15 15:39:34 +01:00
[Test]
public void TheHeadingsOfAResearchWithoutAListOfPeopleAreNotSuggested ()
{
var research = new BflResearch { Text = "### Dr. Eva Klein" , CreatedAtUtc = NOW };
var names = BflShareNames . Suggest ( Forms (), new Dictionary < BflStep , BflWorkState >(), research );
Assert . That ( names , Is . Empty );
}
2026-11-12 15:02:00 +01:00
[Test]
public void TheNamesInBoldInTheSectionOnTheParticipantsAreSuggested ()
{
var workStates = new Dictionary < BflStep , BflWorkState > { [ BflStep . STRATEGY ] = new () };
workStates [ BflStep . STRATEGY ]. Confirm ( new Dictionary < string , string > { [ "PARTICIPANTS" ] = "- **Gregor Sand**, Moderation, hält das für **wichtig**\n- [**Ida Lux**](https://example.org)" }, new Dictionary < BflStep , int >(), string . Empty , NOW );
var names = BflShareNames . Suggest ( Forms (), workStates , null );
Assert . That ( names , Is . EqualTo ( new [] { "Gregor Sand" , "Ida Lux" }));
}
[Test]
public void ANameFoundTwiceOrAsAPartOfALongerOneIsSuggestedOnce ()
{
var forms = Forms ();
forms [ BflStep . FRAMEWORK ]. Set ( BflFieldCatalog . OTHER_PARTICIPANTS , "Weber\nBernd Weber\nbernd weber" );
var names = BflShareNames . Suggest ( forms , new Dictionary < BflStep , BflWorkState >(), null );
Assert . That ( names , Is . EqualTo ( new [] { "Bernd Weber" }));
}
[Test]
public void ALongRunOfCapitalsGivesItsLastTwoWords () => Assert . That ( BflShareNames . NamesIn ( "Neue Forschung Zeigt Lena Graf" ), Is . EqualTo ( new [] { "Lena Graf" }));
[Test]
public void ADraftOfAWorkStateSuggestsNothing ()
{
var workStates = new Dictionary < BflStep , BflWorkState >
{
[BflStep.STRATEGY] = new () { Draft = new ( StringComparer . Ordinal ) { [ "PARTICIPANTS" ] = "**Gregor Sand**" } },
};
Assert . That ( BflShareNames . Suggest ( Forms (), workStates , null ), Is . Empty );
}
private static Dictionary < BflStep , BflStepFormData > Forms () => BflStep . All . ToDictionary ( step => step , _ => new BflStepFormData ());
}