using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using MySqlConnector; using SyncEngine.MySql; namespace SyncEngine.Tests { [TestClass] public class ShopSyncLogClientTests { [TestMethod] public void BindInsertParameters_MapsSuccessEntry() { var started = new DateTime(2026, 6, 8, 2, 0, 0, DateTimeKind.Utc); var finished = new DateTime(2026, 6, 8, 2, 1, 12, DateTimeKind.Utc); var entry = new ShopSyncLogEntry { RunStartedAt = started, RunFinishedAt = finished, Status = "success", SourceReachable = true, ProductsUpserted = 42, ProductsWithdrawn = 3, Message = null }; using (var cmd = new MySqlCommand("INSERT INTO shop_sync_log VALUES (@start, @finish, @status, @reachable, @upserted, @withdrawn, @message)")) { ShopSyncLogClient.BindInsertParameters(cmd, entry); Assert.AreEqual(started, cmd.Parameters["@start"].Value); Assert.AreEqual(finished, cmd.Parameters["@finish"].Value); Assert.AreEqual("success", cmd.Parameters["@status"].Value); Assert.AreEqual(1, cmd.Parameters["@reachable"].Value); Assert.AreEqual(42, cmd.Parameters["@upserted"].Value); Assert.AreEqual(3, cmd.Parameters["@withdrawn"].Value); Assert.AreEqual(DBNull.Value, cmd.Parameters["@message"].Value); } } [TestMethod] public void BindInsertParameters_MapsFailedEntry() { var entry = new ShopSyncLogEntry { RunStartedAt = DateTime.UtcNow, RunFinishedAt = DateTime.UtcNow, Status = "failed", SourceReachable = false, ProductsUpserted = 0, ProductsWithdrawn = 0, Message = "Connection refused" }; using (var cmd = new MySqlCommand("INSERT INTO shop_sync_log VALUES (@start, @finish, @status, @reachable, @upserted, @withdrawn, @message)")) { ShopSyncLogClient.BindInsertParameters(cmd, entry); Assert.AreEqual("failed", cmd.Parameters["@status"].Value); Assert.AreEqual(0, cmd.Parameters["@reachable"].Value); Assert.AreEqual("Connection refused", cmd.Parameters["@message"].Value); } } } }