/ src / modules / cmdpal / Tests / Microsoft.CmdPal.Ext.Bookmarks.UnitTests / BookmarksCommandProviderTests.cs
BookmarksCommandProviderTests.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.Linq; 6 using System.Threading.Tasks; 7 using Microsoft.CmdPal.Ext.Bookmarks.Persistence; 8 using Microsoft.VisualStudio.TestTools.UnitTesting; 9 10 namespace Microsoft.CmdPal.Ext.Bookmarks.UnitTests; 11 12 [TestClass] 13 public class BookmarksCommandProviderTests 14 { 15 [TestMethod] 16 public void ProviderHasCorrectId() 17 { 18 // Setup 19 var mockBookmarkManager = new MockBookmarkManager(); 20 var provider = new BookmarksCommandProvider(mockBookmarkManager); 21 22 // Assert 23 Assert.AreEqual("Bookmarks", provider.Id); 24 } 25 26 [TestMethod] 27 public void ProviderHasDisplayName() 28 { 29 // Setup 30 var mockBookmarkManager = new MockBookmarkManager(); 31 var provider = new BookmarksCommandProvider(mockBookmarkManager); 32 33 // Assert 34 Assert.IsNotNull(provider.DisplayName); 35 Assert.IsTrue(provider.DisplayName.Length > 0); 36 } 37 38 [TestMethod] 39 public void ProviderHasIcon() 40 { 41 // Setup 42 var mockBookmarkManager = new MockBookmarkManager(); 43 var provider = new BookmarksCommandProvider(mockBookmarkManager); 44 45 // Assert 46 Assert.IsNotNull(provider.Icon); 47 } 48 49 [TestMethod] 50 public void TopLevelCommandsNotEmpty() 51 { 52 // Setup 53 var mockBookmarkManager = new MockBookmarkManager(); 54 var provider = new BookmarksCommandProvider(mockBookmarkManager); 55 56 // Act 57 var commands = provider.TopLevelCommands(); 58 59 // Assert 60 Assert.IsNotNull(commands); 61 Assert.IsTrue(commands.Length > 0); 62 } 63 64 [TestMethod] 65 [Timeout(5000)] 66 public async Task ProviderWithMockData_LoadsBookmarksCorrectly() 67 { 68 // Arrange 69 var mockBookmarkManager = new MockBookmarkManager( 70 new BookmarkData("Test Bookmark", "http://test.com"), 71 new BookmarkData("Another Bookmark", "http://another.com")); 72 var provider = new BookmarksCommandProvider(mockBookmarkManager); 73 74 // Act 75 var commands = provider.TopLevelCommands(); 76 77 // Assert 78 Assert.IsNotNull(commands, "commands != null"); 79 80 // Should have three commands:Add + two custom bookmarks 81 Assert.AreEqual(3, commands.Length); 82 83 // Wait until all BookmarkListItem commands are initialized 84 await Task.WhenAll(commands.OfType<Pages.BookmarkListItem>().Select(t => t.IsInitialized)); 85 86 var addCommand = commands.FirstOrDefault(c => c.Title.Contains("Add bookmark")); 87 var testBookmark = commands.FirstOrDefault(c => c.Title.Contains("Test Bookmark")); 88 89 Assert.IsNotNull(addCommand, "addCommand != null"); 90 Assert.IsNotNull(testBookmark, "testBookmark != null"); 91 } 92 93 [TestMethod] 94 public void ProviderWithEmptyData_HasOnlyAddCommand() 95 { 96 // Arrange 97 var mockBookmarkManager = new MockBookmarkManager(); 98 var provider = new BookmarksCommandProvider(mockBookmarkManager); 99 100 // Act 101 var commands = provider.TopLevelCommands(); 102 103 // Assert 104 Assert.IsNotNull(commands); 105 106 // Only have Add command 107 Assert.AreEqual(1, commands.Length); 108 109 var addCommand = commands.FirstOrDefault(c => c.Title.Contains("Add bookmark")); 110 Assert.IsNotNull(addCommand); 111 } 112 113 [TestMethod] 114 public void ProviderWithInvalidData_HandlesGracefully() 115 { 116 // Arrange 117 var dataSource = new MockBookmarkDataSource("invalid json"); 118 var provider = new BookmarksCommandProvider(new MockBookmarkManager()); 119 120 // Act 121 var commands = provider.TopLevelCommands(); 122 123 // Assert 124 Assert.IsNotNull(commands); 125 126 // Only have one command. Will ignore json parse error. 127 Assert.AreEqual(1, commands.Length); 128 129 var addCommand = commands.FirstOrDefault(c => c.Title.Contains("Add bookmark")); 130 Assert.IsNotNull(addCommand); 131 } 132 }