|
|
|
|
@@ -18,7 +18,7 @@ public class RubroTreeBuilderTests
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Build_empty_returns_empty_list()
|
|
|
|
|
{
|
|
|
|
|
var result = RubroTreeBuilder.Build([], incluirInactivos: false);
|
|
|
|
|
var result = RubroTreeBuilder.Build([], incluirInactivos: false, new Dictionary<int, int>());
|
|
|
|
|
|
|
|
|
|
result.Should().BeEmpty();
|
|
|
|
|
}
|
|
|
|
|
@@ -30,7 +30,7 @@ public class RubroTreeBuilderTests
|
|
|
|
|
{
|
|
|
|
|
var rubros = new[] { MakeRubro(1, null, "Autos", 0) };
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false);
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, new Dictionary<int, int>());
|
|
|
|
|
|
|
|
|
|
result.Should().HaveCount(1);
|
|
|
|
|
result[0].Id.Should().Be(1);
|
|
|
|
|
@@ -50,7 +50,7 @@ public class RubroTreeBuilderTests
|
|
|
|
|
MakeRubro(2, null, "Camiones", 1)
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false);
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, new Dictionary<int, int>());
|
|
|
|
|
|
|
|
|
|
result.Should().HaveCount(3);
|
|
|
|
|
result[0].Id.Should().Be(1); // Orden=0
|
|
|
|
|
@@ -70,7 +70,7 @@ public class RubroTreeBuilderTests
|
|
|
|
|
MakeRubro(3, 2, "Compactos", 0),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false);
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, new Dictionary<int, int>());
|
|
|
|
|
|
|
|
|
|
result.Should().HaveCount(1);
|
|
|
|
|
result[0].Id.Should().Be(1);
|
|
|
|
|
@@ -91,7 +91,7 @@ public class RubroTreeBuilderTests
|
|
|
|
|
MakeRubro(2, null, "Motos", 1, activo: false),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false);
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, new Dictionary<int, int>());
|
|
|
|
|
|
|
|
|
|
result.Should().HaveCount(1);
|
|
|
|
|
result[0].Id.Should().Be(1);
|
|
|
|
|
@@ -106,7 +106,7 @@ public class RubroTreeBuilderTests
|
|
|
|
|
MakeRubro(2, null, "Motos", 1, activo: false),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: true);
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: true, new Dictionary<int, int>());
|
|
|
|
|
|
|
|
|
|
result.Should().HaveCount(2);
|
|
|
|
|
}
|
|
|
|
|
@@ -125,7 +125,7 @@ public class RubroTreeBuilderTests
|
|
|
|
|
MakeRubro(5, 1, "A", 0),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false);
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, new Dictionary<int, int>());
|
|
|
|
|
|
|
|
|
|
var hijos = result[0].Hijos;
|
|
|
|
|
hijos.Should().HaveCount(4);
|
|
|
|
|
@@ -135,6 +135,47 @@ public class RubroTreeBuilderTests
|
|
|
|
|
hijos[3].Nombre.Should().Be("D"); // Orden=3
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ── TieneAvisos from avisoCounts dict ────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Build_SetsTieneAvisos_True_WhenCountGreaterThanZero()
|
|
|
|
|
{
|
|
|
|
|
var rubros = new[]
|
|
|
|
|
{
|
|
|
|
|
MakeRubro(1, null, "Autos", 0),
|
|
|
|
|
MakeRubro(2, null, "Motos", 1),
|
|
|
|
|
};
|
|
|
|
|
var avisoCounts = new Dictionary<int, int> { { 1, 2 }, { 2, 0 } };
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, avisoCounts);
|
|
|
|
|
|
|
|
|
|
result.Single(n => n.Id == 1).TieneAvisos.Should().BeTrue();
|
|
|
|
|
result.Single(n => n.Id == 2).TieneAvisos.Should().BeFalse();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Build_SetsTieneAvisos_False_WhenCountIsZero()
|
|
|
|
|
{
|
|
|
|
|
var rubros = new[] { MakeRubro(1, null, "Autos", 0) };
|
|
|
|
|
var avisoCounts = new Dictionary<int, int> { { 1, 0 } };
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, avisoCounts);
|
|
|
|
|
|
|
|
|
|
result[0].TieneAvisos.Should().BeFalse();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public void Build_SetsTieneAvisos_False_WhenIdMissingFromDict()
|
|
|
|
|
{
|
|
|
|
|
// Stub semantics: missing key = 0 = false
|
|
|
|
|
var rubros = new[] { MakeRubro(1, null, "Autos", 0) };
|
|
|
|
|
var avisoCounts = new Dictionary<int, int>(); // empty dict
|
|
|
|
|
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, avisoCounts);
|
|
|
|
|
|
|
|
|
|
result[0].TieneAvisos.Should().BeFalse();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ── O(n) perf smoke test ──────────────────────────────────────────────────
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
@@ -148,7 +189,7 @@ public class RubroTreeBuilderTests
|
|
|
|
|
rubros.Add(MakeRubro(i, 1, $"Child{i}", i - 2));
|
|
|
|
|
|
|
|
|
|
var sw = System.Diagnostics.Stopwatch.StartNew();
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false);
|
|
|
|
|
var result = RubroTreeBuilder.Build(rubros, incluirInactivos: false, new Dictionary<int, int>());
|
|
|
|
|
sw.Stop();
|
|
|
|
|
|
|
|
|
|
result.Should().HaveCount(1);
|
|
|
|
|
|