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())).ReturnsAsync(authenticated ? user : null); var packages = new Mock(); packages.Setup(x => x.CaptureAsync("owner", 7, It.IsAny(), It.IsAny())) .ThrowsAsync(new DbUpdateConcurrencyException("CV changed")); var controller = new ApplicationAssetsController(users.Object, Mock.Of(), packages.Object) { ControllerContext = new() { HttpContext = new DefaultHttpContext() } }; var result = await controller.CaptureSubmittedPackage(7, default); if (authenticated) { var conflict = Assert.IsType(result.Result); Assert.Equal("revision_conflict", JsonSerializer.SerializeToElement(conflict.Value).GetProperty("code").GetString()); } else { Assert.IsType(result.Result); packages.Verify(x => x.CaptureAsync(It.IsAny(), It.IsAny(), It.IsAny(), It.IsAny()), Times.Never); } } }