Skip to content

Instantly share code, notes, and snippets.

@farukaf
Last active October 7, 2020 14:07
Show Gist options
  • Save farukaf/74d061f58203161e04d6b081573901ec to your computer and use it in GitHub Desktop.
Save farukaf/74d061f58203161e04d6b081573901ec to your computer and use it in GitHub Desktop.
Class and TestCases for Calc of the invoice next closing day
[TestClass]
public class UnitTestCalculoFechamentoFatura
{
[TestMethod]
[DataRow("2020-08-31", null, "2020-09-30")]
[DataRow("2020-10-31", "2020-11-30", "2020-12-31")]
[DataRow("2020-01-31", null, "2020-02-29")]
[DataRow("2020-12-31", "2021-01-31", "2021-02-28")]
[DataRow("2020-12-30", "2021-01-30", "2021-02-28")]
[DataRow("2020-12-30", "2021-02-28", "2021-03-30")]
[DataRow("2020-12-31", "2021-03-31", "2021-04-30")]
public void TestCalc(string criacaoContrato, string fechamentoUltimaFatura, string expected)
{
if (string.IsNullOrEmpty(criacaoContrato))
{
return;
}
//Arrange
var calc = new CalculoFechamentoFatura();
calc.DataCriacaoContrato = DateTime.Parse(criacaoContrato);
if (!string.IsNullOrEmpty(fechamentoUltimaFatura))
{
calc.DataFechamentoUltimaFatura = DateTime.Parse(fechamentoUltimaFatura);
}
var dtExpected = DateTime.Parse(expected);
//Act
var dtResult = calc.DataFechamentoProximaFatura();
System.Diagnostics.Debug.WriteLine("Resultado: " + dtResult);
//Assert
Assert.AreEqual(dtExpected, dtResult);
}
}
public class CalculoFechamentoFatura
{
/// <summary>
/// Data da Criação do Contrato com o Cliente
/// </summary>
public DateTime DataCriacaoContrato { get; set; }
/// <summary>
/// Data de Fechamento da Ultima Fatura (mês, dia e ano de referencia
/// </summary>
public DateTime? DataFechamentoUltimaFatura { get; set; }
public DateTime DataFechamentoProximaFatura()
{
if (DataFechamentoUltimaFatura != null)
{
var dt = DataFechamentoUltimaFatura.Value.AddMonths(1).Date;
if (DataCriacaoContrato.Day != dt.Day)
{
var lastDayOfMonth = new DateTime(dt.Year, dt.Month, 1).AddMonths(1).AddDays(-1).Day;
if (DataCriacaoContrato.Day <= lastDayOfMonth)
{
dt = new DateTime(dt.Year, dt.Month, DataCriacaoContrato.Day);
}
else
{
dt = new DateTime(dt.Year, dt.Month, lastDayOfMonth);
}
}
return dt;
}
else
{
return DataCriacaoContrato.AddMonths(1).Date;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment