public void PreviousTradingDayForWeekEnd()
        {
            var tradingCalendar = new TradingCalendar(Guid.NewGuid());

            var nonTradingDays = new NonTradingDay[] {
                new NonTradingDay(new Date(2019, 01, 01), "New Years Day"),
                new NonTradingDay(new Date(2019, 12, 25), "Christmas Day")
            };
            var @event = new NonTradingDaysSetEvent(tradingCalendar.Id, 0, 2019, nonTradingDays);

            tradingCalendar.ApplyEvents(new Event[] { @event });

            tradingCalendar.PreviousTradingDay(new Date(2019, 11, 10)).Should().Be(new Date(2019, 11, 08));
        }
        public void CheckIfDateIsAtradingDayReturnFalse()
        {
            var tradingCalendar = new TradingCalendar(Guid.NewGuid());

            var nonTradingDays = new NonTradingDay[] {
                new NonTradingDay(new Date(2019, 01, 01), "New Years Day"),
                new NonTradingDay(new Date(2019, 12, 25), "Christmas Day")
            };
            var @event = new NonTradingDaysSetEvent(tradingCalendar.Id, 0, 2019, nonTradingDays);

            tradingCalendar.ApplyEvents(new Event[] { @event });

            tradingCalendar.IsTradingDay(new Date(2019, 01, 01)).Should().BeFalse();
        }
        public void SetNonTradingDays(int year, IEnumerable <NonTradingDay> nonTradingDays)
        {
            // Check that each day is in the correct year
            var invalidDate = nonTradingDays.FirstOrDefault(x => x.Date.Year != year);

            if (invalidDate != null)
            {
                throw new ArgumentException(String.Format("Date {0} is not in calendar year {1}", invalidDate, year));
            }

            var @event = new NonTradingDaysSetEvent(Id, Version, year, nonTradingDays);

            Apply(@event);

            PublishEvent(@event);
        }
        public void Apply(NonTradingDaysSetEvent @event)
        {
            Version++;

            // Remove any existing non trading days for the year
            _NonTradingDays.RemoveAll(x => x.Date.Year == @event.Year);

            foreach (var nonTradingDay in @event.NonTradingDays)
            {
                var newNonTradingDay = new NonTradingDay(nonTradingDay.Date, nonTradingDay.Description);
                var index            = _NonTradingDays.BinarySearch(newNonTradingDay);
                if (index < 0)
                {
                    _NonTradingDays.Insert(~index, newNonTradingDay);
                }
            }
        }
        public void ApplyNonTradingDaysSetEvent()
        {
            var tradingCalendar = new TradingCalendar(Guid.NewGuid());

            var nonTradingDays = new NonTradingDay[] {
                new NonTradingDay(new Date(2019, 01, 01), "New Years Day"),
                new NonTradingDay(new Date(2019, 12, 25), "Christmas Day")
            };
            var @event = new NonTradingDaysSetEvent(tradingCalendar.Id, 0, 2019, nonTradingDays);

            tradingCalendar.ApplyEvents(new Event[] { @event });

            using (new AssertionScope())
            {
                tradingCalendar.IsTradingDay(new Date(2019, 01, 01)).Should().BeFalse();
                tradingCalendar.IsTradingDay(new Date(2019, 12, 25)).Should().BeFalse();
                tradingCalendar.IsTradingDay(new Date(2019, 01, 02)).Should().BeTrue();
            }
        }