Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 1 | // Copyright 2022 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | import {assert} from 'chai'; |
| 6 | |
| 7 | import { |
| 8 | $$, |
| 9 | click, |
| 10 | goToResource, |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 11 | hasClass, |
| 12 | pressKey, |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 13 | step, |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 14 | typeText, |
| 15 | waitFor, |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 16 | waitForAria, |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 17 | waitForFunction, |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 18 | waitForNone, |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 19 | } from '../../shared/helper.js'; |
| 20 | import {describe, it} from '../../shared/mocha-extensions.js'; |
Benedikt Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 21 | import {openSoftContextMenuAndClickOnItem} from '../helpers/context-menu-helpers.js'; |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 22 | import { |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 23 | openNetworkTab, |
| 24 | selectRequestByName, |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 25 | setCacheDisabled, |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 26 | waitForSomeRequestsToAppear, |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 27 | } from '../helpers/network-helpers.js'; |
| 28 | import { |
| 29 | readQuickOpenResults, |
| 30 | typeIntoQuickOpen, |
| 31 | } from '../helpers/quick_open-helpers.js'; |
| 32 | import { |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 33 | ENABLE_OVERRIDES_SELECTOR, |
| 34 | enableLocalOverrides, |
| 35 | openSourcesPanel, |
| 36 | } from '../helpers/sources-helpers.js'; |
| 37 | |
| 38 | const OVERRIDES_FILESYSTEM_SELECTOR = '[aria-label="overrides, fs"]'; |
| 39 | |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 40 | async function waitForOverrideContentMenuItemIsEnabled(requestName: string) { |
| 41 | await waitForFunction(async () => { |
| 42 | await selectRequestByName(requestName, {button: 'right'}); |
| 43 | const menuItem = await waitForAria('Override content'); |
| 44 | const isDisabled = await hasClass(menuItem, 'soft-context-menu-disabled'); |
| 45 | if (!isDisabled) { |
| 46 | return true; |
| 47 | } |
| 48 | await pressKey('Escape'); |
| 49 | return false; |
| 50 | }); |
| 51 | } |
| 52 | |
Benedikt Meurer | cb7952f | 2024-02-21 13:32:23 | [diff] [blame^] | 53 | describe('Overrides panel', function() { |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 54 | afterEach(async () => { |
| 55 | await openSourcesPanel(); |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 56 | await click('[aria-label="Overrides"]'); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 57 | await click('[aria-label="Clear configuration"]'); |
| 58 | await waitFor(ENABLE_OVERRIDES_SELECTOR); |
| 59 | }); |
| 60 | |
| 61 | it('can create multiple new files', async () => { |
| 62 | await goToResource('empty.html'); |
| 63 | await openSourcesPanel(); |
| 64 | await enableLocalOverrides(); |
Benedikt Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 65 | await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file'); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 66 | await waitFor('[aria-label="NewFile, file"]'); |
| 67 | await typeText('foo\n'); |
| 68 | |
Benedikt Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 69 | await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file'); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 70 | await waitFor('[aria-label="NewFile, file"]'); |
| 71 | await typeText('bar\n'); |
Wolfgang Beyer | 94f99c3 | 2022-08-24 08:22:08 | [diff] [blame] | 72 | await waitFor('[aria-label="bar, file"]'); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 73 | |
| 74 | const treeItems = await $$('.navigator-file-tree-item'); |
| 75 | const treeItemNames = await Promise.all(treeItems.map(x => x.evaluate(y => y.textContent))); |
| 76 | assert.deepEqual(treeItemNames, ['bar', 'foo']); |
| 77 | }); |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 78 | |
| 79 | it('can save fetch request for overrides via network panel', async () => { |
| 80 | await step('enable overrides', async () => { |
| 81 | await goToResource('network/fetch-json.html'); |
| 82 | await openSourcesPanel(); |
| 83 | await enableLocalOverrides(); |
| 84 | }); |
| 85 | |
| 86 | await step('can create content overrides via request\'s context menu', async () => { |
| 87 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 88 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 89 | await click('aria/Override content'); |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 90 | await waitFor('[aria-label="coffees.json, file"]'); |
| 91 | }); |
| 92 | |
| 93 | await step('should not show fetch request in the Sources > Page Tree', async () => { |
| 94 | const pageTree = await waitForAria('Page'); |
| 95 | await pageTree.click(); |
| 96 | |
| 97 | const treeItems = await $$('.navigator-file-tree-item'); |
| 98 | const treeItemNames = (await Promise.all(treeItems.map(x => x.evaluate(y => y.textContent)))); |
| 99 | assert.isFalse(treeItemNames?.includes('coffees.json')); |
| 100 | }); |
| 101 | |
| 102 | await step('should show overidden fetch request in Quick Open', async () => { |
| 103 | await typeIntoQuickOpen('coffees.json'); |
| 104 | const list = await readQuickOpenResults(); |
| 105 | assert.deepEqual(list, ['coffees.json']); |
| 106 | }); |
| 107 | }); |
| 108 | |
| 109 | it('can save XHR request for overrides via network panel', async () => { |
| 110 | await step('enable overrides', async () => { |
| 111 | await goToResource('network/xhr-json.html'); |
| 112 | await openSourcesPanel(); |
| 113 | await enableLocalOverrides(); |
| 114 | }); |
| 115 | |
| 116 | await step('can create content overrides via request\'s context menu', async () => { |
| 117 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 118 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 119 | await click('aria/Override content'); |
Jecelyn Yeen | 67b8ebb | 2023-07-31 11:22:19 | [diff] [blame] | 120 | await waitFor('[aria-label="coffees.json, file"]'); |
| 121 | }); |
| 122 | |
| 123 | await step('should not show xhr request in the Sources > Page Tree', async () => { |
| 124 | const pageTree = await waitForAria('Page'); |
| 125 | await pageTree.click(); |
| 126 | |
| 127 | const treeItems = await $$('.navigator-file-tree-item'); |
| 128 | const treeItemNames = (await Promise.all(treeItems.map(x => x.evaluate(y => y.textContent)))); |
| 129 | assert.isFalse(treeItemNames?.includes('coffees.json')); |
| 130 | }); |
| 131 | |
| 132 | await step('should show overidden xhr request in Quick Open', async () => { |
| 133 | await typeIntoQuickOpen('coffees.json'); |
| 134 | const list = await readQuickOpenResults(); |
| 135 | assert.deepEqual(list, ['coffees.json']); |
| 136 | }); |
| 137 | }); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 138 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 139 | it('can always override content via the Network panel', async () => { |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 140 | await step('can override without local overrides folder set up', async () => { |
| 141 | await goToResource('network/fetch-json.html'); |
| 142 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 143 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 144 | await click('aria/Override content'); |
| 145 | |
| 146 | // File permission pop up |
| 147 | const infoBar = await waitForAria('Select a folder to store override files in.'); |
| 148 | await click('.infobar-main-row .infobar-button', {root: infoBar}); |
| 149 | |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 150 | // Open & close the file in the Sources panel |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 151 | const fileTab = await waitFor('[aria-label="coffees.json, file"]'); |
| 152 | assert.isNotNull(fileTab); |
| 153 | |
| 154 | await click('aria/Close coffees.json'); |
| 155 | }); |
| 156 | |
| 157 | await step('can open the overridden file in the Sources panel if it exists', async () => { |
| 158 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 159 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 160 | await click('aria/Override content'); |
| 161 | |
| 162 | // No file permission pop up |
| 163 | const popups = await $$('aria/Select a folder to store override files in.', undefined, 'aria'); |
| 164 | assert.strictEqual(popups.length, 0); |
| 165 | |
| 166 | // Open & close the file in the Sources panel |
| 167 | const fileTab = await waitFor('[aria-label="coffees.json, file"]'); |
| 168 | assert.isNotNull(fileTab); |
| 169 | |
| 170 | await click('aria/Close coffees.json'); |
| 171 | }); |
| 172 | |
| 173 | await step('can enable the local overrides setting and override content', async () => { |
| 174 | // Disable Local overrides |
| 175 | await click('aria/Enable Local Overrides'); |
| 176 | |
| 177 | // Navigate to files |
| 178 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 179 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 5cc2374 | 2023-08-01 13:12:41 | [diff] [blame] | 180 | await click('aria/Override content'); |
| 181 | |
| 182 | // No file permission pop up |
| 183 | const popups = await $$('aria/Select a folder to store override files in.', undefined, 'aria'); |
| 184 | assert.strictEqual(popups.length, 0); |
| 185 | |
| 186 | // Open & close the file in the Sources panel |
| 187 | const fileTab = await waitFor('[aria-label="coffees.json, file"]'); |
| 188 | assert.isNotNull(fileTab); |
| 189 | |
| 190 | await click('aria/Close coffees.json'); |
| 191 | }); |
| 192 | }); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 193 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 194 | it('overrides indicator on the Network panel title', async () => { |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 195 | await step('no indicator when overrides setting is disabled', async () => { |
| 196 | await goToResource('network/fetch-json.html'); |
| 197 | |
| 198 | await openNetworkTab(); |
| 199 | const networkPanel = await waitFor('.tabbed-pane-header-tab.selected'); |
| 200 | const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon'); |
| 201 | |
| 202 | assert.strictEqual(icons.length, 0); |
| 203 | }); |
| 204 | |
| 205 | await step('shows indicator when overrides setting is enabled', async () => { |
| 206 | // Set up & enable overrides |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 207 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 208 | await click('aria/Override content'); |
| 209 | |
| 210 | // File permission pop up |
| 211 | const infoBar = await waitForAria('Select a folder to store override files in.'); |
| 212 | await click('.infobar-main-row .infobar-button', {root: infoBar}); |
| 213 | await waitFor('[aria-label="coffees.json, file"]'); |
| 214 | |
| 215 | await openNetworkTab(); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 216 | await setCacheDisabled(false); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 217 | const networkPanel = await waitFor('.tabbed-pane-header-tab.selected'); |
| 218 | const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon'); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 219 | const iconTitleElement = await icons[0].$('aria/Requests may be overridden locally, see the Sources panel'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 220 | |
| 221 | assert.strictEqual(icons.length, 1); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 222 | assert.isNotNull(iconTitleElement); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 223 | }); |
| 224 | |
| 225 | await step('no indicator after clearing overrides configuration', async () => { |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 226 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 227 | await click('aria/Override content'); |
| 228 | await click('aria/Clear configuration'); |
| 229 | |
| 230 | await openNetworkTab(); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 231 | await setCacheDisabled(false); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 232 | const networkPanel = await waitFor('.tabbed-pane-header-tab.selected'); |
| 233 | const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon'); |
| 234 | |
| 235 | assert.strictEqual(icons.length, 0); |
| 236 | }); |
| 237 | |
| 238 | await step('shows indicator after enabling override in Overrides tab', async () => { |
| 239 | await click('aria/Sources'); |
| 240 | await click('aria/Select folder for overrides'); |
Benedikt Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 241 | await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 242 | await waitFor('[aria-label="NewFile, file"]'); |
| 243 | |
| 244 | await openNetworkTab(); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 245 | await setCacheDisabled(false); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 246 | const networkPanel = await waitFor('.tabbed-pane-header-tab.selected'); |
| 247 | const icons = await networkPanel.$$('.tabbed-pane-header-tab-icon'); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 248 | const iconTitleElement = await icons[0].$('aria/Requests may be overridden locally, see the Sources panel'); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 249 | |
| 250 | assert.strictEqual(icons.length, 1); |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 251 | assert.isNotNull(iconTitleElement); |
Jecelyn Yeen | 57fdda4 | 2023-08-06 23:33:15 | [diff] [blame] | 252 | }); |
| 253 | }); |
Jecelyn Yeen | 3755eef | 2023-08-07 10:04:02 | [diff] [blame] | 254 | |
| 255 | it('can show all overrides in the Sources panel', async () => { |
| 256 | await step('when overrides setting is disabled', async () => { |
| 257 | await goToResource('network/fetch-json.html'); |
| 258 | |
| 259 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 260 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 3755eef | 2023-08-07 10:04:02 | [diff] [blame] | 261 | await click('aria/Show all overrides'); |
| 262 | |
| 263 | // In the Sources panel |
| 264 | await waitForAria('Select folder for overrides'); |
| 265 | |
| 266 | const assertElements = await $$('Select folder for overrides', undefined, 'aria'); |
| 267 | assert.strictEqual(assertElements.length, 1); |
| 268 | }); |
| 269 | |
| 270 | await step('when overrides setting is enabled', async () => { |
| 271 | // Set up & enable overrides in the Sources panel |
| 272 | await click('aria/Select folder for overrides'); |
Benedikt Meurer | 5a9f699 | 2023-12-14 14:25:24 | [diff] [blame] | 273 | await openSoftContextMenuAndClickOnItem(OVERRIDES_FILESYSTEM_SELECTOR, 'New file'); |
Jecelyn Yeen | 3755eef | 2023-08-07 10:04:02 | [diff] [blame] | 274 | |
| 275 | await openNetworkTab(); |
| 276 | await selectRequestByName('coffees.json', {button: 'right'}); |
| 277 | await click('aria/Show all overrides'); |
| 278 | |
| 279 | // In the Sources panel |
| 280 | await waitForAria('Enable Local Overrides'); |
| 281 | |
| 282 | const assertElements = await $$('Enable Local Overrides', undefined, 'aria'); |
| 283 | assert.strictEqual(assertElements.length, 1); |
| 284 | }); |
| 285 | }); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 286 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 287 | it('has correct context menu for overrides files', async () => { |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 288 | await goToResource('network/fetch-json.html'); |
| 289 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 290 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 291 | await click('aria/Override content'); |
| 292 | |
| 293 | // File permission pop up |
| 294 | const infoBar = await waitForAria('Select a folder to store override files in.'); |
| 295 | await click('.infobar-main-row .infobar-button', {root: infoBar}); |
| 296 | |
| 297 | // Open the file in the Sources panel |
| 298 | const fileTab = await waitFor('[aria-label="coffees.json, file"]'); |
| 299 | await fileTab.click({button: 'right'}); |
| 300 | |
| 301 | const assertShowAllElements = await $$('Show all overrides', undefined, 'aria'); |
| 302 | const assertAddFolderElements = await $$('Add folder to workspace', undefined, 'aria'); |
| 303 | const assertOverrideContentElements = await $$('Override content', undefined, 'aria'); |
| 304 | const assertOpenInElements = await $$('Open in containing folder', undefined, 'aria'); |
| 305 | |
| 306 | assert.strictEqual(assertShowAllElements.length, 0); |
| 307 | assert.strictEqual(assertAddFolderElements.length, 0); |
| 308 | assert.strictEqual(assertOverrideContentElements.length, 0); |
| 309 | assert.strictEqual(assertOpenInElements.length, 1); |
| 310 | }); |
| 311 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 312 | it('has correct context menu for main overrides folder', async () => { |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 313 | await goToResource('network/fetch-json.html'); |
| 314 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 315 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 316 | await click('aria/Override content'); |
| 317 | |
| 318 | // File permission pop up |
| 319 | const infoBar = await waitForAria('Select a folder to store override files in.'); |
| 320 | await click('.infobar-main-row .infobar-button', {root: infoBar}); |
| 321 | |
| 322 | // Open the main folder in the Sources panel |
| 323 | await waitFor('[aria-label="coffees.json, file"]'); |
| 324 | const folderTab = await waitFor('.navigator-folder-tree-item'); |
| 325 | await folderTab.click({button: 'right'}); |
| 326 | |
| 327 | const assertAddFolderElements = await $$('Add folder to workspace', undefined, 'aria'); |
| 328 | const assertRemoveFolderElements = await $$('Remove folder from workspace', undefined, 'aria'); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 329 | const assertDeleteElements = await $$('Delete', undefined, 'aria'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 330 | |
| 331 | assert.strictEqual(assertAddFolderElements.length, 0); |
| 332 | assert.strictEqual(assertRemoveFolderElements.length, 0); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 333 | assert.strictEqual(assertDeleteElements.length, 0); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 334 | }); |
| 335 | |
Wolfgang Beyer | fe7f114 | 2023-12-11 14:22:56 | [diff] [blame] | 336 | it('has correct context menu for sub overrides folder', async () => { |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 337 | await goToResource('network/fetch-json.html'); |
| 338 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 339 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 340 | await click('aria/Override content'); |
| 341 | |
| 342 | // File permission pop up |
| 343 | const infoBar = await waitForAria('Select a folder to store override files in.'); |
| 344 | await click('.infobar-main-row .infobar-button', {root: infoBar}); |
| 345 | |
| 346 | // Open the sub folder in the Sources panel |
| 347 | await waitFor('[aria-label="coffees.json, file"]'); |
| 348 | const subfolderTab = await waitFor('[role="group"] > .navigator-folder-tree-item'); |
| 349 | await subfolderTab.click({button: 'right'}); |
| 350 | |
| 351 | const assertAddFolderElements = await $$('Add folder to workspace', undefined, 'aria'); |
| 352 | const assertRemoveFolderElements = await $$('Remove folder from workspace', undefined, 'aria'); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 353 | const assertDeleteElements = await $$('Delete', undefined, 'aria'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 354 | |
| 355 | assert.strictEqual(assertAddFolderElements.length, 0); |
| 356 | assert.strictEqual(assertRemoveFolderElements.length, 0); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 357 | assert.strictEqual(assertDeleteElements.length, 1); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 358 | }); |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 359 | |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 360 | it('show redirect dialog when override content of source mapped js file', async () => { |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 361 | await goToResource('sources/sourcemap-origin.html'); |
| 362 | await openSourcesPanel(); |
| 363 | await enableLocalOverrides(); |
| 364 | |
| 365 | await openNetworkTab(); |
| 366 | await waitForSomeRequestsToAppear(4); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 367 | await waitForOverrideContentMenuItemIsEnabled('sourcemap-origin.min.js'); |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 368 | await click('aria/Open in Sources panel'); |
| 369 | |
| 370 | // Actual file > Has override content |
| 371 | const file = await waitFor('[aria-label="sourcemap-origin.min.js"]'); |
| 372 | await file.click({button: 'right'}); |
| 373 | await click('aria/Close'); |
| 374 | |
| 375 | // Source mapped file > Show redirect confirmation dialog |
| 376 | const mappedfile = await waitFor('[aria-label="sourcemap-origin.js, file"]'); |
| 377 | await mappedfile.click({button: 'right'}); |
| 378 | await click('aria/Override content'); |
| 379 | const p = await waitFor('.dimmed-pane'); |
| 380 | const dialog = await p.waitForSelector('>>>> [role="dialog"]'); |
| 381 | const okButton = await dialog?.waitForSelector('>>> .primary-button'); |
| 382 | await okButton?.click(); |
| 383 | await waitFor('[aria-label="Close sourcemap-origin.min.js"]'); |
| 384 | }); |
| 385 | |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 386 | it('show redirect dialog when override content of source mapped css file', async () => { |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 387 | await goToResource('sources/sourcemap-origin.html'); |
| 388 | await openSourcesPanel(); |
| 389 | await enableLocalOverrides(); |
| 390 | |
| 391 | await openNetworkTab(); |
| 392 | await waitForSomeRequestsToAppear(4); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 393 | await waitForOverrideContentMenuItemIsEnabled('sourcemap-origin.css'); |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 394 | await click('aria/Open in Sources panel'); |
| 395 | |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 396 | // Actual file > Has override content |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 397 | const file = await waitFor('[aria-label="sourcemap-origin.css"]'); |
| 398 | await file.click({button: 'right'}); |
| 399 | await click('aria/Close'); |
| 400 | |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 401 | // Source mapped file > Show redirect confirmation dialog |
Jecelyn Yeen | 2b9c9f9 | 2023-08-25 08:15:47 | [diff] [blame] | 402 | const mappedfile = await waitFor('[aria-label="sourcemap-origin.scss, file"]'); |
| 403 | await mappedfile.click({button: 'right'}); |
| 404 | await click('aria/Override content'); |
| 405 | const p = await waitFor('.dimmed-pane'); |
| 406 | const dialog = await p.waitForSelector('>>>> [role="dialog"]'); |
| 407 | const okButton = await dialog?.waitForSelector('>>> .primary-button'); |
| 408 | await okButton?.click(); |
| 409 | await waitFor('[aria-label="Close sourcemap-origin.css"]'); |
| 410 | }); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 411 | }); |
| 412 | |
| 413 | describe('Overrides panel', () => { |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 414 | it('appends correct overrides context menu for Sources > Page file', async () => { |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 415 | await goToResource('elements/elements-panel-styles.html'); |
| 416 | await openNetworkTab(); |
| 417 | await waitForSomeRequestsToAppear(2); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 418 | await waitForOverrideContentMenuItemIsEnabled('elements-panel-styles.css'); |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 419 | await click('aria/Open in Sources panel'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 420 | |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 421 | // Open the file in the Sources panel |
| 422 | const file = await waitFor('[aria-label="elements-panel-styles.css, file"]'); |
| 423 | await file.click({button: 'right'}); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 424 | |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 425 | const assertShowAllElements = await $$('Show all overrides', undefined, 'aria'); |
| 426 | const assertOverridesContentElements = await $$('Override content', undefined, 'aria'); |
Jecelyn Yeen | 69e6143 | 2023-08-08 08:59:53 | [diff] [blame] | 427 | |
Jecelyn Yeen | 2dec31e | 2023-08-23 12:13:07 | [diff] [blame] | 428 | assert.strictEqual(assertShowAllElements.length, 0); |
| 429 | assert.strictEqual(assertOverridesContentElements.length, 1); |
| 430 | }); |
Wolfgang Beyer | ceebc65 | 2022-08-22 11:24:58 | [diff] [blame] | 431 | }); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 432 | |
| 433 | describe('Overrides panel > Delete context menus', () => { |
| 434 | beforeEach(async () => { |
| 435 | // set up 3 overriden files - .header, json, custom js |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 436 | await goToResource('network/fetch-json.html'); |
| 437 | await openSourcesPanel(); |
| 438 | await enableLocalOverrides(); |
| 439 | |
| 440 | await step('add a content override file', async () => { |
| 441 | await openNetworkTab(); |
Wolfgang Beyer | 733ddfa | 2024-01-16 11:53:57 | [diff] [blame] | 442 | await waitForOverrideContentMenuItemIsEnabled('coffees.json'); |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 443 | await click('aria/Override content'); |
| 444 | }); |
| 445 | |
| 446 | await step('add a custom override file', async () => { |
| 447 | const subfolderTab = await waitFor('[role="group"] > .navigator-folder-tree-item'); |
| 448 | await subfolderTab.click({button: 'right'}); |
| 449 | await click('aria/New file'); |
| 450 | await waitFor('[aria-label="NewFile, file"]'); |
| 451 | await typeText('foo.js\n'); |
| 452 | }); |
| 453 | |
| 454 | await step('add a header override file', async () => { |
| 455 | await openNetworkTab(); |
| 456 | await selectRequestByName('coffees.json', {button: 'right'}); |
| 457 | await click('aria/Override headers'); |
| 458 | await waitFor('[title="Reveal header override definitions"]'); |
| 459 | }); |
| 460 | }); |
| 461 | |
| 462 | afterEach(async () => { |
| 463 | await click('[aria-label="Clear configuration"]'); |
| 464 | await waitFor(ENABLE_OVERRIDES_SELECTOR); |
| 465 | }); |
| 466 | |
Jecelyn Yeen | fca7018 | 2023-08-18 10:14:41 | [diff] [blame] | 467 | it('delete all files from sub folder', async () => { |
| 468 | await step('files exist in Sources panel', async () => { |
| 469 | await selectRequestByName('coffees.json', {button: 'right'}); |
| 470 | await click('aria/Show all overrides'); |
| 471 | |
| 472 | await waitFor('[aria-label=".headers, file"]'); |
| 473 | await waitFor('[aria-label="coffees.json, file"]'); |
| 474 | await waitFor('[aria-label="foo.js, file"]'); |
| 475 | }); |
| 476 | |
| 477 | await step('delete all files', async () => { |
| 478 | const subfolderTab = await waitFor('[role="group"] > .navigator-folder-tree-item'); |
| 479 | await subfolderTab.click({button: 'right'}); |
| 480 | |
| 481 | await click('aria/Delete'); |
| 482 | await waitFor('[role="dialog"]'); |
| 483 | await click('aria/OK'); |
| 484 | await waitForNone('[role="dialog"]'); |
| 485 | |
| 486 | const treeItems = await $$('.navigator-file-tree-item'); |
| 487 | assert.strictEqual(treeItems.length, 0); |
| 488 | }); |
| 489 | }); |
| 490 | }); |