tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>