public void GetsTocSchedulesHandlesIndividualDodgyServicesAndLogsAsWarning() { var logger = Substitute.For <ILogger>(); var timetable = CreateTimetable(logger); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var start = TestSchedules.Ten; var stops = new ScheduleLocation[] { TestScheduleLocations.CreatePass(TestStations.Vauxhall, start.AddMinutes(10)), TestScheduleLocations.CreatePass(TestStations.ClaphamJunction, start.AddMinutes(20)), TestScheduleLocations.CreatePass(TestStations.Wimbledon, start.AddMinutes(20)), }; var dodgySchedule = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "D11111", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday), stops: stops); var schedule3 = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "X98765", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var found = timetable.GetSchedulesByToc("VT", MondayAugust12, Time.Midnight); var schedules = found.services.Select(s => s.Details).ToArray(); Assert.Contains <ISchedule>(schedule, schedules); Assert.Contains <ISchedule>(schedule3, schedules); Assert.All(found.services, s => { Assert.Equal(MondayAugust12, s.On); }); logger.Received().Warning(Arg.Any <InvalidOperationException>(), Arg.Any <string>(), Arg.Any <IService>()); }
public void GetsTocSchedulesRunningOnRailDay() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); var startsRailDay = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "X98765", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday | DaysFlag.Tuesday), stops: TestSchedules.CreateThreeStopSchedule(Time.StartRailDay)); var startsBeforeRailDay = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "X98764", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday | DaysFlag.Tuesday), stops: TestSchedules.CreateThreeStopSchedule(Time.StartRailDay.AddMinutes(-1))); var startsAfterRailDay = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "X98766", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday | DaysFlag.Tuesday), stops: TestSchedules.CreateThreeStopSchedule(Time.StartRailDay.AddMinutes(1))); var found = timetable.GetSchedulesByToc("VT", MondayAugust12, Time.StartRailDay); var startDaySchedule = found.services.Single(s => s.Details == startsRailDay); Assert.Equal(MondayAugust12, startDaySchedule.On); var startAfterDaySchedule = found.services.Single(s => s.Details == startsAfterRailDay); Assert.Equal(MondayAugust12, startAfterDaySchedule.On); var startBeforeDaySchedule = found.services.Single(s => s.Details == startsBeforeRailDay); Assert.Equal(TuesdayAugust13, startBeforeDaySchedule.On); Assert.Equal(4, found.services.Length); }
public void GetScheduleByRetailServiceIdInvalidRetailServiceId(string retailServiceId) { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var found = timetable.GetScheduleByRetailServiceId(retailServiceId, MondayAugust12); Assert.Empty(found.services); Assert.Equal(LookupStatus.InvalidRetailServiceId, found.status); }
public void ScheduleNotFoundBasedUponRetailServiceId() { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var found = timetable.GetScheduleByRetailServiceId("VT999900", MondayAugust12); Assert.Empty(found.services); Assert.Equal(LookupStatus.ServiceNotFound, found.status); }
public void FindScheduleBasedUponTimetableUid(string timetableUid, string expected) { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "A00001"); TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "A00002"); var service = timetable.GetScheduleByTimetableUid(timetableUid, MondayAugust12).service; Assert.Equal(expected, service?.Details.TimetableUid); }
public void ScheduleNotFound() { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var found = timetable.GetScheduleByTimetableUid("Z98765", MondayAugust12); Assert.Null(found.service); Assert.Equal(LookupStatus.ServiceNotFound, found.status); }
public void ScheduleNotRunningOnDate() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); var found = timetable.GetScheduleByTimetableUid("X12345", MondayAugust12.AddDays(2)); Assert.Null(found.service); Assert.Equal(LookupStatus.NoScheduleOnDate, found.status); }
public void ScheduleNotRunningOnDateBasedUponRetailServiceId() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); var found = timetable.GetScheduleByRetailServiceId("VT123400", MondayAugust12.AddDays(2)); Assert.Empty(found.services); Assert.Equal(LookupStatus.NoScheduleOnDate, found.status); }
public void FindScheduleBasedUponRetailServiceId(string retailServiceId, string expected) { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "A00001", retailServiceId: "VT1000"); TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "A00002", retailServiceId: "VT200000"); var services = timetable.GetScheduleByRetailServiceId(retailServiceId, MondayAugust12); var service = services.services.FirstOrDefault()?.Details; Assert.Equal(expected, service?.RetailServiceId); }
public void ScheduleNotFoundBasedUponRetailServiceIdWhenHaveTwoDifferentRetailServiceIdsForSameService() { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday), retailServiceId: "VT999900"); var found = timetable.GetScheduleByRetailServiceId("VT999900", MondayAugust12); Assert.Empty(found.services); Assert.Equal(LookupStatus.NoScheduleOnDate, found.status); }
public void TocScheduleNotFound() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); var schedule3 = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "X98765", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var found = timetable.GetSchedulesByToc("GR", MondayAugust12, Time.Midnight); Assert.Empty(found.services); Assert.Equal(LookupStatus.ServiceNotFound, found.status); }
public void DoesNotReturnCancelledSchedulesRunningOnDate() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Everyday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); schedule2.StpIndicator = StpIndicator.Cancelled; var filter = new TocServicesFilter(timetable, Filters); var found = filter.GetServicesByToc(false)("VT", MondayAugust12, Time.Midnight); Assert.Empty(found.services); }
public void ResolvedServiceAlsoIncludesAssociatedServices() { var timetable = CreateTimetable(); var main = TestSchedules.CreateScheduleInTimetable(timetable, "X12345", retailServiceId: "VT123401").Service; var associated = TestSchedules.CreateScheduleInTimetable(timetable, "A98765", retailServiceId: "VT123402").Service; var associations = new [] { TestAssociations.CreateAssociationWithServices(main, associated) }; var found = timetable.GetScheduleByTimetableUid("X12345", MondayAugust12); var withAssociations = found.service as ResolvedServiceWithAssociations; Assert.NotEmpty(withAssociations.Associations); }
public void GetsScheduleRunningOnDateBasedUponRetailServiceId() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); var found = timetable.GetScheduleByRetailServiceId("VT123400", MondayAugust12).services.First(); Assert.Equal(schedule, found.Details); Assert.Equal(MondayAugust12, found.On); found = timetable.GetScheduleByRetailServiceId("VT123400", TuesdayAugust13).services.First(); Assert.Equal(TuesdayAugust13, found.On); Assert.Equal(schedule2, found.Details); }
public void GetsScheduleRunningOnDate() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); var found = timetable.GetScheduleByTimetableUid("X12345", MondayAugust12); Assert.Equal(schedule, found.service.Details); Assert.Equal(MondayAugust12, found.service.On); found = timetable.GetScheduleByTimetableUid("X12345", TuesdayAugust13); Assert.Equal(schedule2, found.service.Details); Assert.Equal(TuesdayAugust13, found.service.On); }
public void GetsCancelledSchedulesRunningOnDate() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Everyday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); schedule2.StpIndicator = StpIndicator.Cancelled; var filter = new TocServicesFilter(timetable, Filters); var found = filter.GetServicesByToc(true)("VT", MondayAugust12, Time.Midnight); var service = found.services[0]; Assert.True(service.IsCancelled); Assert.Equal(MondayAugust12, service.On); Assert.Equal(schedule, service.Details); }
public void AddAssociationToServices() { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, "X12345"); TestSchedules.CreateScheduleInTimetable(timetable, "A98765"); var associations = new [] { TestAssociations.CreateAssociation("X12345", "A98765") }; var count = timetable.AddAssociations(associations); Assert.Equal(1, count); var service = timetable.GetService("X12345"); Assert.Single(service.GetAssociations()); }
public void OnlyAddAssociationIfBothMainAndAssociatedServiceExist() { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, "X12345"); var associations = new [] { TestAssociations.CreateAssociation("X12345", "A98765"), TestAssociations.CreateAssociation("A98765", "X12345") }; var count = timetable.AddAssociations(associations); Assert.Equal(0, count); var service = timetable.GetService("X12345"); Assert.Null(service.GetAssociations()); }
public void ScheduleCancelledOnDateBasedUponRetailServiceId() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Weekdays)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); schedule2.StpIndicator = StpIndicator.Cancelled; var found = timetable.GetScheduleByRetailServiceId("VT123400", MondayAugust12).services.First(); Assert.False(found.IsCancelled); Assert.Equal(MondayAugust12, found.On); Assert.Equal(schedule, found.Details); found = timetable.GetScheduleByRetailServiceId("VT123400", TuesdayAugust13).services.First(); Assert.True(found.IsCancelled); Assert.Equal(TuesdayAugust13, found.On); Assert.Equal(schedule, found.Details); }
public void ScheduleCancelledOnDate() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Weekdays)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); schedule2.StpIndicator = StpIndicator.Cancelled; var found = timetable.GetScheduleByTimetableUid("X12345", MondayAugust12); Assert.False(found.service.IsCancelled); Assert.Equal(schedule, found.service.Details); Assert.Equal(MondayAugust12, found.service.On); found = timetable.GetScheduleByTimetableUid("X12345", TuesdayAugust13); Assert.Equal(LookupStatus.Success, found.status); Assert.True(found.service.IsCancelled); Assert.Equal(TuesdayAugust13, found.service.On); Assert.Equal(schedule, found.service.Details); }
public void AddMultipleVersionsOfAnAssociationToServices() { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, "X12345"); TestSchedules.CreateScheduleInTimetable(timetable, "A98765"); var associations = new [] { TestAssociations.CreateAssociation("X12345", "A98765", StpIndicator.Permanent), TestAssociations.CreateAssociation("X12345", "A98765", StpIndicator.Override), TestAssociations.CreateAssociation("X12345", "A98765", calendar: TestSchedules.CreateEverydayCalendar(new DateTime(2019, 9, 1), new DateTime(2019, 9, 30))) }; var count = timetable.AddAssociations(associations); Assert.Equal(3, count); var service = timetable.GetService("X12345"); Assert.Single(service.GetAssociations()); }
public void GetsTocSchedulesRunningOnDate() { var timetable = CreateTimetable(); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Tuesday)); var schedule3 = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "X98765", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var found = timetable.GetSchedulesByToc("VT", MondayAugust12, Time.Midnight); var schedules = found.services.Select(s => s.Details).ToArray(); Assert.Contains <ISchedule>(schedule, schedules); Assert.Contains <ISchedule>(schedule3, schedules); Assert.All(found.services, s => { Assert.Equal(MondayAugust12, s.On); }); found = timetable.GetSchedulesByToc("VT", TuesdayAugust13, Time.Midnight); schedules = found.services.Select(s => s.Details).ToArray(); Assert.Contains <ISchedule>(schedule2, schedules); Assert.All(found.services, s => { Assert.Equal(TuesdayAugust13, s.On); }); }
public void GetsTocSchedulesHandlesIndividualServiceError() { var logger = Substitute.For <ILogger>(); var timetable = CreateTimetable(logger); var schedule = TestSchedules.CreateScheduleInTimetable(timetable, calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule2 = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "CORRUPT", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var schedule3 = TestSchedules.CreateScheduleInTimetable(timetable, timetableId: "X98765", calendar: TestSchedules.CreateAugust2019Calendar(DaysFlag.Monday)); var data = timetable.AsDynamic()._timetableUidMap.RealObject as Dictionary <string, IService>; data["CORRUPT"] = null; // Force an error var found = timetable.GetSchedulesByToc("VT", MondayAugust12, Time.Midnight); var schedules = found.services.Select(s => s.Details).ToArray(); Assert.Contains <ISchedule>(schedule, schedules); Assert.Contains <ISchedule>(schedule3, schedules); Assert.All(found.services, s => { Assert.Equal(MondayAugust12, s.On); }); logger.Received().Error(Arg.Any <Exception>(), Arg.Any <string>(), Arg.Any <IService>()); }
public void DoNotAddToOtherServiceIfAddingToMainFails() { var timetable = CreateTimetable(); TestSchedules.CreateScheduleInTimetable(timetable, "X12345"); TestSchedules.CreateScheduleInTimetable(timetable, "A98765"); var associations = new [] { TestAssociations.CreateAssociation("X12345", "A98765", StpIndicator.Permanent), TestAssociations.CreateAssociation("X12345", "A98765", StpIndicator.Override), TestAssociations.CreateAssociation("X12345", "A98765", StpIndicator.Override), }; var count = timetable.AddAssociations(associations); Assert.Equal(2, count); //TODO Inconsistent We remove original association in main but leave the original in the other service. var service = timetable.GetService("X12345"); Assert.Single(service.GetAssociations().First().Value); var other = timetable.GetService("A98765"); Assert.Equal(2, other.GetAssociations().First().Value.Count); }