using AyCode.Services.Nav; using AyCode.Services.Nav.Ekaer.Models; using FruitBank.Common; using FruitBank.Common.Entities; using FruitBankHybrid.Shared.Services.SignalRs; namespace FruitBankHybrid.Shared.Tests { [TestClass] public sealed class FruitBankEkaerTests { private FruitBankSignalRClient _signalRClient = null!; [TestInitialize] public void TestInit() { if (!FruitBankConstClient.BaseUrl.Contains("localhost:")) throw new Exception("NEM LOCALHOST-ON TESZTELÜNK!"); _signalRClient = TestSignalRClientFactory.Create(nameof(FruitBankEkaerTests)); } #region EkaerHistory / Create /// /// Backfill: minden meglévő szállítólevélre létrehozza az EkaerHistory rekordot (Pending, XML nélkül). /// A generálás a grid Generate gombjával, kézzel történik. Idempotens: újrafuttatva nem duplikál. /// [TestMethod] public async Task CreateEkaerHistoryForAllShippingDocumentsTest() { var shippingDocuments = await _signalRClient.GetShippingDocuments(); Assert.IsNotNull(shippingDocuments); Assert.IsNotEmpty(shippingDocuments); foreach (var shippingDocument in shippingDocuments) { var ekaerHistory = await _signalRClient.CreateEkaerHistory(shippingDocument.Id, false); Console.WriteLine($"doc#{shippingDocument.Id}: EkaerHistory Id: {(ekaerHistory == null ? "NULL VÁLASZ!" : ekaerHistory.Id.ToString())}; Status: {ekaerHistory?.Status}"); Assert.IsNotNull(ekaerHistory, $"shippingDocument.Id: {shippingDocument.Id}"); Assert.IsGreaterThan(0, ekaerHistory.Id, $"shippingDocument.Id: {shippingDocument.Id}"); Assert.AreEqual(shippingDocument.Id, ekaerHistory.ForeignKey); Assert.IsFalse(ekaerHistory.IsOutgoing); } // Idempotencia: a második hívás a meglévőt adja vissza, nem duplikál. var firstDocumentId = shippingDocuments[0].Id; var again = await _signalRClient.CreateEkaerHistory(firstDocumentId, false); var histories = await _signalRClient.GetEkaerHistoriesByForeignKey(firstDocumentId); Assert.IsNotNull(again); Assert.IsNotNull(histories); Assert.AreEqual(1, histories.Count(h => !h.IsOutgoing), $"Duplikált bejövő EkaerHistory; shippingDocumentId: {firstDocumentId}"); } #endregion EkaerHistory / Create #region EkaerHistory / Generate /// /// Backfill + teljes Generate-út teszt: minden meglévő szállítólevélre legenerálja az EKÁER XML-t /// (rekord upsert a szerveren), így a grid valós adatot kap és a Generate gomb útvonala tesztelt. /// //[TestMethod] //Kikommentezve: a generálás a grid Generate gombjával, kézzel történik — a teszt később még kelleni fog. public async Task GenerateEkaerXmlDocumentForAllShippingDocumentsTest() { var shippingDocuments = await _signalRClient.GetShippingDocuments(); Assert.IsNotNull(shippingDocuments); Assert.IsNotEmpty(shippingDocuments); foreach (var shippingDocument in shippingDocuments) { var ekaerHistory = await _signalRClient.GenerateEkaerXmlDocument(shippingDocument.Id, false); // A szerver által visszaadott állapot/hibalista logolása — az assertek ELŐTT, hogy hibánál is látsszon. Console.WriteLine($"doc#{shippingDocument.Id}: Status: {(ekaerHistory == null ? "NULL VÁLASZ!" : ekaerHistory.Status.ToString())}"); if (!string.IsNullOrWhiteSpace(ekaerHistory?.ErrorText)) Console.WriteLine($" ErrorText: {ekaerHistory.ErrorText}"); Assert.IsNotNull(ekaerHistory, $"shippingDocument.Id: {shippingDocument.Id}"); Assert.AreEqual(shippingDocument.Id, ekaerHistory.ForeignKey); Assert.IsFalse(ekaerHistory.IsOutgoing); Assert.IsFalse(string.IsNullOrWhiteSpace(ekaerHistory.XmlDoc), $"XmlDoc üres; shippingDocument.Id: {shippingDocument.Id}"); Assert.IsTrue(ekaerHistory.Status is EkaerStatus.Generated or EkaerStatus.ValidationError, $"Status: {ekaerHistory.Status}; shippingDocument.Id: {shippingDocument.Id}; ErrorText: {ekaerHistory.ErrorText}"); // A grid útvonala: az XmlDoc visszaolvasható tradeCard-dá. var tradeCard = NavXmlHelper.Deserialize(ekaerHistory.XmlDoc!); Assert.IsNotNull(tradeCard); Console.WriteLine($" items: {tradeCard.Items.Count}"); } } /// Idempotencia: az újragenerálás NEM duplikál — dokumentumonként egy bejövő rekord marad. //[TestMethod] //Kikommentezve: a generálás a grid Generate gombjával, kézzel történik — a teszt később még kelleni fog. public async Task GenerateEkaerXmlDocumentIsIdempotentTest() { var shippingDocuments = await _signalRClient.GetShippingDocuments(); Assert.IsNotNull(shippingDocuments); Assert.IsNotEmpty(shippingDocuments); var shippingDocumentId = shippingDocuments[0].Id; var first = await _signalRClient.GenerateEkaerXmlDocument(shippingDocumentId, false); var second = await _signalRClient.GenerateEkaerXmlDocument(shippingDocumentId, false); Assert.IsNotNull(first); Assert.IsNotNull(second); Assert.AreEqual(first.Id, second.Id, "Az újragenerálás új rekordot hozott létre frissítés helyett!"); var histories = await _signalRClient.GetEkaerHistoriesByForeignKey(shippingDocumentId); Assert.IsNotNull(histories); Assert.AreEqual(1, histories.Count(h => !h.IsOutgoing), $"Duplikált bejövő EkaerHistory; shippingDocumentId: {shippingDocumentId}"); } #endregion EkaerHistory / Generate } }