Added a SWOT analysis assistant (#1122)

Co-authored-by: hart_s3 <sabrina.hartmann@dlr.de>
This commit is contained in:
Thorsten Sommerandhart_s3 authored and GitHub committed 2026-10-28 08:51:30 +01:00
1 parent 6cb20fd75a
commit 060a2a5734
87 files changed
+4601 -45

No files matched your search

@@ -0,0 +1,60 @@
using AIStudio.Assistants.SWOTAnalysis;
using AIStudio.Tools.AssistantSessions;
namespace AIStudio.Tests.Assistants.SWOTAnalysis;
[TestFixture]
public sealed class SwotAnalysisSessionStateTests
{
[Test]
public void TheStructuredResultSurvivesAnAssistantSessionSnapshot()
{
var key = new AssistantSessionStateKey<SwotAnalysisResult?>("analysisResult");
var writer = new AssistantSessionStateWriter();
writer.Set(key, new SwotAnalysisResult
{
MatrixHeading = "SWOT Matrix",
Strengths = new() { Findings = [Finding()] },
});
SwotAnalysisResult? restored = null;
var reader = new AssistantSessionStateReader(writer.ToDictionary(), "SWOT Analysis");
reader.Restore(key, value => restored = value);
Assert.Multiple(() =>
{
Assert.That(restored, Is.Not.Null);
Assert.That(restored!.MatrixHeading, Is.EqualTo("SWOT Matrix"));
Assert.That(restored.Strengths.Findings.Single().Summary, Is.EqualTo("Experienced team"));
});
}
[Test]
public void CategoryProgressSurvivesAnAssistantSessionSnapshot()
{
var key = new AssistantSessionStateKey<Dictionary<SwotAnalysisCategory, SwotCategoryAnalysisProgress>>("categoryAnalysisProgress");
var writer = new AssistantSessionStateWriter();
writer.SetDictionary(key, new Dictionary<SwotAnalysisCategory, SwotCategoryAnalysisProgress>
{
[SwotAnalysisCategory.STRENGTHS] = new(SwotCategoryAnalysisStatus.COMPLETED, new SwotCategoryAnalysisResult { Findings = [Finding()] }),
[SwotAnalysisCategory.WEAKNESSES] = new(SwotCategoryAnalysisStatus.RUNNING),
});
Dictionary<SwotAnalysisCategory, SwotCategoryAnalysisProgress> restored = [];
var reader = new AssistantSessionStateReader(writer.ToDictionary(), "SWOT Analysis");
reader.RestoreDictionary(key, restored);
Assert.Multiple(() =>
{
Assert.That(restored[SwotAnalysisCategory.STRENGTHS].Status, Is.EqualTo(SwotCategoryAnalysisStatus.COMPLETED));
Assert.That(restored[SwotAnalysisCategory.STRENGTHS].Result!.Findings.Single().Summary, Is.EqualTo("Experienced team"));
Assert.That(restored[SwotAnalysisCategory.WEAKNESSES].Status, Is.EqualTo(SwotCategoryAnalysisStatus.RUNNING));
});
}
private static SwotFinding Finding() => new()
{
Summary = "Experienced team",
Explanation = "The documents describe long employee tenure.",
};
}