public void Create_IntervalChangesAccordingToProductParams() { var factory = new OrderDeterriorationTimerFactory(); var kitchenShelf = new KitchenShelf("hot", 10, 1); var shelfOrder = new ShelfOrder(new Order() { ShelfLife = 300, DecayRate = 0.5 }, DateTime.Now); var timer1 = factory.Create(kitchenShelf, shelfOrder); var shelfOrderWithLowerShelfLife = new ShelfOrder(new Order() { ShelfLife = 100, DecayRate = 0.5, }, DateTime.Now); var timer2 = factory.Create(kitchenShelf, shelfOrderWithLowerShelfLife); var shelfOrderWithHigherDecayRate = new ShelfOrder(new Order() { ShelfLife = 300, DecayRate = 1, }, DateTime.Now); var timer3 = factory.Create(kitchenShelf, shelfOrderWithHigherDecayRate); Assert.IsTrue(timer1.Interval > timer2.Interval); Assert.IsTrue(timer1.Interval > timer3.Interval); }
/// <summary> /// Get timer based on order max age for specific shelf /// </summary> /// <param name="shelf">Shelf which contains the order</param> /// <param name="order">Order</param> /// <returns>Timer with calculated interval</returns> public Timer Create(KitchenShelf shelf, ShelfOrder order) { var timer = new Timer(order.GetMaxOrderAge(shelf.DecayModifier) * 1000); timer.AutoReset = false; return(timer); }
/// <summary> /// Create timer with random interval set in predefined boundaries /// </summary> /// <param name="shelf">This parameter is ignored</param> /// <param name="order">This parameter is ignored</param> /// <returns></returns> public Timer Create(KitchenShelf shelf, ShelfOrder order) { var courierArrivalDelay = random.Next( AppSettings.Instance.AppConfig.Shelves.Timers.CourierTimerMinDelay, AppSettings.Instance.AppConfig.Shelves.Timers.CourierTimerMaxDelay); var timer = new Timer(TimeSpan.FromSeconds(courierArrivalDelay).TotalMilliseconds); timer.AutoReset = false; return(timer); }
public void GetMaxAge_ValueMatchesExpected(string addedAtStr, string currentTimeStr, double decayRate, int shelfLife, int shelfDecay, double expected) { var addedAt = DateTime.Parse(addedAtStr); var currentTime = DateTime.Parse(currentTimeStr); var shelfOrder = new ShelfOrder(new Shared.Models.Order() { DecayRate = decayRate, ShelfLife = shelfLife, }, addedAt); var maxAge = shelfOrder.GetMaxOrderAge(shelfDecay); Assert.AreEqual(expected, maxAge); }
public void GetValue_Order1(string addedAtStr, string currentTimeStr, bool expectedValueGreaterThanZero) { var addedAt = DateTime.Parse(addedAtStr); var currentTime = DateTime.Parse(currentTimeStr); var shelfOrder = new ShelfOrder(new Shared.Models.Order() { DecayRate = 0.5, ShelfLife = 100, }, addedAt); var value = shelfOrder.GetValue(currentTime, 1); if (expectedValueGreaterThanZero) { Assert.Greater(value, 0); Assert.Less(value, 1); } else { Assert.LessOrEqual(value, 0); } }