faturas_4docs/Download Faturas.Tests/FaturaIntegrationTests.cs
Giuliano Paschoalino 03d40713af chore:
- Teste FaturaIntegrationTests para verificar divergências entre o novo e o velho método "Faturas"

- FaturaOld adicionada para fazer parte dos testes

- XUnit intalado em Download Faturas.Tests para testes

- divergencias.csv gerado para retornar os resultados

- 4Docs_2025_07.csv como entrada para testar as requisições
2025-07-10 17:41:58 -03:00

146 lines
7.1 KiB
C#

using System.Data.OleDb;
using System.Numerics;
using System.Text.Json;
using Download_Faturas;
namespace Download_Faturas1.Tests
{
public class FaturaIntegrationTests
{
private const string Token = "UFY4VWzqcHYcGNd0gkBOMFL9G5ZThV6gXBQIJ79F5HSqITzavz4Fe7iXvAbJLvZJ";
private static readonly HttpClient httpClient = new HttpClient();
[Fact]
public async Task CompareFaturaWithFaturaOld_ShouldReportDifferences()
{
// Sample fatura IDs to test (replace with real IDs or fetch dynamically)
var faturaIds = LoadCsvColumn("../../../../Download Faturas.Tests/4Docs_2025_07.csv", 0);
var differences = new List<string>();
differences.Add($"FaturaId\tDistribuidora\toldConsumo_P\tnewConsumo_P\toldConsumo_FP\tnewConsumo_FP\toldDem_Reg_P\tnewDem_Reg_P\toldDem_Reg_FP\tnewDem_Reg_FP\toldEn_Reativa_Mvarh\tnewEn_Reativa_Mvarh");
using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=X:/Middle/Informativo Setorial/Modelo Word/BD1_Testes.accdb;Jet OLEDB:Database Password=gds21"))
{
// Open the connection to the test database
conn.Open();
foreach (var faturaId in faturaIds)
{
// Retrieve fatura JSON from 4Docs API
var request = new HttpRequestMessage(HttpMethod.Get, $"https://api.4docs.cloud/v2/request/status?id={faturaId}");
request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {Token}");
var response = await httpClient.SendAsync(request);
if (!response.IsSuccessStatusCode) continue;
var json = await response.Content.ReadAsStringAsync();
var faturaParsed = JsonDocument.Parse(json).RootElement;
int? pagina;
// Process with old logic (FaturaOld)
var faturaOld = new FaturaOld(faturaId, faturaParsed);
// Process with new logic (Fatura)
var fatura = new Fatura(faturaId, faturaParsed);
faturaOld.Processar(conn); // This will write to DB, but we want to compare without writing
var oldVal = GetDadosTusd(conn, faturaOld.cod_tusd);
DeleteTusdRecords(conn, faturaOld.cod_tusd); // Delete old TUSD records before processing
fatura.Processar(conn); // This will also write to DB, but we want to compare without writing
var newVal = GetDadosTusd(conn, fatura.cod_tusd);
DeleteTusdRecords(conn, fatura.cod_tusd); // Delete old TUSD records before processing
if (!string.Equals(newVal, oldVal))
{
differences.Add($"{faturaId}\t{oldVal.Distribuidora}\t{oldVal.Consumo_P}\t{newVal.Consumo_P}\t{oldVal.Consumo_FP}\t{newVal.Consumo_FP}\t{oldVal.Dem_Reg_P}\t{newVal.Dem_Reg_P}\t{oldVal.Dem_Reg_FP}\t{newVal.Dem_Reg_FP}\t{oldVal.En_Reativa_Mvarh}\t{newVal.En_Reativa_Mvarh}");
}
}
}
if (differences.Count > 1)
{
WriteCsv("../../../../Download Faturas.Tests/divergencias.csv", differences);
}
Assert.True(differences.Count == 0, $"Differences found between Fatura and FaturaOld:\n{string.Join("\n", differences)}");
}
void DeleteTusdRecords(OleDbConnection conn, double codTusd)
{
// Deletes TUSD records based on cod_tusd
string sqlQuery = "DELETE FROM Dados_TUSD WHERE Cod_TUSD = ?";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("?", codTusd);
cmd.ExecuteNonQuery();
}
}
RecordSet GetDadosTusd(OleDbConnection conn, double codTusd)
{
RecordSet dadosTusd = new RecordSet();
// Retrieves TUSD records based on cod_tusd
string sqlQuery = "SELECT * FROM Dados_TUSD WHERE Cod_TUSD = ?";
using (OleDbCommand cmd = new OleDbCommand(sqlQuery, conn))
{
cmd.Parameters.AddWithValue("?", codTusd);
using (OleDbDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// Dados Tusd
;
dadosTusd.Cod_TUSD = double.Parse(reader["Cod_TUSD"].ToString());
dadosTusd.Mes = int.Parse(reader["Mes"].ToString());
dadosTusd.Distribuidora = reader["Distribuidora"].ToString();
dadosTusd.Grupo = reader["Grupo"].ToString();
dadosTusd.Perfil = reader["Perfil"].ToString();
dadosTusd.Inicio_Leitura = DateTime.Parse(reader["Inicio_Leitura"].ToString());
dadosTusd.Fim_leitura = DateTime.Parse(reader["Fim_leitura"].ToString());
dadosTusd.Valor = float.Parse(reader["Valor"].ToString());
dadosTusd.Consumo_P = float.Parse(reader["Consumo_P"].ToString());
dadosTusd.Consumo_FP = float.Parse(reader["Consumo_FP"].ToString());
dadosTusd.Dem_Reg_P = float.Parse(reader["Dem_Reg_P"].ToString());
dadosTusd.Dem_Reg_FP = float.Parse(reader["Dem_Reg_FP"].ToString());
dadosTusd.Dem_Cont_P = float.Parse(reader["Dem_Cont_P"].ToString());
dadosTusd.Dem_Cont_FP = float.Parse(reader["Dem_Cont_FP"].ToString());
dadosTusd.En_Reativa_Mvarh = float.Parse(reader["En_Reativa_Mvarh"].ToString());
dadosTusd.Dem_Reativa_kvar = float.Parse(reader["Dem_Reativa_kvar"].ToString());
}
}
}
return dadosTusd;
}
//load csv column
List<string> LoadCsvColumn(string filePath, int columnIndex)
{
var columnData = new List<string>();
using (var reader = new StreamReader(filePath))
{
while (!reader.EndOfStream)
{
// skip first line (header)
reader.ReadLine();
var line = reader.ReadLine();
if (line != null)
{
var values = line.Split('\t');
if (values.Length > columnIndex && values[3] == "\"API\"")
{
columnData.Add(values[columnIndex].Replace("\"", "").Trim());
}
}
}
}
return columnData;
}
//write data to csv
void WriteCsv(string filePath, List<string> data)
{
using (var writer = new StreamWriter(filePath))
{
foreach (var item in data)
{
writer.WriteLine(item);
}
}
}
}
}