Files
Hy2026/tests/TarninaHub.Tests/Controllers/SubmissionsControllerTests.cs
T
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

89 lines
2.7 KiB
C#

using System.Security.Claims;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using TarninaHub.Application.Abstractions;
using TarninaHub.Application.Dtos;
using TarninaHub.Controllers;
using TarninaHub.Tests.Matchmaking;
using TarninaHub.Tests.Stubs;
namespace TarninaHub.Tests.Controllers;
public class SubmissionsControllerTests
{
private static SubmissionsController CreateController(ISubmissionService service, string role = "operator")
{
var controller = new SubmissionsController(
service,
new StubMatchmakingService(),
new StubNotificationService());
var identity = new ClaimsIdentity(
[new Claim("sub", "user:tester"), new Claim("role", role)],
authenticationType: "test");
controller.ControllerContext = new ControllerContext
{
HttpContext = new DefaultHttpContext { User = new ClaimsPrincipal(identity) },
};
return controller;
}
private static SubmissionResponse SampleSubmission(string status) => new(
"submission:abc",
"problem:xyz",
"Title",
"Description",
"social_challenge:seniorzy",
"location:krakow",
"user:tester",
status,
["seniorzy"],
DateTimeOffset.UtcNow,
null);
[Fact]
public async Task UpdateStatus_RejectsInvalidTransition()
{
var service = new StubSubmissionService { Current = SampleSubmission("new") };
var controller = CreateController(service);
var result = await controller.UpdateStatus(
"submission:abc",
new UpdateSubmissionStatusRequest("matched"),
CancellationToken.None);
Assert.IsType<ObjectResult>(result.Result);
Assert.Null(service.LastRequestedStatus);
}
[Fact]
public async Task UpdateStatus_AcceptsValidTransition()
{
var service = new StubSubmissionService
{
Current = SampleSubmission("new"),
UpdateResult = SampleSubmission("triaged"),
};
var controller = CreateController(service);
var result = await controller.UpdateStatus(
"submission:abc",
new UpdateSubmissionStatusRequest("triaged"),
CancellationToken.None);
Assert.IsType<OkObjectResult>(result.Result);
Assert.Equal("triaged", service.LastRequestedStatus);
}
[Fact]
public async Task GetById_ReturnsNotFoundWhenMissing()
{
var controller = CreateController(new StubSubmissionService());
var result = await controller.GetById("submission:missing", CancellationToken.None);
Assert.IsType<NotFoundResult>(result.Result);
}
}