45 lines
1.8 KiB
C#
45 lines
1.8 KiB
C#
using System.Security.Claims;
|
|
using System.Text.Json;
|
|
using JobTrackerApi.Controllers;
|
|
using JobTrackerApi.Models;
|
|
using JobTrackerApi.Services;
|
|
using JobTrackerApi.Tests.TestSupport;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Moq;
|
|
using Xunit;
|
|
|
|
namespace JobTrackerApi.Tests;
|
|
|
|
public sealed class SubmittedPackageConflictTests
|
|
{
|
|
[Theory]
|
|
[InlineData(true)]
|
|
[InlineData(false)]
|
|
public async Task Capture_reports_revision_conflict_only_for_an_authenticated_caller(bool authenticated)
|
|
{
|
|
var user = new ApplicationUser { Id = "owner" };
|
|
var users = TestHostFactory.CreateUserManager(user);
|
|
users.Setup(x => x.GetUserAsync(It.IsAny<ClaimsPrincipal>())).ReturnsAsync(authenticated ? user : null);
|
|
var packages = new Mock<ISubmittedApplicationPackageService>();
|
|
packages.Setup(x => x.CaptureAsync("owner", 7, It.IsAny<CvRenderPerson>(), It.IsAny<CancellationToken>()))
|
|
.ThrowsAsync(new DbUpdateConcurrencyException("CV changed"));
|
|
var controller = new ApplicationAssetsController(users.Object, Mock.Of<IApplicationAssetsService>(), packages.Object)
|
|
{ ControllerContext = new() { HttpContext = new DefaultHttpContext() } };
|
|
|
|
var result = await controller.CaptureSubmittedPackage(7, default);
|
|
|
|
if (authenticated)
|
|
{
|
|
var conflict = Assert.IsType<ConflictObjectResult>(result.Result);
|
|
Assert.Equal("revision_conflict", JsonSerializer.SerializeToElement(conflict.Value).GetProperty("code").GetString());
|
|
}
|
|
else
|
|
{
|
|
Assert.IsType<UnauthorizedResult>(result.Result);
|
|
packages.Verify(x => x.CaptureAsync(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<CvRenderPerson>(), It.IsAny<CancellationToken>()), Times.Never);
|
|
}
|
|
}
|
|
}
|