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.
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user