From da54f9d50a7969a42db1d32215b7b146db5258e5 Mon Sep 17 00:00:00 2001
From: "harald.martini@student.tugraz.at" <harald.martini@student.tugraz.at>
Date: Tue, 29 Jun 2021 10:23:50 +0200
Subject: [PATCH] Updated Passenger Heat Pumps

---
 .../MultistageAuxiliariesViewModel.cs         | 42 ++++++++------
 Vecto3GUI2020Test/Vecto3GUI2020Test.csproj    |  1 +
 .../MultistageAuxiliariesViewModelTests.cs    | 58 ++++++++++++++-----
 3 files changed, 70 insertions(+), 31 deletions(-)

diff --git a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
index 3b762b2fa2..00e412f74e 100644
--- a/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
+++ b/VECTO3GUI2020/ViewModel/MultiStage/Implementation/MultistageAuxiliariesViewModel.cs
@@ -274,15 +274,6 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 			set => SetProperty(ref _primaryVehicleHybridElectric, value);
 		}
 
-		private IndexedStorage<bool> _editingEnabledDictionary;
-		public IndexedStorage<bool> EditingEnabledDictionary
-		{
-			get
-			{
-				return _editingEnabledDictionary;
-			}
-		}
-
 
 
 		#region HVAC
@@ -364,23 +355,37 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 
 		public ICommand AddPassengerHeatpumpCommand
 		{
-			get => _addPassengerHeatpumpCommand ??
+			get
+			{
+				return _addPassengerHeatpumpCommand ?? (_addPassengerHeatpumpCommand =
 					new RelayCommand(() => {
 							HeatPumpGroupEditingEnabled = true;
 							if (HeatPumpConfigurationsPassenger == null) {
 								HeatPumpConfigurationsPassenger = new ObservableCollection<HeatPumpConfiguration>();
 							}
+
 							HeatPumpConfigurationsPassenger.Add(new HeatPumpConfiguration());
+							RemovePassengerHeatpumpCommand.NotifyCanExecuteChanged();
+
 						},
-						() => true);
+						() => true));
+			}
 		}
 
-		public ICommand _removePasssengerHeatpumpCommand;
+		private IRelayCommand _removePassengerHeatpumpCommand;
 
-		public ICommand RemovePassengerHeatpumpCommand
+		public IRelayCommand RemovePassengerHeatpumpCommand
 		{
-			get => _removePasssengerHeatpumpCommand ??
-					new RelayCommand<HeatPumpConfiguration>(hp => HeatPumpConfigurationsPassenger?.Remove(hp), (hp) => true);
+			get
+			{
+				return _removePassengerHeatpumpCommand ?? (_removePassengerHeatpumpCommand =
+					new RelayCommand<HeatPumpConfiguration>(hp => {
+						if (HeatPumpGroupEditingEnabled && HeatPumpConfigurationsPassenger.Count > 1) {
+							HeatPumpConfigurationsPassenger?.Remove(hp);
+							RemovePassengerHeatpumpCommand.NotifyCanExecuteChanged();
+						}
+					}, hp => HeatPumpConfigurationsPassenger.Count > 1));
+			}
 		}
 
 		public IList<Tuple<HeatPumpType, HeatPumpMode>> HeatPumpPassengerCompartments{
@@ -559,6 +564,10 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 					_parameterViewModels[nameof(SystemConfiguration)].EditingEnabled = value;
 					if (value == false) {
 						HeatPumpConfigurationsPassenger = null;
+					} else {
+						if (HeatPumpConfigurationsPassenger == null || HeatPumpConfigurationsPassenger.Count == 0) {
+							AddPassengerHeatpumpCommand.Execute(null);
+						}
 					}
 				}
 			}
@@ -648,9 +657,6 @@ namespace VECTO3GUI2020.ViewModel.MultiStage.Implementation
 			set
 			{
 				SetProperty(ref _interiorLightsLed, value);
-				if (value != null) {
-					OnPropertyChanged(nameof(EditingEnabledDictionary));
-				}
 			}
 		}
 
diff --git a/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj b/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj
index 30f9aca4e1..f675c034a5 100644
--- a/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj
+++ b/Vecto3GUI2020Test/Vecto3GUI2020Test.csproj
@@ -80,6 +80,7 @@
 
   <ItemGroup>
     <PackageReference Include="Appium.WebDriver" Version="4.3.1" />
+    <PackageReference Include="Microsoft.Toolkit.Mvvm" Version="7.0.2" />
     <PackageReference Include="Moq" Version="4.16.1" />
     <PackageReference Include="Ninject" Version="3.3.4" />
     <PackageReference Include="NUnit" Version="3.12.0" />
diff --git a/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs b/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs
index 07c2f96cb7..801e095995 100644
--- a/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs
+++ b/Vecto3GUI2020Test/ViewModelTests/MultistageAuxiliariesViewModelTests.cs
@@ -9,11 +9,11 @@ using VECTO3GUI2020.ViewModel.MultiStage.Implementation;
 
 namespace Vecto3GUI2020Test.ViewModelTests
 {
-    [TestFixture]
-    public class MultistageAuxiliariesViewModelTests : ViewModelTestBase
-    {
+	[TestFixture]
+	public class MultistageAuxiliariesViewModelTests : ViewModelTestBase
+	{
+
 
-	
 
 		[Test]
 		public void TestAllowedValuesHeatPumpModePassenger()
@@ -33,18 +33,18 @@ namespace Vecto3GUI2020Test.ViewModelTests
 
 		[Test]
 		public void TestAllowedValuesHeatPumpModeDriver()
-        {
+		{
 			var auxVm = new MultistageAuxiliariesViewModel(null);
 			auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.none;
-            Assert.IsTrue(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.N_A));
-            Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.cooling));
-            Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating));
-            Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating_and_cooling));
+			Assert.IsTrue(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.N_A));
+			Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.cooling));
+			Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating));
+			Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.heating_and_cooling));
 
 
-            auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.R_744;
-            Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.N_A));
-        }
+			auxVm.HeatPumpTypeDriverCompartment = HeatPumpType.R_744;
+			Assert.IsFalse(auxVm.HeatPumpModeDriverCompartmentAllowedValues.Contains(HeatPumpMode.N_A));
+		}
 
 
 		[Test]
@@ -80,13 +80,45 @@ namespace Vecto3GUI2020Test.ViewModelTests
 			Assert.AreEqual(HeatPumpMode.N_A, auxVm.HeatPumpModeDriverCompartment);
 			Assert.AreEqual(HeatPumpMode.N_A,
 				auxVm.ParameterViewModels[nameof(auxVm.HeatPumpModeDriverCompartment)].CurrentContent);
-
 		}
 
+		[Test]
+		public void TestPassengerHeatPumpConfigurations()
+		{
+			var auxVm = new MultistageAuxiliariesViewModel(null);
+			auxVm.HeatPumpGroupEditingEnabled = true;
+
 
+			Assert.AreEqual(1, auxVm.HeatPumpConfigurationsPassenger.Count);
 
+			Assert.IsFalse(auxVm.RemovePassengerHeatpumpCommand.CanExecute(null));
 
 
+			bool canExecuteChangedFired = false;
+			auxVm.RemovePassengerHeatpumpCommand.CanExecuteChanged += (sender, args) => {
+				canExecuteChangedFired = true;
+			};
 
+			//Add another configuration
+			
+			auxVm.AddPassengerHeatpumpCommand.Execute(null);
+			Assert.AreEqual(2, auxVm.HeatPumpConfigurationsPassenger.Count);
+			Assert.IsTrue(canExecuteChangedFired, "Can Execute Changed Not Fired");
+			canExecuteChangedFired = false;
+			Assert.IsTrue(auxVm.RemovePassengerHeatpumpCommand.CanExecute(null));
+
+			//Remove configuration
+			auxVm.RemovePassengerHeatpumpCommand.Execute(auxVm.HeatPumpConfigurationsPassenger.Last());
+			Assert.AreEqual(1, auxVm.HeatPumpConfigurationsPassenger.Count);
+			Assert.IsTrue(canExecuteChangedFired);
+			Assert.IsFalse(auxVm.RemovePassengerHeatpumpCommand.CanExecute(null));
+
+
+
+
+
+
+
+		}
 	}
 }
-- 
GitLab