Files
Rafał Tyński cca20a9965 test(backend): cover step 17 modules and extract stubs
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.
2026-10-04 03:49:51 +02:00

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);
}
}