Files
jobtrackingapp/JobTrackerApi.Tests/SubmittedPackageConflictTests.cs
T

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