public void GetTyrePlacementOnSameAxleAsTest()
        {
            var currentSelectionViewModel = new CurrentSelectionViewModel(_mockedIHasListTyresDetails, new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer())));
            var tyrePlacement             = currentSelectionViewModel.GetTyrePlacementOnSameAxleAs(currentSelectionViewModel.FrontLeft);

            Assert.AreEqual(currentSelectionViewModel.FrontRight, tyrePlacement);
        }
        public void GetTyrePlacementOnSameAxleAsTest_ValidPlacement()
        {
            var currentSelectionViewModel        = new CurrentSelectionViewModel(_mockedIHasListTyresDetails, new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer())));
            var tyrePlacementOnSameAxleViewModel = currentSelectionViewModel.GetTyrePlacementOnSameAxleAs(currentSelectionViewModel.FrontLeft);

            Assert.IsTrue(tyrePlacementOnSameAxleViewModel != null);
            Assert.AreEqual(TyrePlacement.FR, tyrePlacementOnSameAxleViewModel.TyrePlacementTitle);
            Assert.AreNotEqual(TyrePlacement.RL, tyrePlacementOnSameAxleViewModel.TyrePlacementTitle);
        }
        public async Task IsNewTyreOnSameAxleSameFamilyTest_DifferentFamily()
        {
            var dataManager = new DataManager();
            await dataManager.LoadAndParseData();

            var currentSelectionViewModel = new CurrentSelectionViewModel(_mockedIHasListTyresDetails, new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer())));

            currentSelectionViewModel.FrontLeft.SelectedTyre  = new TyreDetailsViewModel(dataManager.Tyres.First(a => a.Family == "F1" && a.Placement == "FL"));
            currentSelectionViewModel.FrontRight.SelectedTyre = new TyreDetailsViewModel(dataManager.Tyres.First(a => a.Family == "F2" && a.Placement == "FR"));
            // Changing the family for FrontRight, should void the selection for FrontLeft since it's on the same Axle. This is one of the validation rules.
            Assert.IsTrue(currentSelectionViewModel.FrontLeft.SelectedTyre == null);
            Assert.IsFalse(currentSelectionViewModel.FrontRight.SelectedTyre == null);
        }
        public async Task IsNewTyreOnSameAxleSameFamilyTest_SameFamily()
        {
            var dataManager = new DataManager();
            await dataManager.LoadAndParseData();

            var currentSelectionViewModel = new CurrentSelectionViewModel(_mockedIHasListTyresDetails, new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer())));

            currentSelectionViewModel.FrontLeft.SelectedTyre  = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Family == "F1" && t.Placement == "FL"));
            currentSelectionViewModel.FrontRight.SelectedTyre = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Family == "F1" && t.Placement == "FR"));
            var isTyreOnSameAxleSameFamily = currentSelectionViewModel.IsNewTyreOnSameAxleSameFamily(currentSelectionViewModel.FrontLeft);

            Assert.IsTrue(isTyreOnSameAxleSameFamily);
        }
        public async Task IsNewTyreSameTypeAsOthers_SameType()
        {
            var dataManager = new DataManager();
            await dataManager.LoadAndParseData();

            var currentSelectionViewModel = new CurrentSelectionViewModel(_mockedIHasListTyresDetails, new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer())));

            currentSelectionViewModel.FrontLeft.SelectedTyre  = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Type == "SuperSoft" && t.Placement == "FL"));
            currentSelectionViewModel.FrontRight.SelectedTyre = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Type == "SuperSoft" && t.Placement == "FR"));
            currentSelectionViewModel.RearLeft.SelectedTyre   = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Type == "SuperSoft" && t.Placement == "RL"));
            currentSelectionViewModel.RearRight.SelectedTyre  = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Type == "SuperSoft" && t.Placement == "RR"));

            var isTyreSameTypeAsOthers = currentSelectionViewModel.IsNewTyreSameTypeAsOthers(currentSelectionViewModel.FrontLeft);

            Assert.IsTrue(isTyreSameTypeAsOthers);
        }
        public async Task IsNewTyreSameTypeAsOthers_DifferentType()
        {
            var dataManager = new DataManager();
            await dataManager.LoadAndParseData();

            var currentSelectionViewModel = new CurrentSelectionViewModel(_mockedIHasListTyresDetails, new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer())));

            currentSelectionViewModel.FrontLeft.SelectedTyre  = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Type == "SuperSoft" && t.Placement == "FL"));
            currentSelectionViewModel.FrontRight.SelectedTyre = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Type == "SuperSoft" && t.Placement == "FR"));
            currentSelectionViewModel.RearLeft.SelectedTyre   = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Type == "SuperSoft" && t.Placement == "RL"));
            currentSelectionViewModel.RearRight.SelectedTyre  = new TyreDetailsViewModel(dataManager.Tyres.First(t => t.Type == "Medium" && t.Placement == "RR"));
            //Changing RR to be Medium, should void the others. This is one of the validation rules.
            Assert.IsTrue(currentSelectionViewModel.FrontLeft.SelectedTyre == null);
            Assert.IsTrue(currentSelectionViewModel.FrontRight.SelectedTyre == null);
            Assert.IsTrue(currentSelectionViewModel.RearLeft.SelectedTyre == null);
            Assert.IsFalse(currentSelectionViewModel.RearRight.SelectedTyre == null);
        }
        public async Task UpdateTemperatureTest_SelectedTrack()
        {
            var dataManager = new DataManager();
            await dataManager.LoadAndParseData();

            var currentSelectionViewModel = new CurrentSelectionViewModel(_mockedIHasListTyresDetails, new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer())));
            var trackDetails = new Mock <TrackDetailsViewModel>(dataManager.Tracks[0]);

            currentSelectionViewModel.SelectedTrack = trackDetails.Object;
            currentSelectionViewModel.UpdateTemperature();
            double temperature    = 0.0;
            var    weatherService = new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer()));

            weatherService.GetTemperatureForLocationAsync(currentSelectionViewModel.SelectedTrack.Location,
                                                          (object sender, EventArgs e) =>
            {
                if (e is TemperatureUpdatedEventArgs temperatureArgs)
                {
                    temperature = temperatureArgs.NewTemperature;
                }
            });
            Assert.AreEqual(temperature, currentSelectionViewModel.SelectedTrackTemperature);
        }
        public void UpdateTemperatureTest_NoSelectedTrack()
        {
            var currentSelectionViewModel = new CurrentSelectionViewModel(_mockedIHasListTyresDetails, new WeatherService(new OpenWeatherMapApiConsumer(new WebClientConsumer())));

            currentSelectionViewModel.UpdateTemperature();
        }