using System.Net; using Microsoft.AspNetCore.Mvc.Testing; namespace CartWise.Web.Tests; public class ScanAndBarcodeTests : IClassFixture { private readonly CartWiseWebApplicationFactory _factory; public ScanAndBarcodeTests(CartWiseWebApplicationFactory factory) { _factory = factory; } [Fact] public async Task AnonymousUser_IsRedirectedToLoginWhenRequestingScanPage() { var client = _factory.CreateClient(new WebApplicationFactoryClientOptions { AllowAutoRedirect = false }); var response = await client.GetAsync("/scan"); Assert.Equal(HttpStatusCode.Redirect, response.StatusCode); Assert.Contains("/Account/Login", response.Headers.Location?.ToString()); } [Fact] public async Task AuthenticatedUser_CanReachScanPage() { var client = _factory.CreateClient(); await WebTestHelpers.RegisterAsync(client, "scanuser1@example.com", "Scan User"); var response = await client.GetAsync("/scan"); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); HtmlAssert.Contains("Scan a barcode", body); } [Fact] public async Task BarcodeHtmlRoute_ReturnsNotFoundForUnknownBarcode() { var client = _factory.CreateClient(); await WebTestHelpers.RegisterAsync(client, "scanuser2@example.com", "Scan User 2"); var response = await client.GetAsync("/products/barcode/000000000000"); Assert.Equal(HttpStatusCode.NotFound, response.StatusCode); } [Fact] public async Task BarcodeJsonRoute_ReturnsFoundFalseForUnknownBarcode() { var client = _factory.CreateClient(); await WebTestHelpers.RegisterAsync(client, "scanuser3@example.com", "Scan User 3"); var response = await client.GetAsync("/api/products/barcode/000000000000"); response.EnsureSuccessStatusCode(); var body = await response.Content.ReadAsStringAsync(); Assert.Contains("\"found\":false", body); } }