public void LogErrorIfNotTerminatedASchedule()
        {
            var records = new IRecord[]
            {
                new ScheduleDetails()
                {
                    TimetableUid = "Service1"
                },
                new ScheduleExtraData(),
                new OriginLocation(),
                new IntermediateLocation(),
                new ScheduleDetails()
                {
                    TimetableUid = "Service2", Action = RecordAction.Delete
                },
            };

            var parser = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(records);
            var logger = Substitute.For <ILogger>();

            var consolidator = new ScheduleConsolidator(parser, logger);

            var returned = consolidator.Read(_dummy).ToArray();

            logger.ReceivedWithAnyArgs().Error <IRecord>(Arg.Any <string>(), Arg.Any <IRecord>());
        }
        public void DoesNotReturnServiceUntilTerminated()
        {
            var parser = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(new[] { new ScheduleDetails() });

            var consolidator = new ScheduleConsolidator(parser, Substitute.For <ILogger>());

            var returned = consolidator.Read(_dummy);

            Assert.Empty(returned);
        }
        public void ReturnServiceWhenTerminated()
        {
            var parser = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(new IRecord[] { new ScheduleDetails(), new TerminalLocation() });

            var consolidator = new ScheduleConsolidator(parser, Substitute.For <ILogger>());

            var returned = consolidator.Read(_dummy).Single();;

            Assert.IsType <Schedule>(returned);
        }
        public void ImmediatelyReturnNonServiceRecords(IRecord record)
        {
            var parser = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(new[] { record });

            var consolidator = new ScheduleConsolidator(parser, Substitute.For <ILogger>());

            var returned = consolidator.Read(_dummy).Single();

            Assert.Equal(record, returned);
        }
        public void MultipleServicesReturned()
        {
            var records = new IRecord[] { new ScheduleDetails(), new TerminalLocation(), new ScheduleDetails(), new TerminalLocation() };
            var parser  = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(records);

            var consolidator = new ScheduleConsolidator(parser, Substitute.For <ILogger>());

            var returned = consolidator.Read(_dummy).ToArray();

            Assert.Equal(2, returned.Length);
        }
        public void ReturnScheduleRecordsInService(IRecord record)
        {
            var records = new IRecord[] { new ScheduleDetails(), record, new TerminalLocation() };
            var parser  = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(records);

            var consolidator = new ScheduleConsolidator(parser, Substitute.For <ILogger>());

            var returned = consolidator.Read(_dummy).Single() as Schedule;

            Assert.Contains(record, returned.Records);
        }
        public void ReturnAllRecords()
        {
            var records = new IRecord[] { new ScheduleDetails(), new IntermediateLocation(), new TerminalLocation() };
            var parser  = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(records);

            var consolidator = new ScheduleConsolidator(parser, Substitute.For <ILogger>());

            var returned = consolidator.Read(_dummy).Single() as Schedule;

            Assert.Equal(records.Length, returned.Records.Count);
            Assert.All(returned.Records, r => Assert.Contains(r, records));
        }
        public void ReturnAllRecordsWHenHaveDelete()
        {
            var records = new IRecord[] { new ScheduleDetails()
                                          {
                                              Action = RecordAction.Delete
                                          }, new Trailer(), };
            var parser = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(records);

            var consolidator = new ScheduleConsolidator(parser, Substitute.For <ILogger>());

            var returned = consolidator.Read(_dummy);

            Assert.Equal(records.Length, returned.Count());
        }
        public void HandleRecordsInOrderInCif()
        {
            var records = new IRecord[]
            {
                new Header(),
                new TiplocInsertAmend(),
                new Association(),
                new ScheduleDetails()
                {
                    TimetableUid = "Service1"
                },
                new ScheduleExtraData(),
                new OriginLocation(),
                new IntermediateLocation(),
                new TerminalLocation(),
                new ScheduleDetails()
                {
                    TimetableUid = "Service2"
                },
                new ScheduleExtraData(),
                new OriginLocation(),
                new IntermediateLocation(),
                new ScheduleChange(),
                new IntermediateLocation(),
                new TerminalLocation(),
                new Trailer()
            };

            var parser = Substitute.For <IParser>();

            parser.Read(Arg.Any <TextReader>()).Returns(records);

            var consolidator = new ScheduleConsolidator(parser, Substitute.For <ILogger>());

            var returned = consolidator.Read(_dummy).ToArray();

            Assert.Equal(6, returned.Length);
            Assert.Equal("Service1", ((Schedule)returned[3]).GetId().TimetableUid);
            Assert.Equal("Service2", ((Schedule)returned[4]).GetId().TimetableUid);
        }