static void Main(string[] args)
        {
            try
            {
                // get xml file path
                var info = new DirectoryInfo(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));

                var xmlFilePath  = Path.Combine(info.Parent.Parent.Parent.FullName, @"FeedData\Caulfield_Race1.xml");
                var jsonFilePath = Path.Combine(info.Parent.Parent.Parent.FullName, @"FeedData\Wolferhampton_Race1.json");

                var horseRepositoryxml = new HorseDataRepository(new XMLDataContext <Horse>(xmlFilePath));
                var priceRepositoryxml = new PriceDataRepository(new XMLDataContext <Price>(xmlFilePath));

                var horseRepositoryjson = new HorseDataRepository(new JSONDataContext <Horse>(jsonFilePath));
                var priceRepositoryjson = new PriceDataRepository(new JSONDataContext <Price>(jsonFilePath));

                var horseOrderingController = new HorseOrderingController(horseRepositoryxml, priceRepositoryxml, horseRepositoryjson, priceRepositoryjson);
                horseOrderingController.DisplayData(horseOrderingController.GetSortedHorsesByPrice());

                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Exception: {ex}");
            }
        }
        public void TestVerifyingSortedHorsesAndPrice()
        {
            var horseXMLData = new List <Horse>();

            horseXMLData.Add(new Horse()
            {
                HorseNumber = 1, HorseName = "H1"
            });
            var horseJSONData = new List <Horse>();

            horseJSONData.Add(new Horse()
            {
                HorseNumber = 2, HorseName = "H2"
            });
            var priceXMLData = new List <Price>();

            priceXMLData.Add(new Price()
            {
                HoreseNumber = 1, HorsePrice = 8.5
            });
            var priceJSONData = new List <Price>();

            priceJSONData.Add(new Price()
            {
                HoreseNumber = 2, HorsePrice = 6.5
            });

            Mock <IHorseDataRepository> mockHorseXMLDataRepository = new Mock <IHorseDataRepository>();

            mockHorseXMLDataRepository.Setup(t => t.GetAll()).Returns(horseXMLData);

            Mock <IHorseDataRepository> mockHorseJSONDataRepository = new Mock <IHorseDataRepository>();

            mockHorseJSONDataRepository.Setup(t => t.GetAll()).Returns(horseJSONData);

            Mock <IPriceDataRepository> mockPriceXMLDataRepository = new Mock <IPriceDataRepository>();

            mockPriceXMLDataRepository.Setup(t => t.GetAll()).Returns(priceXMLData);

            Mock <IPriceDataRepository> mockPriceJSONDataRepository = new Mock <IPriceDataRepository>();

            mockPriceJSONDataRepository.Setup(t => t.GetAll()).Returns(priceJSONData);

            var sut = new HorseOrderingController(mockHorseXMLDataRepository.Object, mockPriceXMLDataRepository.Object,
                                                  mockHorseJSONDataRepository.Object, mockPriceJSONDataRepository.Object);

            var result = (List <HorsePrice>)(sut.GetSortedHorsesByPrice());

            Assert.True(result[0].HorseName == "H2" && result[1].HorseName == "H1");
        }