public void LoadIntoDatabase() { var records = ParserHelper.ParseRecords(Records); using (var connection = _fixture.CreateConnection()) { connection.Open(); var loader = new ScheduleHeaderLoader(connection, new Sequence(), Substitute.For <ILogger>()); loader.Initialise(); foreach (var record in records) { var schedule = record as Schedule; loader.Add(schedule.GetId(), schedule.GetScheduleDetails(), schedule.GetScheduleExtraDetails()); } using (var transaction = connection.BeginTransaction()) { loader.Load(transaction); using (var command = connection.CreateCommand()) { command.Transaction = transaction; command.CommandText = "SELECT * FROM Schedules"; using (var adapter = new SqlDataAdapter(command)) { var table = new DataTable(); adapter.Fill(table); Assert.Equal(3, table.Rows.Count); }; } } } }
public void CreateDataTableWithLocationColumns() { using (var connection = _fixture.CreateConnection()) { connection.Open(); var loader = new ScheduleHeaderLoader(connection, new Sequence(), Substitute.For <ILogger>()); loader.Initialise(); var table = loader.Table; Assert.Equal(27, table.Columns.Count); Assert.NotNull(table.Columns["TimetableUid"]); } }
private ScheduleLoader InitialiseLoader(SqlConnection connection) { var sequence = new Sequence(); var lookup = Substitute.For <IDatabaseIdLookup>(); lookup.Find(Arg.Any <string>()).Returns(c => sequence.GetNext()); _schedules = new ScheduleHeaderLoader(connection, new Sequence(), Substitute.For <ILogger>()); _locations = new ScheduleLocationLoader(connection, new Sequence(), lookup, Substitute.For <ILogger>()); _changes = new ScheduleChangeLoader(connection, new Sequence(), Substitute.For <ILogger>()); var loader = new ScheduleLoader(_schedules, _locations, _changes, Substitute.For <ILogger>()); loader.Initialise(); return(loader); }
public void AddInsert() { var records = ParserHelper.ParseRecords(Records); using (var connection = _fixture.CreateConnection()) { connection.Open(); var loader = new ScheduleHeaderLoader(connection, new Sequence(), Substitute.For <ILogger>()); loader.Initialise(); var schedule = records[0] as Schedule; loader.Add(schedule.GetId(), schedule.GetScheduleDetails(), schedule.GetScheduleExtraDetails()); var row = loader.Table.Rows[0]; Assert.Equal(1L, row["Id"]); Assert.Equal("I", row["Action"]); Assert.Equal("P", row["StpIndicator"]); Assert.Equal("C55855", row["TimetableUid"]); Assert.Equal(new DateTime(2019, 10, 26), row["RunsFrom"]); Assert.Equal(new DateTime(2019, 12, 14), row["RunsTo"]); Assert.Equal((byte)32, row["DayMask"]); Assert.Equal("", row["BankHolidayRunning"]); Assert.Equal("P", row["Status"]); Assert.Equal("EE", row["Category"]); Assert.Equal("5P92", row["TrainIdentity"]); Assert.Equal(DBNull.Value, row["NrsHeadCode"]); Assert.Equal("25476001", row["ServiceCode"]); Assert.Equal(DBNull.Value, row["PortionId"]); Assert.Equal("DMU", row["PowerType"]); Assert.Equal("S", row["TimingLoadType"]); Assert.Equal(75, row["Speed"]); Assert.Equal(DBNull.Value, row["OperatingCharacteristics"]); Assert.Equal("B", row["SeatClass"]); Assert.Equal(DBNull.Value, row["SleeperClass"]); Assert.Equal("", row["ReservationIndicator"]); Assert.Equal(DBNull.Value, row["Catering"]); Assert.Equal(DBNull.Value, row["Branding"]); Assert.Equal(DBNull.Value, row["EuropeanUic"]); Assert.Equal("GW", row["Toc"]); Assert.Equal(true, row["ApplicableTimetable"]); Assert.Equal(DBNull.Value, row["RetailServiceId"]); } }
public void EachScheduleHasUniqueDatabaseId() { var records = ParserHelper.ParseRecords(Records); using (var connection = _fixture.CreateConnection()) { connection.Open(); var loader = new ScheduleHeaderLoader(connection, new Sequence(), Substitute.For <ILogger>()); loader.Initialise(); var ids = new List <long>(); foreach (var record in records) { var schedule = record as Schedule; var id = loader.Add(schedule.GetId(), schedule.GetScheduleDetails(), schedule.GetScheduleExtraDetails()); ids.Add(id); } Assert.Equal(ids.Count, ids.Distinct().Count()); } }
public void SkipsDatabaseIdWhenHaveBxRecord() { var records = ParserHelper.ParseRecords(Records); using (var connection = _fixture.CreateConnection()) { connection.Open(); var loader = new ScheduleHeaderLoader(connection, new Sequence(), Substitute.For <ILogger>()); loader.Initialise(); var ids = new List <long>(); foreach (var record in records) { var schedule = record as Schedule; var id = loader.Add(schedule.GetId(), schedule.GetScheduleDetails(), schedule.GetScheduleExtraDetails()); ids.Add(id); } Assert.Equal(1, ids[0]); Assert.Equal(3, ids[1]); // First schedule has BS and BX so next skips 1 Id Assert.Equal(4, ids[2]); // Second schedule only has BS } }
public void AddDelete() { var records = ParserHelper.ParseRecords(Records); using (var connection = _fixture.CreateConnection()) { connection.Open(); var loader = new ScheduleHeaderLoader(connection, new Sequence(), Substitute.For <ILogger>()); loader.Initialise(); var schedule = records[1] as Schedule; loader.Add(schedule.GetId(), schedule.GetScheduleDetails(), schedule.GetScheduleExtraDetails()); var row = loader.Table.Rows[0]; Assert.Equal(1L, row["Id"]); Assert.Equal("D", row["Action"]); Assert.Equal("P", row["StpIndicator"]); Assert.Equal("Y31280", row["TimetableUid"]); Assert.Equal(new DateTime(2019, 10, 27), row["RunsFrom"]); //Everything else is null Assert.Equal(22, row.ItemArray.Count(o => DBNull.Value.Equals(o))); } }