Files
meeting-assistant/MeetingAssistant.Tests/TaskbarIconTests.cs
T

97 lines
4.0 KiB
C#

using MeetingAssistant.LaunchProfiles;
using MeetingAssistant.Recording;
using MeetingAssistant.Taskbar;
namespace MeetingAssistant.Tests;
public sealed class TaskbarIconTests
{
[Fact]
public void IdleMenuOffersStartForEachConfiguredProfile()
{
var menu = MeetingTaskbarMenuBuilder.Build(
Status(),
[Profile("default"), Profile("english")]);
Assert.Equal(RecordingProcessState.Idle, menu.State);
Assert.Contains(menu.Items, item =>
item.Action == MeetingTaskbarAction.StartRecording &&
item.ProfileName == "default");
Assert.Contains(menu.Items, item =>
item.Action == MeetingTaskbarAction.StartRecording &&
item.ProfileName == "english");
Assert.DoesNotContain(menu.Items, item => item.Action == MeetingTaskbarAction.StopRecording);
Assert.DoesNotContain(menu.Items, item => item.Action == MeetingTaskbarAction.AbortRecording);
}
[Fact]
public void RecordingMenuOffersStopAbortAndOtherProfileSwitches()
{
var menu = MeetingTaskbarMenuBuilder.Build(
Status(isRecording: true, state: RecordingProcessState.Recording, profile: "default"),
[Profile("default"), Profile("english"), Profile("french")]);
Assert.Equal(RecordingProcessState.Recording, menu.State);
Assert.Contains(menu.Items, item => item.Action == MeetingTaskbarAction.StopRecording);
Assert.Contains(menu.Items, item => item.Action == MeetingTaskbarAction.AbortRecording);
Assert.Contains(menu.Items, item =>
item.Action == MeetingTaskbarAction.SwitchProfile &&
item.ProfileName == "english");
Assert.Contains(menu.Items, item =>
item.Action == MeetingTaskbarAction.SwitchProfile &&
item.ProfileName == "french");
Assert.DoesNotContain(menu.Items, item =>
item.Action == MeetingTaskbarAction.SwitchProfile &&
item.ProfileName == "default");
Assert.DoesNotContain(menu.Items, item => item.Action == MeetingTaskbarAction.StartRecording);
}
[Fact]
public void ProcessingMenuShowsSummarizingButAllowsStartingNewRecordings()
{
var menu = MeetingTaskbarMenuBuilder.Build(
Status(state: RecordingProcessState.Summarizing, profile: "default"),
[Profile("default"), Profile("english")]);
Assert.Equal(RecordingProcessState.Summarizing, menu.State);
Assert.Contains(menu.Items, item =>
item.Action == MeetingTaskbarAction.StartRecording &&
item.ProfileName == "default");
Assert.Contains(menu.Items, item =>
item.Action == MeetingTaskbarAction.StartRecording &&
item.ProfileName == "english");
Assert.DoesNotContain(menu.Items, item => item.Action == MeetingTaskbarAction.StopRecording);
Assert.DoesNotContain(menu.Items, item => item.Action == MeetingTaskbarAction.AbortRecording);
}
[Fact]
public void RecordingStateWinsOverOlderSummarizingWork()
{
var menu = MeetingTaskbarMenuBuilder.Build(
Status(isRecording: true, state: RecordingProcessState.Recording, profile: "english"),
[Profile("default"), Profile("english")]);
Assert.Equal(RecordingProcessState.Recording, menu.State);
}
private static LaunchProfile Profile(string name)
{
return new LaunchProfile(name, new MeetingAssistantOptions());
}
private static RecordingStatus Status(
bool isRecording = false,
RecordingProcessState state = RecordingProcessState.Idle,
string? profile = null)
{
return new RecordingStatus(
isRecording,
state == RecordingProcessState.Idle ? null : "transcript.md",
state == RecordingProcessState.Idle ? null : "meeting.md",
state == RecordingProcessState.Idle ? null : "context.md",
state == RecordingProcessState.Idle ? null : "summary.md",
state,
profile);
}
}