Public Access
Implement meeting assistant v1
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
using MeetingAssistant.MeetingNotes;
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
|
||||
namespace MeetingAssistant.Tests;
|
||||
|
||||
public sealed class MeetingArtifactStoreTests
|
||||
{
|
||||
[Fact]
|
||||
public async Task StoreCreatesAssistantContextNoteLinkedToMeetingArtifacts()
|
||||
{
|
||||
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
|
||||
var contextPath = Path.Combine(root, "Meetings", "Assistant Context", "20260519-context.md");
|
||||
var artifactStore = new MarkdownMeetingArtifactStore(NullLogger<MarkdownMeetingArtifactStore>.Instance);
|
||||
var artifacts = new MeetingSessionArtifacts(
|
||||
MeetingNotePath: Path.Combine(root, "Meetings", "Notes", "20260519-meeting.md"),
|
||||
TranscriptPath: Path.Combine(root, "Meetings", "Transcripts", "20260519-transcript.md"),
|
||||
AssistantContextPath: contextPath,
|
||||
SummaryPath: Path.Combine(root, "Meetings", "Summaries", "20260519-summary.md"));
|
||||
|
||||
await artifactStore.CreateAssistantContextAsync(
|
||||
artifacts,
|
||||
"Review previous decisions\nAgree next steps",
|
||||
DateTimeOffset.Parse("2026-05-19T11:00:00+02:00"),
|
||||
CancellationToken.None);
|
||||
|
||||
var content = await File.ReadAllTextAsync(contextPath);
|
||||
Assert.Contains("# Assistant Context", content);
|
||||
Assert.StartsWith("---", content, StringComparison.Ordinal);
|
||||
Assert.Contains("state: transcribing", content);
|
||||
Assert.Contains("agenda: |-", content);
|
||||
Assert.Contains(" Review previous decisions", content);
|
||||
Assert.Contains(" Agree next steps", content);
|
||||
Assert.Contains("scheduled_end: \"2026-05-19T11:00:00.0000000+02:00\"", content);
|
||||
Assert.Contains("meeting: \"[[../Notes/20260519-meeting|Meeting Note]]\"", content);
|
||||
Assert.Contains("transcript: \"[[../Transcripts/20260519-transcript|Transcript]]\"", content);
|
||||
Assert.Contains("summary: \"[[../Summaries/20260519-summary|Summary]]\"", content);
|
||||
Assert.Contains("[[../Notes/20260519-meeting|Meeting Note]]", content);
|
||||
Assert.Contains("[[../Transcripts/20260519-transcript|Transcript]]", content);
|
||||
Assert.Contains("[[../Summaries/20260519-summary|Summary]]", content);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task StoreUpdatesAssistantContextStateAndPreservesBody()
|
||||
{
|
||||
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
|
||||
var contextPath = Path.Combine(root, "Meetings", "Assistant Context", "20260519-context.md");
|
||||
var artifactStore = new MarkdownMeetingArtifactStore(NullLogger<MarkdownMeetingArtifactStore>.Instance);
|
||||
var artifacts = new MeetingSessionArtifacts(
|
||||
MeetingNotePath: Path.Combine(root, "Meetings", "Notes", "20260519-meeting.md"),
|
||||
TranscriptPath: Path.Combine(root, "Meetings", "Transcripts", "20260519-transcript.md"),
|
||||
AssistantContextPath: contextPath,
|
||||
SummaryPath: Path.Combine(root, "Meetings", "Summaries", "20260519-summary.md"));
|
||||
|
||||
await artifactStore.CreateAssistantContextAsync(
|
||||
artifacts,
|
||||
"Initial agenda",
|
||||
DateTimeOffset.Parse("2026-05-19T11:00:00+02:00"),
|
||||
CancellationToken.None);
|
||||
await File.AppendAllTextAsync(contextPath, "Observed context line.");
|
||||
|
||||
await artifactStore.UpdateAssistantContextStateAsync(
|
||||
artifacts,
|
||||
AssistantContextState.Summarizing,
|
||||
CancellationToken.None);
|
||||
|
||||
var content = await File.ReadAllTextAsync(contextPath);
|
||||
Assert.Contains("state: summarizing", content);
|
||||
Assert.Contains("agenda: |-", content);
|
||||
Assert.Contains(" Initial agenda", content);
|
||||
Assert.Contains("scheduled_end: \"2026-05-19T11:00:00.0000000+02:00\"", content);
|
||||
Assert.Contains("Observed context line.", content);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task StoreOmitsScheduledEndWhenNoTeamsMeetingWasDetected()
|
||||
{
|
||||
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
|
||||
var contextPath = Path.Combine(root, "Meetings", "Assistant Context", "20260519-context.md");
|
||||
var artifactStore = new MarkdownMeetingArtifactStore(NullLogger<MarkdownMeetingArtifactStore>.Instance);
|
||||
var artifacts = new MeetingSessionArtifacts(
|
||||
MeetingNotePath: Path.Combine(root, "Meetings", "Notes", "20260519-meeting.md"),
|
||||
TranscriptPath: Path.Combine(root, "Meetings", "Transcripts", "20260519-transcript.md"),
|
||||
AssistantContextPath: contextPath,
|
||||
SummaryPath: Path.Combine(root, "Meetings", "Summaries", "20260519-summary.md"));
|
||||
|
||||
await artifactStore.CreateAssistantContextAsync(artifacts, "", null, CancellationToken.None);
|
||||
|
||||
var content = await File.ReadAllTextAsync(contextPath);
|
||||
Assert.DoesNotContain("scheduled_end:", content);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user