test_backup_settings.html (13094B)
1 <!DOCTYPE HTML> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>Tests for the BackupSettings component</title> 6 <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script> 7 <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> 8 <script type="application/javascript" src="head.js"></script> 9 <script 10 src="chrome://browser/content/backup/backup-settings.mjs" 11 type="module" 12 ></script> 13 <link rel="stylesheet" href="chrome://mochikit/content/tests/SimpleTest/test.css"/> 14 <link rel="localization" href="branding/brand.ftl"/> 15 <link rel="localization" href="browser/backupSettings.ftl" /> 16 <script> 17 18 const { BrowserTestUtils } = ChromeUtils.importESModule( 19 "resource://testing-common/BrowserTestUtils.sys.mjs" 20 ); 21 22 /** 23 * Tests that adding a backup-settings element to the DOM causes it to 24 * fire a BackupUI:InitWidget event. 25 */ 26 add_task(async function test_initWidget() { 27 let settings = document.createElement("backup-settings"); 28 let content = document.getElementById("content"); 29 30 let sawInitWidget = BrowserTestUtils.waitForEvent(content, "BackupUI:InitWidget"); 31 content.appendChild(settings); 32 await sawInitWidget; 33 ok(true, "Saw BackupUI:InitWidget"); 34 35 settings.remove(); 36 }); 37 38 /** 39 * Tests that the dialog for turning on scheduled backups can be displayed 40 * from settings, or hidden if cancelled. 41 */ 42 add_task(async function test_turnOnScheduledBackupsDialog() { 43 let settings = document.getElementById("test-backup-settings"); 44 45 settings.backupServiceState = createBackupServiceState(); 46 47 await settings.updateComplete; 48 let turnOnButton = settings.scheduledBackupsButtonEl; 49 let dialog = settings.turnOnScheduledBackupsDialogEl; 50 51 ok(turnOnButton, "Button to turn on scheduled backups should be found"); 52 ok(!dialog.open, "Dialog should not be open"); 53 54 turnOnButton.click(); 55 await settings.updateComplete; 56 57 ok(dialog?.open, "Dialog should be open"); 58 59 let turnOnScheduledBackups = dialog.querySelector("turn-on-scheduled-backups"); 60 ok(turnOnScheduledBackups, "turn-on-scheduled-backups should be found"); 61 62 let cancelButton = turnOnScheduledBackups.shadowRoot.getElementById("backup-turn-on-scheduled-cancel-button"); 63 ok(cancelButton, "Cancel button should be found"); 64 65 cancelButton.click(); 66 await settings.updateComplete; 67 68 ok(!dialog.open, "Dialog should not be open"); 69 }); 70 71 /** 72 * Tests that the dialog for turning off scheduled backups can be displayed 73 * from settings, or hidden if cancelled. 74 */ 75 add_task(async function test_turnOffScheduledBackupsDialog() { 76 let settings = document.getElementById("test-backup-settings"); 77 settings.backupServiceState = createBackupServiceState({ 78 scheduledBackupsEnabled: true, 79 }); 80 81 await settings.updateComplete; 82 83 let turnOffButton = settings.scheduledBackupsButtonEl; 84 let dialog = settings.turnOffScheduledBackupsDialogEl; 85 86 ok(turnOffButton, "Button to turn off scheduled backups should be found"); 87 ok(!dialog.open, "Dialog should not be open"); 88 89 turnOffButton.click(); 90 await settings.updateComplete; 91 92 ok(dialog?.open, "Dialog should be open"); 93 94 let turnOffScheduledBackups = dialog.querySelector("turn-off-scheduled-backups"); 95 ok(turnOffScheduledBackups, "turn-off-scheduled-backups should be found"); 96 97 let cancelButton = turnOffScheduledBackups.shadowRoot.getElementById("backup-turn-off-scheduled-cancel-button"); 98 ok(cancelButton, "Cancel button should be found"); 99 100 cancelButton.click(); 101 await settings.updateComplete; 102 103 ok(!dialog.open, "Dialog should not be open"); 104 }); 105 106 /** 107 * Tests that the dialog for turning off scheduled backups can be displayed 108 * from settings, or hidden if cancelled. 109 */ 110 add_task(async function test_disableBackupEncryptionDialog() { 111 let settings = document.getElementById("test-backup-settings"); 112 settings.backupServiceState = createBackupServiceState({ 113 scheduledBackupsEnabled: true, 114 encryptionEnabled: true, 115 }); 116 117 await settings.updateComplete; 118 119 let sensitiveDataCheckboxInput = settings.sensitiveDataCheckboxInputEl; 120 let dialog = settings.disableBackupEncryptionDialogEl; 121 122 ok(sensitiveDataCheckboxInput, "Checkbox for toggling encryption should be found"); 123 ok(!dialog.open, "Dialog should not be open"); 124 125 sensitiveDataCheckboxInput.click(); 126 await settings.updateComplete; 127 128 ok(dialog?.open, "Dialog should be open"); 129 130 let disableBackupEncryption = dialog.querySelector("disable-backup-encryption"); 131 ok(disableBackupEncryption, "disable-backup-encryption should be found"); 132 133 let cancelButton = disableBackupEncryption.shadowRoot.getElementById("backup-disable-encryption-cancel-button"); 134 ok(cancelButton, "Cancel button should be found"); 135 136 cancelButton.click(); 137 await settings.updateComplete; 138 139 ok(!dialog.open, "Dialog should not be open"); 140 }); 141 142 /** 143 * Test that the timestamp and name of the last backup is shown if and only 144 * if one exists. 145 */ 146 add_task(async function test_lastBackupTimestamp() { 147 let settings = document.getElementById("test-backup-settings"); 148 149 settings.backupServiceState = createBackupServiceState({ 150 lastBackupDate: null, 151 lastBackupFileName: "", 152 }); 153 await settings.updateComplete; 154 let backupInfo = settings.shadowRoot.querySelector("#last-backup-info"); 155 ok(!backupInfo, "Last backup info was not rendered."); 156 157 const lastBackupTimestamp = 1719769205; 158 const lastBackupFileName = "SomeBackup.html" 159 settings.backupServiceState = createBackupServiceState({ 160 lastBackupDate: lastBackupTimestamp, 161 lastBackupFileName, 162 }); 163 await settings.updateComplete; 164 165 backupInfo = settings.shadowRoot.querySelector("#last-backup-info"); 166 ok(backupInfo, "Last backup info was rendered."); 167 168 let backupDate = backupInfo.querySelector("#last-backup-date"); 169 is( 170 JSON.parse(backupDate.getAttribute("data-l10n-args")).date, 171 lastBackupTimestamp * 1000, 172 "Should have converted the timestamp to milliseconds." 173 ); 174 let backupFilename = backupInfo.querySelector("#last-backup-filename"); 175 is( 176 JSON.parse(backupFilename.getAttribute("data-l10n-args")).fileName, 177 lastBackupFileName, 178 "Should be showing the right file name." 179 ); 180 }); 181 182 /** 183 * Test that the ability to change the configured location of the backup 184 * exists if and only if scheduled backups are enabled. 185 */ 186 add_task(async function test_backupLocation() { 187 let settings = document.getElementById("test-backup-settings"); 188 189 settings.backupServiceState = createBackupServiceState({ 190 lastBackupDate: null, 191 lastBackupFileName: "", 192 scheduledBackupsEnabled: false, 193 }); 194 await settings.updateComplete; 195 let backupLocationControl = settings.shadowRoot.querySelector("#last-backup-location-control"); 196 ok(!backupLocationControl, "Last backup location control was not rendered."); 197 198 const backupDirPath = "Some/Expected/Path"; 199 settings.backupServiceState = createBackupServiceState({ 200 scheduledBackupsEnabled: true, 201 backupDirPath, 202 }); 203 await settings.updateComplete; 204 205 backupLocationControl = settings.shadowRoot.querySelector("#last-backup-location-control"); 206 ok(backupLocationControl, "Last backup location control was rendered."); 207 208 let backupLocation = settings.shadowRoot.querySelector("#last-backup-location"); 209 is(backupLocation.value, backupDirPath, "Last backup location set to the expected value."); 210 }); 211 212 /** 213 * Test that the "Show in folder" button fires the right event. 214 */ 215 add_task(async function test_showInFolder() { 216 let settings = document.getElementById("test-backup-settings"); 217 let content = document.getElementById("content"); 218 219 const backupDirPath = "Some/Expected/Path"; 220 settings.backupServiceState = createBackupServiceState({ 221 scheduledBackupsEnabled: true, 222 backupDirPath, 223 }); 224 225 let locationShowButton = settings.shadowRoot.querySelector("#backup-location-show"); 226 ok(locationShowButton, "Backup location show button exists."); 227 228 let sawShowEvent = BrowserTestUtils.waitForEvent(content, "BackupUI:ShowBackupLocation"); 229 locationShowButton.click(); 230 await sawShowEvent; 231 }); 232 233 /** 234 * Test that the "Edit" button fires the right event. 235 */ 236 add_task(async function test_editLocation() { 237 let settings = document.getElementById("test-backup-settings"); 238 let content = document.getElementById("content"); 239 240 const backupDirPath = "Some/Expected/Path"; 241 settings.backupServiceState = createBackupServiceState({ 242 scheduledBackupsEnabled: true, 243 backupDirPath, 244 }); 245 246 let locationEditButton = settings.shadowRoot.querySelector("#backup-location-edit"); 247 ok(locationEditButton, "Backup location edit button exists."); 248 249 let sawEditEvent = BrowserTestUtils.waitForEvent(content, "BackupUI:EditBackupLocation"); 250 locationEditButton.click(); 251 await sawEditEvent; 252 }); 253 254 /** 255 * Tests that the encryption checkbox and change password button are only 256 * visible when scheduled backups are enabled. 257 */ 258 add_task(async function test_password_controls_visibility() { 259 let settings = document.getElementById("test-backup-settings"); 260 261 // First check visibility when scheduled backups are disabled 262 settings.backupServiceState = createBackupServiceState({ 263 scheduledBackupsEnabled: false, 264 }); 265 await settings.updateComplete; 266 267 ok( 268 !settings.passwordControlsEl, 269 "Password controls should not be found" 270 ); 271 272 // Now check visibility when scheduled backups are enabled 273 settings.backupServiceState.scheduledBackupsEnabled = true; 274 await settings.requestUpdate(); 275 await settings.updateComplete; 276 277 ok(settings.passwordControlsEl, "Password controls should be found"); 278 ok( 279 settings.sensitiveDataCheckboxInputEl, 280 "Password controls should be found" 281 ); 282 ok( 283 !settings.sensitiveDataCheckboxInputEl.checked, 284 "Sensitive data checkbox should not be checked" 285 ); 286 ok( 287 !settings.changePasswordButtonEl, 288 "Change password button should not be found" 289 ); 290 291 // Now pretend encryption is enabled 292 settings.backupServiceState.encryptionEnabled = true; 293 await settings.requestUpdate(); 294 await settings.updateComplete; 295 296 ok( 297 settings.sensitiveDataCheckboxInputEl.checked, 298 "Sensitive data checkbox should be checked" 299 ); 300 ok( 301 settings.changePasswordButtonEl, 302 "Change password button should be found" 303 ); 304 }); 305 306 /** 307 * Tests that the right content is displayed if scheduled automatic backups 308 * are disabled. 309 */ 310 add_task(async function test_content_when_scheduled_backups_disabled() { 311 let settings = document.getElementById("test-backup-settings"); 312 313 settings.backupServiceState = createBackupServiceState({ 314 scheduledBackupsEnabled: false, 315 }); 316 await settings.updateComplete; 317 318 ok( 319 settings.scheduledBackupsDescriptionEl, 320 "Scheduled backups description should be in the DOM" 321 ); 322 323 is( 324 settings.restoreFromBackupButtonEl.getAttribute("data-l10n-id"), 325 "settings-data-backup-scheduled-backups-off-restore-choose" 326 ); 327 328 is( 329 settings.restoreFromBackupDescriptionEl.getAttribute("data-l10n-id"), 330 "settings-data-backup-scheduled-backups-off-restore-description" 331 ); 332 }); 333 334 /** 335 * Tests that the right content is displayed if scheduled automatic backups 336 * are enabled. 337 */ 338 add_task(async function test_content_when_scheduled_backups_enabled() { 339 let settings = document.getElementById("test-backup-settings"); 340 341 settings.backupServiceState = createBackupServiceState({ 342 scheduledBackupsEnabled: true, 343 }); 344 await settings.updateComplete; 345 346 ok( 347 !settings.scheduledBackupsDescriptionEl, 348 "Scheduled backups description should not be in the DOM" 349 ); 350 351 is( 352 settings.restoreFromBackupButtonEl.getAttribute("data-l10n-id"), 353 "settings-data-backup-scheduled-backups-on-restore-choose" 354 ); 355 356 is( 357 settings.restoreFromBackupDescriptionEl.getAttribute("data-l10n-id"), 358 "settings-data-backup-scheduled-backups-on-restore-description" 359 ); 360 }); 361 </script> 362 </head> 363 <body> 364 <p id="display"></p> 365 <div id="content" style="display: none"> 366 <backup-settings id="test-backup-settings"></backup-settings> 367 </div> 368 <pre id="test"></pre> 369 </body> 370 </html>