using System.Security.Claims; using System.Text; using JobTrackerApi.Controllers; using JobTrackerApi.Models; using JobTrackerApi.Services; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Moq; using Xunit; namespace JobTrackerApi.Tests; public sealed class ProfileCvControllerTests { [Fact] public async Task Upload_rejects_unsupported_extension() { var user = new ApplicationUser(); var userManager = CreateUserManager(); userManager.Setup(x => x.GetUserAsync(It.IsAny())).ReturnsAsync(user); var controller = new ProfileCvController(userManager.Object) { ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext() } }; var file = new FormFile(new MemoryStream(Encoding.UTF8.GetBytes("hello")), 0, 5, "file", "resume.exe"); var result = await controller.Upload(file); var badRequest = Assert.IsType(result); Assert.Contains("supported", StringComparison.OrdinalIgnoreCase, badRequest.Value?.ToString()); } [Fact] public async Task Upload_accepts_markdown_cv_and_saves_text() { var user = new ApplicationUser(); var userManager = CreateUserManager(); userManager.Setup(x => x.GetUserAsync(It.IsAny())).ReturnsAsync(user); userManager.Setup(x => x.UpdateAsync(user)).ReturnsAsync(IdentityResult.Success); var controller = new ProfileCvController(userManager.Object) { ControllerContext = new ControllerContext { HttpContext = new DefaultHttpContext() } }; var file = new FormFile(new MemoryStream(Encoding.UTF8.GetBytes("# CV\nBuilt APIs and UIs")), 0, 23, "file", "resume.md"); var result = await controller.Upload(file); Assert.IsType(result); Assert.Contains("Built APIs", user.ProfileCvText); } private static Mock> CreateUserManager() { var store = new Mock>(); return new Mock>( store.Object, Options.Create(new IdentityOptions()), new PasswordHasher(), Array.Empty>(), Array.Empty>(), new UpperInvariantLookupNormalizer(), new IdentityErrorDescriber(), null!, new NullLogger>() ); } }