public void SelectTodaysBauShift_Given_16Engineers_Returns_TwoEngineers() { //arrange var engineer1WhoDidnHadShiftYesterday = new SupportEngineerBuilder() .WithShiftLoggedOnDate(DateTime.Today.AddDays(-2)) .Build(); var engineer2WhoDidnHadShiftYesterday = new SupportEngineerBuilder() .WithShiftLoggedOnDate(DateTime.Today.AddDays(-2)) .Build(); var engineerWhoHadShiftYesterday = new SupportEngineerBuilder() .WithShiftLoggedOnDate(DateTime.Today.AddDays(-1)) .Build(); var engineerWhoHadTwoShiftsInLastTwoWeeks = new SupportEngineerBuilder() .WithShiftLoggedOnDate(DateTime.Today.AddDays(-3)) .WithShiftLoggedOnDate(DateTime.Today.AddDays(-12)) .Build(); var engineer2WhoHadTwoShiftsInLastTwoWeeks = new SupportEngineerBuilder() .WithShiftLoggedOnDate(DateTime.Today.AddDays(-5)) .WithShiftLoggedOnDate(DateTime.Today.AddDays(-11)) .Build(); var engineers = new List <ISupportEngineer>() { engineer2WhoHadTwoShiftsInLastTwoWeeks, engineerWhoHadShiftYesterday, engineerWhoHadTwoShiftsInLastTwoWeeks, engineer1WhoDidnHadShiftYesterday, engineer2WhoDidnHadShiftYesterday }; var supportEngineerRepository = A.Fake <ISupportEngineersRepository>(); var supportEngineersFactory = A.Fake <ISupportEngineersFactory>(); A.CallTo(() => supportEngineersFactory.GetSupportEngineers()) .Returns(engineers); //var supportEngineersFactory = new SupportEngineers var filterChainFactory = new DefaultSupportEngineerFilterChainFactory(); var sut = new WheelOfFate(supportEngineerRepository, supportEngineersFactory, filterChainFactory); //act var bauShift = sut.SelectTodaysBauShift(); //assert bauShift.ShouldNotBeNull(); bauShift.Shift.ShouldNotBeEmpty(); }
public void SelectTodaysBauShift_Given_10EngineersWith0Shifts_After10DaysOfShifts_EachEngineerDidntHadShiftInTwoCosequentDays() { //arrange int numberOfEngineers = 10; int numberOfDays = 12; ICalendar calendar = A.Fake <ICalendar>(); IList <ISupportEngineer> tenSupportEngineersWithouthShifts = new List <ISupportEngineer>(); for (int i = 0; i < numberOfEngineers; i++) { tenSupportEngineersWithouthShifts.Add(new SupportEngineerBuilder() .WihtDateProvider(calendar) .Build()); } var defaultSupportEngineerFilterChainFactory = new DefaultSupportEngineerFilterChainFactory(); var sut = defaultSupportEngineerFilterChainFactory.Create(); //act //at the beggining all engineers have 0 shifts foreach (var supportEngineer in tenSupportEngineersWithouthShifts) { supportEngineer.ShiftCount.ShouldBe(0); } ; //simulate ten days of shifts for (int daysToAdd = 0; daysToAdd < numberOfDays; daysToAdd++) { //simulate weekend if (daysToAdd == 5) { daysToAdd = daysToAdd + 2; } A.CallTo(() => calendar.Today).Returns(DateTime.Today.AddDays(daysToAdd)); sut.Filter(tenSupportEngineersWithouthShifts); } //assert foreach (var supportEngineer in tenSupportEngineersWithouthShifts) { var lastTwoShifts = supportEngineer.LastTwoShifts; var lastShift = lastTwoShifts.First(); var secondToLastShift = lastTwoShifts.Last(); ((lastShift.Date - secondToLastShift.Date).TotalDays > 1).ShouldBeTrue(); } }
public void Create_Returns_ChainedFilters() { //arrange var sut = new DefaultSupportEngineerFilterChainFactory(); //act var filterChain = sut.Create(); //assert filterChain.ShouldBeOfType <ShiftSelectedTodayFilter>(); filterChain.Successor.ShouldBeOfType <PreferEngineersWhoDidintHadShiftInLastWeekFilter>(); filterChain.Successor.Successor.ShouldBeOfType <EngineersWhoDidntHadTwoShiftsInLastTwoWeeksFilter>(); filterChain.Successor.Successor.Successor.ShouldBeOfType <EngineersWhoDidntHadShiftYesterdayFilter>(); filterChain.Successor.Successor.Successor.Successor.ShouldBeOfType <ChooseTwoRandomEngineersFilter>(); filterChain.Successor.Successor.Successor.Successor.Successor .ShouldBeOfType <LogShiftForSelectedEngineersFilter>(); filterChain.Successor.Successor.Successor.Successor.Successor.Successor.ShouldBeNull(); }