Public Access
Improve toast duration and speaker override samples
PR and Push Build/Test / build-and-test (push) Failing after 9m48s
PR and Push Build/Test / build-and-test (push) Failing after 9m48s
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
using MeetingAssistant.Notifications;
|
||||
|
||||
namespace MeetingAssistant.Tests;
|
||||
|
||||
public sealed class NotificationExpirationPolicyTests
|
||||
{
|
||||
[Fact]
|
||||
public void MeetingStopReminderExpiresAfterOneMinute()
|
||||
{
|
||||
var now = new DateTimeOffset(2026, 6, 5, 9, 30, 0, TimeSpan.Zero);
|
||||
|
||||
var expiration = MeetingToastExpirationPolicy.StopReminderExpiration(now);
|
||||
|
||||
Assert.Equal(now.AddMinutes(1), expiration);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void MeetingStartPromptExpiresAfterFiveMinutes()
|
||||
{
|
||||
var now = new DateTimeOffset(2026, 6, 5, 9, 30, 0, TimeSpan.Zero);
|
||||
|
||||
var expiration = MeetingToastExpirationPolicy.StartRecordingPromptExpiration(now);
|
||||
|
||||
Assert.Equal(now.AddMinutes(5), expiration);
|
||||
}
|
||||
}
|
||||
@@ -350,6 +350,48 @@ public sealed class SpeakerIdentityServiceTests
|
||||
Assert.Contains(saved.Snippets, snippet => snippet.WavBytes.SequenceEqual(new byte[] { 8, 8, 8 }));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SpeakerOverrideExtractsOnlyBestContinuousSourceSpanWhenNoLiveSampleExists()
|
||||
{
|
||||
await using var fixture = await SpeakerIdentityFixture.CreateAsync();
|
||||
var service = fixture.CreateService();
|
||||
var request = fixture.CreateRequest(
|
||||
["Sabrina"],
|
||||
[
|
||||
new TranscriptionSegment(TimeSpan.Zero, TimeSpan.FromSeconds(10), "Guest-01", "short start"),
|
||||
new TranscriptionSegment(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(20), "Guest-02", "someone else"),
|
||||
new TranscriptionSegment(TimeSpan.FromSeconds(60), TimeSpan.FromSeconds(80), "Guest-01", "continuous first part"),
|
||||
new TranscriptionSegment(TimeSpan.FromSeconds(80.5), TimeSpan.FromSeconds(92), "Guest-01", "continuous second part"),
|
||||
new TranscriptionSegment(TimeSpan.FromSeconds(180), TimeSpan.FromSeconds(190), "Guest-01", "short end")
|
||||
]);
|
||||
|
||||
await service.ApplySpeakerOverrideAsync(request, "Guest-01", "Sabrina", CancellationToken.None);
|
||||
|
||||
Assert.Equal(1, fixture.SnippetExtractor.ExtractCalls);
|
||||
Assert.Collection(
|
||||
fixture.SnippetExtractor.LastSpeakerSegments,
|
||||
segment => Assert.Equal(TimeSpan.FromSeconds(60), segment.Start),
|
||||
segment => Assert.Equal(TimeSpan.FromSeconds(80.5), segment.Start));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SpeakerOverrideDoesNotCreateNamedIdentityWhenSecondaryValidationRejectsSample()
|
||||
{
|
||||
await using var fixture = await SpeakerIdentityFixture.CreateAsync();
|
||||
fixture.MatchValidator.SampleIsValid = false;
|
||||
var service = fixture.CreateService();
|
||||
var request = fixture.CreateRequest(
|
||||
["Sabrina"],
|
||||
[
|
||||
new TranscriptionSegment(TimeSpan.Zero, TimeSpan.FromSeconds(31), "Guest-01", "long enough source sample")
|
||||
]);
|
||||
|
||||
await service.ApplySpeakerOverrideAsync(request, "Guest-01", "Sabrina", CancellationToken.None);
|
||||
|
||||
Assert.Equal(1, fixture.MatchValidator.ValidateSampleCalls);
|
||||
Assert.Empty(await fixture.Context.SpeakerIdentities.ToListAsync());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task SpeakerOverrideDoesNotCreateNamedIdentityWithoutSourceSample()
|
||||
{
|
||||
@@ -800,6 +842,8 @@ public sealed class SpeakerIdentityServiceTests
|
||||
{
|
||||
public int ExtractCalls { get; private set; }
|
||||
|
||||
public IReadOnlyList<TranscriptionSegment> LastSpeakerSegments { get; private set; } = [];
|
||||
|
||||
public Task<byte[]> ExtractSnippetAsync(
|
||||
string audioPath,
|
||||
IReadOnlyList<TranscriptionSegment> speakerSegments,
|
||||
@@ -811,6 +855,7 @@ public sealed class SpeakerIdentityServiceTests
|
||||
}
|
||||
|
||||
ExtractCalls++;
|
||||
LastSpeakerSegments = speakerSegments.ToList();
|
||||
return Task.FromResult<byte[]>([7, 8, 9]);
|
||||
}
|
||||
}
|
||||
@@ -845,10 +890,13 @@ public sealed class SpeakerIdentityServiceTests
|
||||
{
|
||||
public bool SampleIsValid { get; set; } = true;
|
||||
|
||||
public int ValidateSampleCalls { get; private set; }
|
||||
|
||||
public Task<bool> ValidateSampleAsync(
|
||||
byte[] wavBytes,
|
||||
CancellationToken cancellationToken)
|
||||
{
|
||||
ValidateSampleCalls++;
|
||||
return Task.FromResult(SampleIsValid);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user