private static Race FindOrCreateRace(HorseSenseContext context, RaceDay raceday, RaceDay parsedRaceday) { Race race = null; foreach (var raceItem in raceday.Races) { if (raceItem.RaceNum == parsedRaceday.Races.First <Race>().RaceNum) { race = raceItem; return(race); } } if (parsedRaceday.Races != null && parsedRaceday.Races.Count > 0) { race = parsedRaceday.Races.First <Race>(); raceday.Races.Add(race); context.Add(race); return(race); } else { return(null); } }
private static Horse FindOrCreateHorse(HorseSenseContext context, Race race, RaceDay parsedRaceday) { Horse horse = null; foreach (var horseItem in race.Horses) { if (horseItem.PostPos == parsedRaceday.Races.First <Race>().Horses.First <Horse>().PostPos) { horse = horseItem; return(horse); } } if (parsedRaceday.Races != null && parsedRaceday.Races.First <Race>().Horses != null && parsedRaceday.Races.First <Race>().Horses.Count > 0) { horse = parsedRaceday.Races.First <Race>().Horses.First <Horse>(); race.Horses.Add(horse); context.Add(horse); return(horse); } else { return(null); } }
public void InsertMultipleRaceDaysTest() { using (var context = new HorseSenseContext(GetHorseSenseContextOptionForMethod())) { var raceday = new RaceDay() { Track = "TestTrack", Date = "20180102" }; var racedayNewDate = new RaceDay() { Track = "TestTrack", Date = "20180103" }; var racedayNewTrack = new RaceDay() { Track = "AnotherTrack", Date = "20180102" }; DrfParser.ParseLine(context, raceday); DrfParser.ParseLine(context, racedayNewDate); DrfParser.ParseLine(context, racedayNewTrack); Assert.AreEqual(3, context.RaceDays.Count(), "Incorrect number of raceDays"); Assert.IsNotNull(context.RaceDays.FirstOrDefault(r => r.Track == "TestTrack" && r.Date == "20180102")); Assert.AreEqual(1, context.RaceDays.Where(r => r.Track == "TestTrack" && r.Date == "20180103").Count()); Assert.AreEqual(1, context.RaceDays.Where(r => r.Track == "AnotherTrack" && r.Date == "20180102").Count()); } }
public static async Task <RaceDay> ParseFile(HorseSenseContext context, IFormFile file) { RaceDay raceDay = null; var lines = new List <string>(); using (var reader = new StreamReader(file.OpenReadStream())) { var firstLine = true; while (reader.Peek() >= 0) { var line = await reader.ReadLineAsync(); var parsedRaceday = BrisnetRtfParser.ParseLine(line); if (firstLine) { RemoveOldDuplicateRaceDay(context, parsedRaceday); firstLine = false; } raceDay = ParseLine(context, parsedRaceday); } } return(raceDay); }
// @@@@@ TODO: Make private but allow unit testing public static RaceDay ParseLine(HorseSenseContext context, RaceDay parsedRaceday) { var raceday = FindOrCreateRaceDay(context, parsedRaceday); if (raceday != null) { var race = FindOrCreateRace(context, raceday, parsedRaceday); if (race != null) { var horse = FindOrCreateHorse(context, race, parsedRaceday); } } context.SaveChanges(); return(raceday); }
private static void RemoveOldDuplicateRaceDay(HorseSenseContext context, RaceDay parsedRaceday) { var foundRaceDay = context.RaceDays //.Include(rd => rd.Races) //.ThenInclude(r => r.Horses) .FirstOrDefault (rd => rd.Track.Equals(parsedRaceday.Track) && rd.Date.Equals(parsedRaceday.Date)); if (foundRaceDay != null) { // Cascade delete is enabled by default in Entity Framework, this will remove raceday and its races & horses // @@@@@@ But this doesn't seem to work !!!!! context.RaceDays.Remove(foundRaceDay); context.SaveChanges(); } }
public void DuplicateInsertRaceDayTest() { using (var context = new HorseSenseContext(GetHorseSenseContextOptionForMethod())) { var raceday = new RaceDay() { Track = "TestTrack", Date = "20180102" }; DrfParser.ParseLine(context, raceday); DrfParser.ParseLine(context, raceday); Assert.AreEqual(1, context.RaceDays.Count()); Assert.AreEqual("TestTrack", context.RaceDays.Single().Track); Assert.AreEqual("20180102", context.RaceDays.Single().Date); } }
public void DrfParserBaseTest() { // Run the test against one instance of the context using (var context = new HorseSenseContext(GetHorseSenseContextOptionForMethod())) { context.Horses.Add(new Horse { Name = "Horsie" }); context.SaveChanges(); } // Use a separate instance of the context to verify correct data was saved to database using (var context = new HorseSenseContext(GetHorseSenseContextOptionForMethod())) { Assert.AreEqual(1, context.Horses.Count()); Assert.AreEqual("Horsie", context.Horses.Single().Name); } }
private static RaceDay FindOrCreateRaceDay(HorseSenseContext context, RaceDay parsedRaceday) { RaceDay raceDay = context.RaceDays .Include(rd => rd.Races) .ThenInclude(r => r.Horses) .FirstOrDefault(rd => rd.Track.Equals(parsedRaceday.Track) && rd.Date.Equals(parsedRaceday.Date)); if (raceDay == null) { raceDay = new RaceDay { Track = parsedRaceday.Track, Date = parsedRaceday.Date }; context.Add(raceDay); } return(raceDay); }
public RaceDaysController(HorseSenseContext context) { _context = context; }
public UploadController(HorseSenseContext context) { _context = context; }
public HorsesController(HorseSenseContext context) { _context = context; }