line-gestao-api/line-gestao-api.Tests/GeralDashboardInsightsServi...

117 lines
3.7 KiB
C#

using line_gestao_api.Data;
using line_gestao_api.Models;
using line_gestao_api.Services;
using Microsoft.EntityFrameworkCore;
using Xunit;
namespace line_gestao_api.Tests
{
public class GeralDashboardInsightsServiceTests
{
[Fact]
public async Task GetInsightsAsync_ReturnsZerosWhenNoLines()
{
var tenantId = Guid.NewGuid();
var provider = new TestTenantProvider(tenantId);
var db = BuildContext(provider);
var service = new GeralDashboardInsightsService(db);
var result = await service.GetInsightsAsync();
Assert.NotNull(result);
Assert.Equal(0, result.Kpis.TotalLinhas);
Assert.Equal(0, result.Kpis.Vivo.QtdLinhas);
Assert.NotNull(result.Charts.LinhasPorFranquia);
Assert.NotNull(result.ClientGroups);
}
[Fact]
public async Task GetInsightsAsync_RespectsTenantIsolation()
{
var tenantA = Guid.NewGuid();
var tenantB = Guid.NewGuid();
var provider = new TestTenantProvider(tenantA);
var db = BuildContext(provider);
db.MobileLines.AddRange(
new MobileLine
{
TenantId = tenantA,
Cliente = "Cliente A",
Status = "Ativo",
ValorPlanoVivo = 100m,
GestaoVozDados = 10m
},
new MobileLine
{
TenantId = tenantB,
Cliente = "Cliente B",
Status = "Ativo",
ValorPlanoVivo = 200m,
GestaoVozDados = 20m
});
await db.SaveChangesAsync();
var service = new GeralDashboardInsightsService(db);
var result = await service.GetInsightsAsync();
Assert.Equal(1, result.Kpis.TotalLinhas);
Assert.Equal(1, result.Kpis.Vivo.QtdLinhas);
Assert.Equal("Cliente A", result.ClientGroups.Single().Cliente);
}
[Fact]
public async Task GetInsightsAsync_ReturnsNonNullCollections()
{
var tenantId = Guid.NewGuid();
var provider = new TestTenantProvider(tenantId);
var db = BuildContext(provider);
db.MobileLines.Add(new MobileLine
{
TenantId = tenantId,
Cliente = "Cliente X",
Status = "Ativo",
ValorPlanoVivo = 120m,
Skeelo = 5m,
VivoTravelMundo = 0m
});
await db.SaveChangesAsync();
var service = new GeralDashboardInsightsService(db);
var result = await service.GetInsightsAsync();
Assert.NotNull(result.Kpis.Adicionais.ServicesPaid);
Assert.NotNull(result.Kpis.Adicionais.ServicesNotPaid);
Assert.NotEmpty(result.ClientGroups);
Assert.NotEmpty(result.Charts.AdicionaisPagosPorServico.Labels);
}
private static AppDbContext BuildContext(TestTenantProvider provider)
{
var options = new DbContextOptionsBuilder<AppDbContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
return new AppDbContext(options, provider);
}
private sealed class TestTenantProvider : ITenantProvider
{
public TestTenantProvider(Guid tenantId)
{
TenantId = tenantId;
}
public Guid? TenantId { get; private set; }
public void SetTenantId(Guid? tenantId)
{
TenantId = tenantId;
}
}
}
}