Add tests for partnership workflow, middleman adaptation and idea notifications; extract reusable test stubs into separate files; add architecture guard forbidding object-valued dictionaries in data contracts.
63 lines
1.9 KiB
C#
63 lines
1.9 KiB
C#
using TarninaHub.Application.Abstractions;
|
|
using TarninaHub.Application.Dtos;
|
|
using TarninaHub.Application.Matchmaking;
|
|
using TarninaHub.Infrastructure.Assist;
|
|
using TarninaHub.Infrastructure.Llm;
|
|
using TarninaHub.Tests.Stubs;
|
|
|
|
namespace TarninaHub.Tests.Infrastructure;
|
|
|
|
public class MiddlemanAssistantTests
|
|
{
|
|
private static InnovationResponse SampleInnovation() => new(
|
|
"innovation:klub",
|
|
"Klub sąsiedzki",
|
|
"Miejsce spotkań i edukacji cyfrowej",
|
|
"Opis",
|
|
"social_challenge:seniorzy",
|
|
"pilot",
|
|
"5000 PLN",
|
|
null,
|
|
[],
|
|
true,
|
|
DateTimeOffset.UtcNow);
|
|
|
|
private static MiddlemanAssistant CreateAssistant(InnovationResponse? innovation) =>
|
|
new(
|
|
new StubInnovationLookup(innovation),
|
|
new NullLlmProvider(),
|
|
new InMemoryLlmRequestLimiter(30));
|
|
|
|
[Fact]
|
|
public async Task AdaptAsync_ReturnsNullWhenInnovationMissing()
|
|
{
|
|
var assistant = CreateAssistant(null);
|
|
|
|
var result = await assistant.AdaptAsync(
|
|
new MiddlemanRequest("innovation:missing", null, null),
|
|
CancellationToken.None);
|
|
|
|
Assert.Null(result);
|
|
}
|
|
|
|
[Fact]
|
|
public async Task AdaptAsync_BuildsOfflineServiceForm()
|
|
{
|
|
var assistant = CreateAssistant(SampleInnovation());
|
|
|
|
var result = await assistant.AdaptAsync(
|
|
new MiddlemanRequest(
|
|
"innovation:klub",
|
|
new InstitutionProfile("gmina", "usługi opiekuńcze", ["seniorzy"]),
|
|
"opieka dzienna"),
|
|
CancellationToken.None);
|
|
|
|
Assert.NotNull(result);
|
|
Assert.False(result!.FromLlm);
|
|
Assert.Contains("Klub sąsiedzki", result.ServiceForm);
|
|
Assert.Contains("seniorzy", result.ServiceForm);
|
|
Assert.NotEmpty(result.RequiredResources);
|
|
Assert.NotEmpty(result.Rationale);
|
|
}
|
|
}
|