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.
89 lines
2.7 KiB
C#
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);
|
|
}
|
|
}
|