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;
 }
Exemple #11
0
 public UploadController(HorseSenseContext context)
 {
     _context = context;
 }
Exemple #12
0
 public HorsesController(HorseSenseContext context)
 {
     _context = context;
 }