PowerRename.cs
1 // Copyright (c) Microsoft Corporation 2 // The Microsoft Corporation licenses this file to you under the MIT license. 3 // See the LICENSE file in the project root for more information. 4 5 using System; 6 using System.Text.Json; 7 8 using Microsoft.PowerToys.Settings.UI.Library; 9 using Microsoft.PowerToys.Settings.UI.UnitTests.BackwardsCompatibility; 10 using Microsoft.PowerToys.Settings.UI.UnitTests.Mocks; 11 using Microsoft.PowerToys.Settings.UI.ViewModels; 12 using Microsoft.VisualStudio.TestTools.UnitTesting; 13 using Moq; 14 15 namespace ViewModelTests 16 { 17 [TestClass] 18 public class PowerRename 19 { 20 public const string GeneralSettingsFileName = "Test\\PowerRename"; 21 22 private Mock<SettingsUtils> mockGeneralSettingsUtils; 23 24 private Mock<SettingsUtils> mockPowerRenamePropertiesUtils; 25 26 [TestInitialize] 27 public void SetUpStubSettingUtils() 28 { 29 mockGeneralSettingsUtils = ISettingsUtilsMocks.GetStubSettingsUtils<GeneralSettings>(); 30 mockPowerRenamePropertiesUtils = ISettingsUtilsMocks.GetStubSettingsUtils<PowerRenameLocalProperties>(); 31 } 32 33 /// <summary> 34 /// Test if the original settings files were modified. 35 /// </summary> 36 [TestMethod] 37 [DataRow("v0.18.2", "power-rename-settings.json")] 38 [DataRow("v0.19.2", "power-rename-settings.json")] 39 [DataRow("v0.20.1", "power-rename-settings.json")] 40 [DataRow("v0.22.0", "power-rename-settings.json")] 41 public void OriginalFilesModificationTest(string version, string fileName) 42 { 43 var settingPathMock = new Mock<SettingPath>(); 44 var mockIOProvider = BackCompatTestProperties.GetModuleIOProvider(version, PowerRenameSettings.ModuleName, fileName); 45 46 var mockSettingsUtils = new SettingsUtils(mockIOProvider.Object, settingPathMock.Object); 47 PowerRenameLocalProperties originalSettings = mockSettingsUtils.GetSettingsOrDefault<PowerRenameLocalProperties>(PowerRenameSettings.ModuleName); 48 49 var mockGeneralIOProvider = BackCompatTestProperties.GetGeneralSettingsIOProvider(version); 50 51 var mockGeneralSettingsUtils = new SettingsUtils(mockGeneralIOProvider.Object, settingPathMock.Object); 52 GeneralSettings originalGeneralSettings = mockGeneralSettingsUtils.GetSettingsOrDefault<GeneralSettings>(); 53 var generalSettingsRepository = new BackCompatTestProperties.MockSettingsRepository<GeneralSettings>(mockGeneralSettingsUtils); 54 55 // Initialise View Model with test Config files 56 Func<string, int> sendMockIPCConfigMSG = msg => { return 0; }; 57 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockSettingsUtils, generalSettingsRepository, sendMockIPCConfigMSG); 58 59 // Verify that the old settings persisted 60 Assert.AreEqual(originalGeneralSettings.Enabled.PowerRename, viewModel.IsEnabled); 61 Assert.AreEqual(originalSettings.ExtendedContextMenuOnly, viewModel.EnabledOnContextExtendedMenu); 62 Assert.AreEqual(originalSettings.MRUEnabled, viewModel.MRUEnabled); 63 Assert.AreEqual(originalSettings.ShowIcon, viewModel.EnabledOnContextMenu); 64 65 // Verify that the stub file was used 66 var expectedCallCount = 2; // once via the view model, and once by the test (GetSettings<T>) 67 BackCompatTestProperties.VerifyModuleIOProviderWasRead(mockIOProvider, PowerRenameSettings.ModuleName, expectedCallCount); 68 BackCompatTestProperties.VerifyGeneralSettingsIOProviderWasRead(mockGeneralIOProvider, expectedCallCount); 69 } 70 71 [TestMethod] 72 public void IsEnabledShouldEnableModuleWhenSuccessful() 73 { 74 // Assert 75 Func<string, int> sendMockIPCConfigMSG = msg => 76 { 77 OutGoingGeneralSettings snd = JsonSerializer.Deserialize<OutGoingGeneralSettings>(msg); 78 Assert.IsTrue(snd.GeneralSettings.Enabled.PowerRename); 79 return 0; 80 }; 81 82 // arrange 83 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 84 85 // act 86 viewModel.IsEnabled = true; 87 } 88 89 [TestMethod] 90 public void MRUEnabledShouldSetValue2TrueWhenSuccessful() 91 { 92 // Assert 93 Func<string, int> sendMockIPCConfigMSG = msg => 94 { 95 PowerRenameSettingsIPCMessage snd = JsonSerializer.Deserialize<PowerRenameSettingsIPCMessage>(msg); 96 Assert.IsTrue(snd.Powertoys.PowerRename.Properties.MRUEnabled.Value); 97 return 0; 98 }; 99 100 // arrange 101 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 102 103 // act 104 viewModel.MRUEnabled = true; 105 } 106 107 [TestMethod] 108 public void WhenIsEnabledIsOffAndMRUEnabledIsOffGlobalAndMruShouldBeOff() 109 { 110 Func<string, int> sendMockIPCConfigMSG = msg => { return 0; }; 111 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 112 113 viewModel.IsEnabled = false; 114 viewModel.MRUEnabled = false; 115 116 Assert.IsFalse(viewModel.GlobalAndMruEnabled); 117 } 118 119 [TestMethod] 120 public void WhenIsEnabledIsOffAndMRUEnabledIsOnGlobalAndMruShouldBeOff() 121 { 122 Func<string, int> sendMockIPCConfigMSG = msg => { return 0; }; 123 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 124 125 viewModel.IsEnabled = false; 126 viewModel.MRUEnabled = true; 127 128 Assert.IsFalse(viewModel.GlobalAndMruEnabled); 129 } 130 131 [TestMethod] 132 public void WhenIsEnabledIsOnAndMRUEnabledIsOffGlobalAndMruShouldBeOff() 133 { 134 Func<string, int> sendMockIPCConfigMSG = msg => { return 0; }; 135 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 136 137 viewModel.IsEnabled = true; 138 viewModel.MRUEnabled = false; 139 140 Assert.IsFalse(viewModel.GlobalAndMruEnabled); 141 } 142 143 [TestMethod] 144 public void WhenIsEnabledIsOnAndMRUEnabledIsOnGlobalAndMruShouldBeOn() 145 { 146 Func<string, int> sendMockIPCConfigMSG = msg => { return 0; }; 147 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 148 149 viewModel.IsEnabled = true; 150 viewModel.MRUEnabled = true; 151 152 Assert.IsTrue(viewModel.GlobalAndMruEnabled); 153 } 154 155 [TestMethod] 156 public void EnabledOnContextMenuShouldSetValue2TrueWhenSuccessful() 157 { 158 // Assert 159 Func<string, int> sendMockIPCConfigMSG = msg => 160 { 161 PowerRenameSettingsIPCMessage snd = JsonSerializer.Deserialize<PowerRenameSettingsIPCMessage>(msg); 162 Assert.IsTrue(snd.Powertoys.PowerRename.Properties.ShowIcon.Value); 163 return 0; 164 }; 165 166 // arrange 167 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 168 169 // act 170 viewModel.EnabledOnContextMenu = true; 171 } 172 173 [TestMethod] 174 public void EnabledOnContextExtendedMenuShouldSetValue2TrueWhenSuccessful() 175 { 176 // Assert 177 Func<string, int> sendMockIPCConfigMSG = msg => 178 { 179 PowerRenameSettingsIPCMessage snd = JsonSerializer.Deserialize<PowerRenameSettingsIPCMessage>(msg); 180 Assert.IsTrue(snd.Powertoys.PowerRename.Properties.ShowIcon.Value); 181 return 0; 182 }; 183 184 // arrange 185 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 186 187 // act 188 viewModel.EnabledOnContextMenu = true; 189 } 190 191 [TestMethod] 192 public void RestoreFlagsOnLaunchShouldSetValue2TrueWhenSuccessful() 193 { 194 // Assert 195 Func<string, int> sendMockIPCConfigMSG = msg => 196 { 197 PowerRenameSettingsIPCMessage snd = JsonSerializer.Deserialize<PowerRenameSettingsIPCMessage>(msg); 198 Assert.IsTrue(snd.Powertoys.PowerRename.Properties.PersistState.Value); 199 return 0; 200 }; 201 202 // arrange 203 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 204 205 // act 206 viewModel.RestoreFlagsOnLaunch = true; 207 } 208 209 [TestMethod] 210 public void MaxDispListNumShouldSetMaxSuggListTo20WhenSuccessful() 211 { 212 // Assert 213 Func<string, int> sendMockIPCConfigMSG = msg => 214 { 215 PowerRenameSettingsIPCMessage snd = JsonSerializer.Deserialize<PowerRenameSettingsIPCMessage>(msg); 216 Assert.AreEqual(20, snd.Powertoys.PowerRename.Properties.MaxMRUSize.Value); 217 return 0; 218 }; 219 220 // arrange 221 PowerRenameViewModel viewModel = new PowerRenameViewModel(mockPowerRenamePropertiesUtils.Object, SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, GeneralSettingsFileName); 222 223 // act 224 viewModel.MaxDispListNum = 20; 225 } 226 } 227 }