QueryTests.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.Linq;
  7  using Microsoft.CmdPal.Ext.System.Helpers;
  8  using Microsoft.CmdPal.Ext.System.Pages;
  9  using Microsoft.CmdPal.Ext.UnitTestBase;
 10  using Microsoft.CommandPalette.Extensions;
 11  using Microsoft.CommandPalette.Extensions.Toolkit;
 12  using Microsoft.VisualStudio.TestTools.UnitTesting;
 13  
 14  namespace Microsoft.CmdPal.Ext.System.UnitTests;
 15  
 16  [TestClass]
 17  public class QueryTests : CommandPaletteUnitTestBase
 18  {
 19      [DataTestMethod]
 20      [DataRow("shutdown", "Shutdown")]
 21      [DataRow("restart", "Restart")]
 22      [DataRow("sign out", "Sign out")]
 23      [DataRow("lock", "Lock")]
 24      [DataRow("sleep", "Sleep")]
 25      [DataRow("hibernate", "Hibernate")]
 26      [DataRow("open recycle", "Open Recycle Bin")]
 27      [DataRow("empty recycle", "Empty Recycle Bin")]
 28      [DataRow("uefi", "UEFI firmware settings")]
 29      public void TopLevelPageQueryTest(string input, string matchedTitle)
 30      {
 31          var settings = new Settings();
 32          var pages = new SystemCommandPage(settings);
 33          var allCommands = pages.GetItems();
 34  
 35          var result = Query(input, allCommands);
 36  
 37          // Empty recycle bin command should exist
 38          Assert.IsNotNull(result);
 39  
 40          var firstItem = result.FirstOrDefault();
 41  
 42          Assert.IsNotNull(firstItem, "No items matched the query.");
 43          Assert.AreEqual(matchedTitle, firstItem.Title, $"Expected to match '{input}' but got '{firstItem.Title}'");
 44      }
 45  
 46      [TestMethod]
 47      public void RecycleBinCommandTest()
 48      {
 49          var settings = new Settings(hideEmptyRecycleBin: true);
 50          var pages = new SystemCommandPage(settings);
 51          var allCommands = pages.GetItems();
 52  
 53          var result = Query("recycle", allCommands);
 54  
 55          // Empty recycle bin command should exist
 56          Assert.IsNotNull(result);
 57  
 58          foreach (var item in result)
 59          {
 60              if (item.Title.Contains("Open Recycle Bin") || item.Title.Contains("Empty Recycle Bin"))
 61              {
 62                  Assert.Fail("Recycle Bin commands should not be available when hideEmptyRecycleBin is true.");
 63              }
 64          }
 65  
 66          var firstItem = result.FirstOrDefault();
 67          Assert.IsNotNull(firstItem, "No items matched the query.");
 68          Assert.IsTrue(
 69              firstItem.Title.Contains("Recycle Bin", StringComparison.OrdinalIgnoreCase),
 70              $"Expected to match 'Recycle Bin' but got '{firstItem.Title}'");
 71      }
 72  
 73      [TestMethod]
 74      public void NetworkCommandsTest()
 75      {
 76          var settings = new Settings();
 77          var pages = new SystemCommandPage(settings);
 78          var allCommands = pages.GetItems();
 79  
 80          var ipv4Result = Query("IPv4", allCommands);
 81  
 82          Assert.IsNotNull(ipv4Result);
 83          Assert.IsTrue(ipv4Result.Length > 0, "No IPv4 commands matched the query.");
 84  
 85          var ipv6Result = Query("IPv6", allCommands);
 86          Assert.IsNotNull(ipv6Result);
 87          Assert.IsTrue(ipv6Result.Length > 0, "No IPv6 commands matched the query.");
 88  
 89          var macResult = Query("MAC", allCommands);
 90          Assert.IsNotNull(macResult);
 91          Assert.IsTrue(macResult.Length > 0, "No MAC commands matched the query.");
 92  
 93          var findDisconnectedMACResult = false;
 94          foreach (var item in macResult)
 95          {
 96              if (item.Details.Body.Contains("Disconnected"))
 97              {
 98                  findDisconnectedMACResult = true;
 99                  break;
100              }
101          }
102  
103          Assert.IsTrue(findDisconnectedMACResult, "No disconnected MAC address found in the results.");
104      }
105  
106      [TestMethod]
107      public void HideDisconnectedNetworkInfoTest()
108      {
109          var settings = new Settings(hideDisconnectedNetworkInfo: true);
110          var pages = new SystemCommandPage(settings);
111          var allCommands = pages.GetItems();
112  
113          var macResult = Query("MAC", allCommands);
114          Assert.IsNotNull(macResult);
115          Assert.IsTrue(macResult.Length > 0, "No MAC commands matched the query.");
116  
117          var findDisconnectedMACResult = false;
118          foreach (var item in macResult)
119          {
120              if (item.Details.Body.Contains("Disconnected"))
121              {
122                  findDisconnectedMACResult = true;
123                  break;
124              }
125          }
126  
127          Assert.IsTrue(!findDisconnectedMACResult, "Disconnected MAC address found in the results.");
128      }
129  
130      [TestMethod]
131      [DataRow(FirmwareType.Uefi, true)]
132      [DataRow(FirmwareType.Bios, false)]
133      [DataRow(FirmwareType.Max, false)]
134      [DataRow(FirmwareType.Unknown, false)]
135      public void FirmwareSettingsTest(FirmwareType firmwareType, bool hasCommand)
136      {
137          var settings = new Settings(firmwareType: firmwareType);
138          var pages = new SystemCommandPage(settings);
139          var allCommands = pages.GetItems();
140          var result = Query("UEFI", allCommands);
141  
142          // UEFI Firmware Settings command should exist
143          Assert.IsNotNull(result);
144          var firstItem = result.FirstOrDefault();
145          var firstItemIsUefiCommand = firstItem?.Title.Contains("UEFI", StringComparison.OrdinalIgnoreCase) ?? false;
146          Assert.AreEqual(hasCommand, firstItemIsUefiCommand, $"Expected to match (or not match) 'UEFI firmware settings' but got '{firstItem?.Title}'");
147      }
148  }