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  }