189 lines
6.7 KiB
C#
189 lines
6.7 KiB
C#
using line_gestao_api.Controllers;
|
|
using line_gestao_api.Data;
|
|
using line_gestao_api.Dtos;
|
|
using line_gestao_api.Models;
|
|
using line_gestao_api.Services;
|
|
using Microsoft.AspNetCore.Hosting;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.FileProviders;
|
|
using Xunit;
|
|
|
|
namespace line_gestao_api.Tests
|
|
{
|
|
public class LinesControllerTests
|
|
{
|
|
[Fact]
|
|
public async Task GetAll_WithAssignedReservaInAll_IncludesAssignedReserveAndExcludesStock()
|
|
{
|
|
var tenantId = Guid.NewGuid();
|
|
var provider = new TestTenantProvider(tenantId);
|
|
await using var db = BuildContext(provider);
|
|
|
|
db.MobileLines.AddRange(
|
|
new MobileLine
|
|
{
|
|
TenantId = tenantId,
|
|
Item = 1,
|
|
Cliente = "CLIENTE A",
|
|
Usuario = "USUARIO A",
|
|
Skil = "PESSOA JURIDICA",
|
|
Linha = "11111111111",
|
|
Status = "ATIVO"
|
|
},
|
|
new MobileLine
|
|
{
|
|
TenantId = tenantId,
|
|
Item = 2,
|
|
Cliente = "AVANCO DISTRIBUIDORA",
|
|
Usuario = "RESERVA",
|
|
Skil = "RESERVA",
|
|
Linha = "22222222222",
|
|
Status = "ATIVO"
|
|
},
|
|
new MobileLine
|
|
{
|
|
TenantId = tenantId,
|
|
Item = 3,
|
|
Cliente = "RESERVA",
|
|
Usuario = "RESERVA",
|
|
Skil = "RESERVA",
|
|
Linha = "33333333333",
|
|
Status = "ATIVO"
|
|
});
|
|
|
|
await db.SaveChangesAsync();
|
|
|
|
var controller = CreateController(db, provider);
|
|
var result = await controller.GetAll(includeAssignedReservaInAll: true, pageSize: 50);
|
|
|
|
var ok = Assert.IsType<OkObjectResult>(result.Result);
|
|
var payload = Assert.IsType<PagedResult<MobileLineListDto>>(ok.Value);
|
|
|
|
Assert.Equal(2, payload.Total);
|
|
Assert.Contains(payload.Items, x => x.Linha == "11111111111");
|
|
Assert.Contains(payload.Items, x => x.Linha == "22222222222");
|
|
Assert.DoesNotContain(payload.Items, x => x.Linha == "33333333333");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task GetAll_WithoutAssignedReservaInAll_KeepsAssignedReserveOutOfAll()
|
|
{
|
|
var tenantId = Guid.NewGuid();
|
|
var provider = new TestTenantProvider(tenantId);
|
|
await using var db = BuildContext(provider);
|
|
|
|
db.MobileLines.AddRange(
|
|
new MobileLine
|
|
{
|
|
TenantId = tenantId,
|
|
Item = 1,
|
|
Cliente = "CLIENTE A",
|
|
Usuario = "USUARIO A",
|
|
Skil = "PESSOA JURIDICA",
|
|
Linha = "11111111111",
|
|
Status = "ATIVO"
|
|
},
|
|
new MobileLine
|
|
{
|
|
TenantId = tenantId,
|
|
Item = 2,
|
|
Cliente = "AVANCO DISTRIBUIDORA",
|
|
Usuario = "RESERVA",
|
|
Skil = "RESERVA",
|
|
Linha = "22222222222",
|
|
Status = "ATIVO"
|
|
},
|
|
new MobileLine
|
|
{
|
|
TenantId = tenantId,
|
|
Item = 3,
|
|
Cliente = "RESERVA",
|
|
Usuario = "RESERVA",
|
|
Skil = "RESERVA",
|
|
Linha = "33333333333",
|
|
Status = "ATIVO"
|
|
});
|
|
|
|
await db.SaveChangesAsync();
|
|
|
|
var controller = CreateController(db, provider);
|
|
var result = await controller.GetAll(pageSize: 50);
|
|
|
|
var ok = Assert.IsType<OkObjectResult>(result.Result);
|
|
var payload = Assert.IsType<PagedResult<MobileLineListDto>>(ok.Value);
|
|
|
|
Assert.Single(payload.Items);
|
|
Assert.Equal(1, payload.Total);
|
|
Assert.Contains(payload.Items, x => x.Linha == "11111111111");
|
|
Assert.DoesNotContain(payload.Items, x => x.Linha == "22222222222");
|
|
Assert.DoesNotContain(payload.Items, x => x.Linha == "33333333333");
|
|
}
|
|
|
|
private static AppDbContext BuildContext(TestTenantProvider provider)
|
|
{
|
|
var options = new DbContextOptionsBuilder<AppDbContext>()
|
|
.UseInMemoryDatabase(Guid.NewGuid().ToString())
|
|
.Options;
|
|
|
|
return new AppDbContext(options, provider, new NullAuditLogBuilder());
|
|
}
|
|
|
|
private static LinesController CreateController(AppDbContext db, TestTenantProvider provider)
|
|
{
|
|
return new LinesController(
|
|
db,
|
|
provider,
|
|
new NullVigenciaNotificationSyncService(),
|
|
null!,
|
|
null!,
|
|
null!,
|
|
new TestWebHostEnvironment());
|
|
}
|
|
|
|
private sealed class TestTenantProvider : ITenantProvider
|
|
{
|
|
public TestTenantProvider(Guid tenantId)
|
|
{
|
|
TenantId = tenantId;
|
|
}
|
|
|
|
public Guid? ActorTenantId => TenantId;
|
|
|
|
public Guid? TenantId { get; private set; }
|
|
|
|
public bool HasGlobalViewAccess => false;
|
|
|
|
public void SetTenantId(Guid? tenantId)
|
|
{
|
|
TenantId = tenantId;
|
|
}
|
|
}
|
|
|
|
private sealed class NullAuditLogBuilder : IAuditLogBuilder
|
|
{
|
|
public List<AuditLog> BuildAuditLogs(Microsoft.EntityFrameworkCore.ChangeTracking.ChangeTracker changeTracker)
|
|
{
|
|
return new List<AuditLog>();
|
|
}
|
|
}
|
|
|
|
private sealed class NullVigenciaNotificationSyncService : IVigenciaNotificationSyncService
|
|
{
|
|
public Task SyncCurrentTenantAsync(CancellationToken cancellationToken = default) => Task.CompletedTask;
|
|
|
|
public Task SyncTenantAsync(Guid tenantId, CancellationToken cancellationToken = default) => Task.CompletedTask;
|
|
}
|
|
|
|
private sealed class TestWebHostEnvironment : IWebHostEnvironment
|
|
{
|
|
public string EnvironmentName { get; set; } = "Tests";
|
|
public string ApplicationName { get; set; } = "line-gestao-api.Tests";
|
|
public string WebRootPath { get; set; } = Path.GetTempPath();
|
|
public IFileProvider WebRootFileProvider { get; set; } = new NullFileProvider();
|
|
public string ContentRootPath { get; set; } = Path.GetTempPath();
|
|
public IFileProvider ContentRootFileProvider { get; set; } = new NullFileProvider();
|
|
}
|
|
}
|
|
}
|