public bool CanHandle(RawRaceFeed theRawRaceFeed, out object theDeserializedObj)
        {
            theDeserializedObj = null;
            if (theRawRaceFeed == null ||
                theRawRaceFeed.FileName == null ||
                theRawRaceFeed.FeedStream == null)
            {
                return(false);
            }

            if (!theRawRaceFeed.FileName.EndsWith("json", StringComparison.OrdinalIgnoreCase))
            {
                return(false);
            }

            var aWolferhamptonRaceFeed = GetWolferhamptonRaceFeed(theRawRaceFeed.FeedStream);

            if (aWolferhamptonRaceFeed == null)
            {
                return(false);
            }

            theDeserializedObj = aWolferhamptonRaceFeed;
            return(aWolferhamptonRaceFeed.RawData != null &&
                   aWolferhamptonRaceFeed.RawData.Tags != null &&
                   !string.IsNullOrEmpty(aWolferhamptonRaceFeed.RawData.Tags.Sport) &&
                   aWolferhamptonRaceFeed.RawData.Tags.Sport.Equals(HORSE_RACING, StringComparison.OrdinalIgnoreCase) &&
                   !string.IsNullOrEmpty(aWolferhamptonRaceFeed.RawData.Tags.Track) &&
                   aWolferhamptonRaceFeed.RawData.Tags.Track.Equals(WOLVERHAMPTON, StringComparison.OrdinalIgnoreCase));
        }
Example #2
0
        public void TestWolferhamptonFeed()
        {
            var aFeedDataLoaders = new List <IFeedDataLoader>();

            aFeedDataLoaders.Add(new WolferhamptonFeedDataLoader());
            var aHorseRaceDataProvicer = new HorseRaceDataProvider(aFeedDataLoaders);

            var aRawData     = "{ \"RawData\": { \"Tags\": { \"TrackCode\": \"Wolverhampton\", \"Sport\": \"HorseRacing\" }, \"Markets\": [ { \"Selections\": [ { \"Price\": 10.0, \"Tags\": { \"name\": \"Toolatetodelegate\" } }, { \"Price\": 4.4, \"Tags\": { \"name\": \"Fikhaar\" } } ] } ] } } ";
            var aRawRaceFeed = new RawRaceFeed
            {
                FileName   = "Wolferhampton_Race1.json",
                FeedStream = new MemoryStream(Encoding.UTF8.GetBytes(aRawData))
            };

            var aHorseRace = aHorseRaceDataProvicer.GetHorseRace(aRawRaceFeed);

            Assert.NotNull(aHorseRace);
            Assert.Equal("Wolverhampton", aHorseRace.Track);
            Assert.Equal(2, aHorseRace.Horses.Count);
            Assert.NotNull(aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Fikhaar")));
            Assert.NotNull(aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Toolatetodelegate")));
            Assert.Equal((decimal)4.4, aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Fikhaar")).Price);
            Assert.Equal((decimal)10.0, aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Toolatetodelegate")).Price);

            var aHorcesByPriceAsc = aHorseRace.Horses.OrderBy(theHorce => theHorce.Price).ToList();

            Assert.Equal("Fikhaar", aHorcesByPriceAsc[0].Name);
            Assert.Equal("Toolatetodelegate", aHorcesByPriceAsc[1].Name);
        }
Example #3
0
        public void TestCaulfieldFeed()
        {
            var aFeedDataLoaders = new List <IFeedDataLoader>();

            aFeedDataLoaders.Add(new CaulfieldFeedDataLoader());
            var aHorseRaceDataProvicer = new HorseRaceDataProvider(aFeedDataLoaders);

            var aRawData     = "<?xml version=\"1.0\"?> <meeting xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"> <MeetingType>HorseRacing</MeetingType> <track name=\"Caulfield\"/> <races> <race> <horses> <horse name=\"Advancing\"> <number>1</number> </horse> <horse name=\"Coronel\"> <number>2</number> </horse> </horses> <prices> <price> <horses> <horse number=\"1\" Price=\"4.2\"/> <horse number=\"2\" Price=\"12\"/> </horses> </price> </prices> </race> </races> </meeting>";
            var aRawRaceFeed = new RawRaceFeed
            {
                FileName   = "Caulfield_Race1.xml",
                FeedStream = new MemoryStream(Encoding.UTF8.GetBytes(aRawData))
            };

            var aHorseRace = aHorseRaceDataProvicer.GetHorseRace(aRawRaceFeed);

            Assert.NotNull(aHorseRace);
            Assert.Equal("Caulfield", aHorseRace.Track);
            Assert.Equal(2, aHorseRace.Horses.Count);
            Assert.NotNull(aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Advancing")));
            Assert.NotNull(aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Coronel")));
            Assert.Equal((decimal)4.2, aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Advancing")).Price);
            Assert.Equal(12, aHorseRace.Horses.FirstOrDefault(theHorse => theHorse.Name.Equals("Coronel")).Price);

            var aHorcesByPriceAsc = aHorseRace.Horses.OrderBy(theHorce => theHorce.Price).ToList();

            Assert.Equal("Advancing", aHorcesByPriceAsc[0].Name);
            Assert.Equal("Coronel", aHorcesByPriceAsc[1].Name);
        }
        public static RawRaceFeed CreateRawRaceFeed(string theFilePath)
        {
            if (string.IsNullOrEmpty(theFilePath))
            {
                throw new ArgumentNullException(theFilePath);
            }

            var aFullPath = string.Format(
                "{0}{1}",
                AppDomain.CurrentDomain.BaseDirectory,
                theFilePath.TrimStart('\\'));

            if (!File.Exists(aFullPath))
            {
                throw new FileNotFoundException(aFullPath);
            }

            var aMemoryStream = new MemoryStream();

            using (var aFileStream = new FileStream(aFullPath, FileMode.Open, FileAccess.Read))
            {
                aFileStream.CopyTo(aMemoryStream);
            }

            var aFile        = new FileInfo(aFullPath);
            var aRawRaceFeed = new RawRaceFeed
            {
                FileName   = aFile.Name,
                FeedStream = aMemoryStream
            };

            return(aRawRaceFeed);
        }
Example #5
0
        public bool CanHandle(RawRaceFeed theRawRaceFeed, out object theDeserializedObj)
        {
            theDeserializedObj = null;
            if (theRawRaceFeed == null ||
                theRawRaceFeed.FileName == null ||
                theRawRaceFeed.FeedStream == null)
            {
                return(false);
            }

            if (!theRawRaceFeed.FileName.EndsWith("xml", StringComparison.OrdinalIgnoreCase))
            {
                return(false);
            }

            var aCaulfieldRaceFeed = GetCaulfieldRaceFeed(theRawRaceFeed.FeedStream);

            if (aCaulfieldRaceFeed == null)
            {
                return(false);
            }

            theDeserializedObj = aCaulfieldRaceFeed;
            return(!string.IsNullOrEmpty(aCaulfieldRaceFeed.MeetingType) &&
                   aCaulfieldRaceFeed.MeetingType.Equals(HORSE_RACING, StringComparison.OrdinalIgnoreCase) &&
                   aCaulfieldRaceFeed.Track != null &&
                   !string.IsNullOrEmpty(aCaulfieldRaceFeed.Track.Name) &&
                   aCaulfieldRaceFeed.Track.Name.Equals(CAULFIELD, StringComparison.OrdinalIgnoreCase));
        }
Example #6
0
        public HorseRace GetHorseRace(RawRaceFeed theRawRaceFeed)
        {
            foreach (var aFeedDataLoader in feedDataLoaders)
            {
                object aDeserializedObj;
                if (aFeedDataLoader.CanHandle(theRawRaceFeed, out aDeserializedObj))
                {
                    return(aFeedDataLoader.GetHorseRace(aDeserializedObj));
                }
            }

            return(null);
        }