Ejemplo n.º 1
0
        public CostCommand(ITariffSource source)
        {
            Spec = CommandSpec.Named(
                "cost",
                new[] { "POWER_USAGE_KWH", "GAS_USAGE_KWH" },
                ctx =>
            {
                // model 0's explicitly as no fuel supply for that type
                var p        = ctx.GetRequiredDecimal("POWER_USAGE_KWH");
                var powerKwh = p == 0 ? new Kwh <Power>?() : new Kwh <Power>(p);

                var g      = ctx.GetRequiredDecimal("GAS_USAGE_KWH");
                var gasKwh = g == 0 ? new Kwh <Gas>?() : new Kwh <Gas>(g);

                // calculate the costs and output
                foreach (var line in FuelCalculator
                         .CostsPerTariff(source.GetAll(), powerKwh, gasKwh)
                         .Select(cost => $"{cost.Tariff.Name} {cost.Total.PostTax:F2}"))
                {
                    ctx.Output.WriteLine(line);
                }

                return(Commands.Ok());
            });
        }
Ejemplo n.º 2
0
        public void CostsPerTariff_PowerNotInTariff_ReturnsCosts()
        {
            // Arrange
            var tariff = new Tariff("test", null, 3m, 4m);

            // Act
            var actual = FuelCalculator.CostsPerTariff(new[] { tariff }, null, new Kwh <Gas>(2000)).ToList();

            // Assert
            actual.Should().HaveCount(1);
            var actualCost = actual.First();

            actualCost.Tariff.Should().Be(tariff);
            actualCost.Total.PostTax.Should().Be(((4 * 12) + (2000 * 3)) * 1.05M);
        }
Ejemplo n.º 3
0
        public void CostsPerTariff_GasNotInTariff_TariffIgnored()
        {
            // Arrange
            var tariff  = new Tariff("test", 2m, 3m, 4m);
            var tariff2 = new Tariff("test2", 4m, null, 8m);

            // Act
            var actual = FuelCalculator.CostsPerTariff(new[] { tariff, tariff2 }, new Kwh <Power>(1000), new Kwh <Gas>(2000)).ToList();

            // Assert
            actual.Should().HaveCount(1);
            var actualCost = actual.First();

            actualCost.Tariff.Should().Be(tariff);
            actualCost.Total.PostTax.Should().Be(((4 * 12) + (1000 * 2) + (4 * 12) + (2000 * 3)) * 1.05M);
        }
Ejemplo n.º 4
0
        public void CostsPerTariff_PowerUsageNotSupplied_ReturnsCostsForValidTariffs()
        {
            // Arrange
            var tariff1 = new Tariff("test1", 2m, null, 4m);
            var tariff2 = new Tariff("test2", 4m, 6m, 8m);

            // Act
            var actual = FuelCalculator.CostsPerTariff(new[] { tariff1, tariff2 }, null, new Kwh <Gas>(2000)).ToList();

            // Assert
            actual.Should().HaveCount(1);
            var actualCost = actual.First();

            actualCost.Tariff.Should().Be(tariff2);
            actualCost.Total.PostTax.Should().Be(((8 * 12) + (2000 * 6)) * 1.05M);
        }
Ejemplo n.º 5
0
        public void CostsPerTariff_AllFuelTypesSupported_ReturnsCostsInOrder()
        {
            // Arrange
            var tariff1 = new Tariff("test1", 2m, 3m, 4m);
            var tariff2 = new Tariff("test2", 4m, 6m, 8m);

            // Act
            var actual = FuelCalculator.CostsPerTariff(new[] { tariff1, tariff2 }, new Kwh <Power>(1000), new Kwh <Gas>(2000)).ToList();

            // Assert
            actual.Should().HaveCount(2);
            var actualCost = actual.First();

            actualCost.Tariff.Should().Be(tariff1);
            actualCost.Total.PostTax.Should().Be(((4 * 12) + (1000 * 2) + (4 * 12) + (2000 * 3)) * 1.05M);

            actual.ElementAt(1).Tariff.Should().Be(tariff2);
        }