Files
meeting-assistant/MeetingAssistant.Tests/MeetingSummaryArtifactResolverTests.cs
T
2026-05-27 12:55:17 +02:00

129 lines
4.9 KiB
C#

using MeetingAssistant.MeetingNotes;
using MeetingAssistant.Summary;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
namespace MeetingAssistant.Tests;
public sealed class MeetingSummaryArtifactResolverTests
{
[Fact]
public async Task ResolverFindsMeetingArtifactsForSummaryPath()
{
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
var notes = Path.Combine(root, "Meetings", "Notes");
var summaries = Path.Combine(root, "Meetings", "Summaries");
Directory.CreateDirectory(notes);
Directory.CreateDirectory(summaries);
var notePath = Path.Combine(notes, "meeting.md");
await File.WriteAllTextAsync(
notePath,
"""
---
title: Meeting
attendees:
projects:
transcript: "[[../Transcripts/transcript|Transcript]]"
assistant_context: "[[../Assistant Context/context|Assistant Context]]"
summary: "[[../Summaries/summary|Summary]]"
---
User notes.
""");
var options = Options.Create(new MeetingAssistantOptions
{
Vault = new VaultOptions
{
MeetingNotesFolder = notes,
SummariesFolder = summaries
}
});
var resolver = new MeetingSummaryArtifactResolver(
options,
new MarkdownMeetingNoteStore(options, NullLogger<MarkdownMeetingNoteStore>.Instance));
var artifacts = await resolver.ResolveBySummaryPathAsync("summary.md", CancellationToken.None);
Assert.NotNull(artifacts);
Assert.Equal(notePath, artifacts.MeetingNotePath);
Assert.Equal(Path.Combine(root, "Meetings", "Transcripts", "transcript.md"), artifacts.TranscriptPath);
Assert.Equal(Path.Combine(root, "Meetings", "Assistant Context", "context.md"), artifacts.AssistantContextPath);
Assert.Equal(Path.Combine(summaries, "summary.md"), artifacts.SummaryPath);
}
[Fact]
public async Task ResolverRejectsSummaryPathOutsideConfiguredSummaryFolder()
{
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
var options = Options.Create(new MeetingAssistantOptions
{
Vault = new VaultOptions
{
MeetingNotesFolder = Path.Combine(root, "Notes"),
SummariesFolder = Path.Combine(root, "Summaries")
}
});
var resolver = new MeetingSummaryArtifactResolver(
options,
new MarkdownMeetingNoteStore(options, NullLogger<MarkdownMeetingNoteStore>.Instance));
var artifacts = await resolver.ResolveBySummaryPathAsync(
Path.Combine(root, "Other", "summary.md"),
CancellationToken.None);
Assert.Null(artifacts);
}
[Fact]
public async Task ResolverUsesSuppliedProfileOptionsForSummaryLookup()
{
var root = Path.Combine(Path.GetTempPath(), "meeting-assistant-tests", Guid.NewGuid().ToString("N"));
var defaultRoot = Path.Combine(root, "default");
var englishRoot = Path.Combine(root, "english");
var englishNotes = Path.Combine(englishRoot, "Notes");
var englishSummaries = Path.Combine(englishRoot, "Summaries");
Directory.CreateDirectory(englishNotes);
Directory.CreateDirectory(englishSummaries);
var notePath = Path.Combine(englishNotes, "meeting.md");
await File.WriteAllTextAsync(
notePath,
"""
---
title: Meeting
attendees:
projects:
transcript: "[[../Transcripts/transcript|Transcript]]"
assistant_context: "[[../Assistant Context/context|Assistant Context]]"
summary: "[[../Summaries/summary|Summary]]"
---
User notes.
""");
var defaultOptions = Options.Create(new MeetingAssistantOptions
{
Vault = new VaultOptions
{
MeetingNotesFolder = Path.Combine(defaultRoot, "Notes"),
SummariesFolder = Path.Combine(defaultRoot, "Summaries")
}
});
var profileOptions = new MeetingAssistantOptions
{
Vault = new VaultOptions
{
MeetingNotesFolder = englishNotes,
SummariesFolder = englishSummaries
}
};
var resolver = new MeetingSummaryArtifactResolver(
defaultOptions,
new MarkdownMeetingNoteStore(defaultOptions, NullLogger<MarkdownMeetingNoteStore>.Instance));
var artifacts = await resolver.ResolveBySummaryPathAsync("summary.md", profileOptions, CancellationToken.None);
Assert.NotNull(artifacts);
Assert.Equal(notePath, artifacts.MeetingNotePath);
Assert.Equal(Path.Combine(englishSummaries, "summary.md"), artifacts.SummaryPath);
}
}