browser_aiFeatures.js (4027B)
1 /* Any copyright is dedicated to the Public Domain. 2 https://creativecommons.org/publicdomain/zero/1.0/ */ 3 4 "use strict"; 5 6 describe("settings ai features", () => { 7 let doc, win; 8 9 beforeEach(async function setup() { 10 await SpecialPowers.pushPrefEnv({ 11 set: [["browser.settings-redesign.aiFeatures.enabled", true]], 12 }); 13 await openPreferencesViaOpenPreferencesAPI("general", { leaveOpen: true }); 14 doc = gBrowser.selectedBrowser.contentDocument; 15 win = doc.ownerGlobal; 16 }); 17 18 afterEach(() => { 19 BrowserTestUtils.removeTab(gBrowser.selectedTab); 20 }); 21 22 async function openAiFeaturePanel() { 23 const paneLoaded = waitForPaneChange("aiFeatures"); 24 const categoryButton = doc.getElementById("category-ai-features"); 25 categoryButton.scrollIntoView(); 26 EventUtils.synthesizeMouseAtCenter(categoryButton, {}, win); 27 await paneLoaded; 28 } 29 30 it("can change the chatbot provider value", async () => { 31 await SpecialPowers.pushPrefEnv({ 32 set: [["browser.ml.chat.provider", ""]], 33 }); 34 35 const categoryButton = doc.getElementById("category-ai-features"); 36 Assert.ok(categoryButton, "category exists"); 37 Assert.ok( 38 BrowserTestUtils.isVisible(categoryButton), 39 "category is visible" 40 ); 41 42 await openAiFeaturePanel(); 43 44 const providerControl = doc.getElementById("chatbotProvider"); 45 Assert.ok(providerControl, "control exists"); 46 Assert.ok( 47 BrowserTestUtils.isVisible(providerControl), 48 "control is visible" 49 ); 50 Assert.equal( 51 Services.prefs.getStringPref("browser.ml.chat.provider"), 52 "", 53 "Pref is empty" 54 ); 55 56 Assert.equal(providerControl.value, "", "No provider set"); 57 58 const settingChanged = waitForSettingChange(providerControl.setting); 59 providerControl.focus(); 60 const pickerOpened = BrowserTestUtils.waitForSelectPopupShown( 61 win.docShell.chromeEventHandler.ownerGlobal 62 ); 63 EventUtils.sendKey("space"); 64 await pickerOpened; 65 EventUtils.sendKey("down"); 66 EventUtils.sendKey("return"); 67 await settingChanged; 68 69 Assert.notEqual(providerControl.value, "", "Provider changed"); 70 Assert.notEqual( 71 Services.prefs.getStringPref("browser.ml.chat.provider"), 72 "", 73 "Pref is not empty" 74 ); 75 76 await gBrowser.ownerGlobal.SidebarController.hide(); 77 }); 78 79 it("hides AI Window when preferences not enabled", async () => { 80 await SpecialPowers.pushPrefEnv({ 81 set: [["browser.aiwindow.preferences.enabled", false]], 82 }); 83 84 await openAiFeaturePanel(); 85 86 const aiWindowItem = doc.getElementById("AIWindowItem"); 87 const aiWindowFeatures = doc.getElementById("aiFeaturesAIWindowGroup"); 88 89 Assert.ok( 90 !BrowserTestUtils.isVisible(aiWindowItem), 91 "AIWindowItem is hidden when preferences not enabled" 92 ); 93 Assert.ok( 94 !BrowserTestUtils.isVisible(aiWindowFeatures), 95 "aiWindowFeatures is hidden when preferences not enabled" 96 ); 97 }); 98 99 it("shows AI Window activate when preferences enabled and feature not enabled", async () => { 100 await SpecialPowers.pushPrefEnv({ 101 set: [ 102 ["browser.aiwindow.preferences.enabled", true], 103 ["browser.aiwindow.enabled", false], 104 ], 105 }); 106 107 await openAiFeaturePanel(); 108 109 const aiWindowItem = doc.getElementById("AIWindowItem"); 110 Assert.ok( 111 BrowserTestUtils.isVisible(aiWindowItem), 112 "AIWindowItem is visible when preferences enabled and feature not enabled" 113 ); 114 }); 115 116 it("hides AI Window activate when feature enabled", async () => { 117 await SpecialPowers.pushPrefEnv({ 118 set: [ 119 ["browser.aiwindow.preferences.enabled", true], 120 ["browser.aiwindow.enabled", true], 121 ], 122 }); 123 124 await openAiFeaturePanel(); 125 126 const aiWindowItem = doc.getElementById("AIWindowItem"); 127 Assert.ok( 128 !BrowserTestUtils.isVisible(aiWindowItem), 129 "AIWindowItem is hidden when feature enabled" 130 ); 131 }); 132 133 // TODO: Add tests for aiFeaturesAIWindowGroup when Model and Insight options are added 134 });