PowerPreview.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 PowerPreview 19 { 20 private Mock<SettingsUtils> mockPowerPreviewSettingsUtils; 21 22 private Mock<SettingsUtils> mockGeneralSettingsUtils; 23 24 [TestInitialize] 25 public void SetUpStubSettingUtils() 26 { 27 mockPowerPreviewSettingsUtils = ISettingsUtilsMocks.GetStubSettingsUtils<PowerPreviewSettings>(); 28 mockGeneralSettingsUtils = ISettingsUtilsMocks.GetStubSettingsUtils<GeneralSettings>(); 29 } 30 31 /// <summary> 32 /// Test if the original settings files were modified. 33 /// </summary> 34 [TestMethod] 35 [DataRow("v0.18.2", "settings.json")] 36 [DataRow("v0.19.2", "settings.json")] 37 [DataRow("v0.20.1", "settings.json")] 38 [DataRow("v0.21.1", "settings.json")] 39 [DataRow("v0.22.0", "settings.json")] 40 public void OriginalFilesModificationTest(string version, string fileName) 41 { 42 var settingPathMock = new Mock<SettingPath>(); 43 var fileMock = BackCompatTestProperties.GetModuleIOProvider(version, PowerPreviewSettings.ModuleName, fileName); 44 45 var mockSettingsUtils = new SettingsUtils(fileMock.Object, settingPathMock.Object); 46 PowerPreviewSettings originalSettings = mockSettingsUtils.GetSettingsOrDefault<PowerPreviewSettings>(PowerPreviewSettings.ModuleName); 47 var repository = new BackCompatTestProperties.MockSettingsRepository<PowerPreviewSettings>(mockSettingsUtils); 48 49 var mockGeneralIOProvider = BackCompatTestProperties.GetGeneralSettingsIOProvider(version); 50 var mockGeneralSettingsUtils = new SettingsUtils(mockGeneralIOProvider.Object, settingPathMock.Object); 51 GeneralSettings originalGeneralSettings = mockGeneralSettingsUtils.GetSettingsOrDefault<GeneralSettings>(); 52 var generalSettingsRepository = new BackCompatTestProperties.MockSettingsRepository<GeneralSettings>(mockGeneralSettingsUtils); 53 54 // Initialise View Model with test Config files 55 Func<string, int> sendMockIPCConfigMSG = msg => { return 0; }; 56 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(repository, generalSettingsRepository, sendMockIPCConfigMSG); 57 58 // Verify that the old settings persisted 59 Assert.AreEqual(originalGeneralSettings.IsElevated, viewModel.IsElevated); 60 Assert.AreEqual(originalSettings.Properties.EnableMdPreview, viewModel.MDRenderIsEnabled); 61 Assert.AreEqual(originalSettings.Properties.EnableMonacoPreview, viewModel.MonacoRenderIsEnabled); 62 Assert.AreEqual(originalSettings.Properties.EnablePdfPreview, viewModel.PDFRenderIsEnabled); 63 Assert.AreEqual(originalSettings.Properties.EnableGcodePreview, viewModel.GCODERenderIsEnabled); 64 Assert.AreEqual(originalSettings.Properties.EnableBgcodePreview, viewModel.BGCODERenderIsEnabled); 65 Assert.AreEqual(originalSettings.Properties.EnableQoiPreview, viewModel.QOIRenderIsEnabled); 66 Assert.AreEqual(originalSettings.Properties.EnableSvgPreview, viewModel.SVGRenderIsEnabled); 67 Assert.AreEqual(originalSettings.Properties.EnableSvgThumbnail, viewModel.SVGThumbnailIsEnabled); 68 Assert.AreEqual(originalSettings.Properties.EnablePdfThumbnail, viewModel.PDFThumbnailIsEnabled); 69 Assert.AreEqual(originalSettings.Properties.EnableGcodeThumbnail, viewModel.GCODEThumbnailIsEnabled); 70 Assert.AreEqual(originalSettings.Properties.EnableBgcodeThumbnail, viewModel.BGCODEThumbnailIsEnabled); 71 Assert.AreEqual(originalSettings.Properties.EnableStlThumbnail, viewModel.STLThumbnailIsEnabled); 72 Assert.AreEqual(originalSettings.Properties.EnableQoiThumbnail, viewModel.QOIThumbnailIsEnabled); 73 74 // Verify that the stub file was used 75 var expectedCallCount = 2; // once via the view model, and once by the test (GetSettings<T>) 76 BackCompatTestProperties.VerifyModuleIOProviderWasRead(fileMock, PowerPreviewSettings.ModuleName, expectedCallCount); 77 } 78 79 [TestMethod] 80 public void SVGRenderIsEnabledShouldPrevHandlerWhenSuccessful() 81 { 82 // Assert 83 Func<string, int> sendMockIPCConfigMSG = msg => 84 { 85 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 86 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableSvgPreview); 87 return 0; 88 }; 89 90 // arrange 91 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 92 93 // act 94 viewModel.SVGRenderIsEnabled = true; 95 } 96 97 [TestMethod] 98 public void SVGThumbnailIsEnabledShouldPrevHandlerWhenSuccessful() 99 { 100 // Assert 101 Func<string, int> sendMockIPCConfigMSG = msg => 102 { 103 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 104 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableSvgThumbnail); 105 return 0; 106 }; 107 108 // arrange 109 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 110 111 // act 112 viewModel.SVGThumbnailIsEnabled = true; 113 } 114 115 [TestMethod] 116 public void PDFThumbnailIsEnabledShouldPrevHandlerWhenSuccessful() 117 { 118 // Assert 119 Func<string, int> sendMockIPCConfigMSG = msg => 120 { 121 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 122 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnablePdfThumbnail); 123 return 0; 124 }; 125 126 // arrange 127 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 128 129 // act 130 viewModel.PDFThumbnailIsEnabled = true; 131 } 132 133 [TestMethod] 134 public void GCODEThumbnailIsEnabledShouldPrevHandlerWhenSuccessful() 135 { 136 // Assert 137 Func<string, int> sendMockIPCConfigMSG = msg => 138 { 139 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 140 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableGcodeThumbnail); 141 return 0; 142 }; 143 144 // arrange 145 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 146 147 // act 148 viewModel.GCODEThumbnailIsEnabled = true; 149 } 150 151 [TestMethod] 152 public void BGCODEThumbnailIsEnabledShouldPrevHandlerWhenSuccessful() 153 { 154 // Assert 155 Func<string, int> sendMockIPCConfigMSG = msg => 156 { 157 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 158 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableBgcodeThumbnail); 159 return 0; 160 }; 161 162 // arrange 163 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 164 165 // act 166 viewModel.BGCODEThumbnailIsEnabled = true; 167 } 168 169 [TestMethod] 170 public void STLThumbnailIsEnabledShouldPrevHandlerWhenSuccessful() 171 { 172 // Assert 173 Func<string, int> sendMockIPCConfigMSG = msg => 174 { 175 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 176 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableStlThumbnail); 177 return 0; 178 }; 179 180 // arrange 181 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 182 183 // act 184 viewModel.STLThumbnailIsEnabled = true; 185 } 186 187 [TestMethod] 188 public void QOIThumbnailIsEnabledShouldPrevHandlerWhenSuccessful() 189 { 190 // Assert 191 Func<string, int> sendMockIPCConfigMSG = msg => 192 { 193 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 194 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableQoiThumbnail); 195 return 0; 196 }; 197 198 // arrange 199 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 200 201 // act 202 viewModel.QOIThumbnailIsEnabled = true; 203 } 204 205 [TestMethod] 206 public void MDRenderIsEnabledShouldPrevHandlerWhenSuccessful() 207 { 208 // Assert 209 Func<string, int> sendMockIPCConfigMSG = msg => 210 { 211 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 212 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableMdPreview); 213 return 0; 214 }; 215 216 // arrange 217 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 218 219 // act 220 viewModel.MDRenderIsEnabled = true; 221 } 222 223 [TestMethod] 224 public void MonacoRenderIsEnabledShouldPrevHandlerWhenSuccessful() 225 { 226 // Assert 227 Func<string, int> sendMockIPCConfigMSG = msg => 228 { 229 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 230 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableMonacoPreview); 231 return 0; 232 }; 233 234 // arrange 235 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 236 237 // act 238 viewModel.MonacoRenderIsEnabled = true; 239 } 240 241 [TestMethod] 242 public void PDFRenderIsEnabledShouldPrevHandlerWhenSuccessful() 243 { 244 // Assert 245 Func<string, int> sendMockIPCConfigMSG = msg => 246 { 247 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 248 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnablePdfPreview); 249 return 0; 250 }; 251 252 // arrange 253 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 254 255 // act 256 viewModel.PDFRenderIsEnabled = true; 257 } 258 259 [TestMethod] 260 public void GCODERenderIsEnabledShouldPrevHandlerWhenSuccessful() 261 { 262 // Assert 263 Func<string, int> sendMockIPCConfigMSG = msg => 264 { 265 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 266 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableGcodePreview); 267 return 0; 268 }; 269 270 // arrange 271 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 272 273 // act 274 viewModel.GCODERenderIsEnabled = true; 275 } 276 277 [TestMethod] 278 public void BGCODERenderIsEnabledShouldPrevHandlerWhenSuccessful() 279 { 280 // Assert 281 Func<string, int> sendMockIPCConfigMSG = msg => 282 { 283 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 284 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableBgcodePreview); 285 return 0; 286 }; 287 288 // arrange 289 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 290 291 // act 292 viewModel.BGCODERenderIsEnabled = true; 293 } 294 295 [TestMethod] 296 public void QOIRenderIsEnabledShouldPrevHandlerWhenSuccessful() 297 { 298 // Assert 299 Func<string, int> sendMockIPCConfigMSG = msg => 300 { 301 SndModuleSettings<SndPowerPreviewSettings> snd = JsonSerializer.Deserialize<SndModuleSettings<SndPowerPreviewSettings>>(msg); 302 Assert.IsTrue(snd.PowertoysSetting.FileExplorerPreviewSettings.Properties.EnableQoiPreview); 303 return 0; 304 }; 305 306 // arrange 307 PowerPreviewViewModel viewModel = new PowerPreviewViewModel(SettingsRepository<PowerPreviewSettings>.GetInstance(mockPowerPreviewSettingsUtils.Object), SettingsRepository<GeneralSettings>.GetInstance(mockGeneralSettingsUtils.Object), sendMockIPCConfigMSG, PowerPreviewSettings.ModuleName); 308 309 // act 310 viewModel.QOIRenderIsEnabled = true; 311 } 312 } 313 }