Improve toast duration and speaker override samples
PR and Push Build/Test / build-and-test (push) Failing after 9m48s

This commit is contained in:
2026-06-05 10:52:08 +02:00
parent 351ed2eb50
commit 1a89382f02
13 changed files with 162 additions and 33 deletions
@@ -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);
}