summaryrefslogtreecommitdiffstats
path: root/browser/components/places/tests/browser/browser_bookmarkProperties_cancel.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/places/tests/browser/browser_bookmarkProperties_cancel.js')
-rw-r--r--browser/components/places/tests/browser/browser_bookmarkProperties_cancel.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/browser/components/places/tests/browser/browser_bookmarkProperties_cancel.js b/browser/components/places/tests/browser/browser_bookmarkProperties_cancel.js
new file mode 100644
index 0000000000..5652358acb
--- /dev/null
+++ b/browser/components/places/tests/browser/browser_bookmarkProperties_cancel.js
@@ -0,0 +1,126 @@
+"use strict";
+
+const { sinon } = ChromeUtils.importESModule(
+ "resource://testing-common/Sinon.sys.mjs"
+);
+
+const sandbox = sinon.createSandbox();
+
+registerCleanupFunction(async function () {
+ sandbox.restore();
+ await PlacesUtils.bookmarks.eraseEverything();
+ await PlacesUtils.history.clear();
+});
+
+let bookmarks; // Bookmarks added via insertTree.
+
+add_setup(async function () {
+ bookmarks = await PlacesUtils.bookmarks.insertTree({
+ guid: PlacesUtils.bookmarks.unfiledGuid,
+ children: [
+ {
+ title: "bm1",
+ url: "http://example.com",
+ },
+ {
+ title: "bm2",
+ url: "http://example.com/2",
+ },
+ ],
+ });
+
+ // Undo is called asynchronously - and not waited for. Since we're not
+ // expecting undo to be called, we can only tell this by stubbing it.
+ sandbox.stub(PlacesTransactions, "undo").returns(Promise.resolve());
+});
+
+// Tests for bug 1391393 - Ensures that if the user cancels the bookmark properties
+// dialog without having done any changes, then no undo is called.
+add_task(async function test_cancel_with_no_changes() {
+ await withSidebarTree("bookmarks", async tree => {
+ tree.selectItems([bookmarks[0].guid]);
+
+ // Delete the bookmark to put something in the undo history.
+ // Rather than calling cmd_delete, we call the remove directly, so that we
+ // can await on it finishing, and be guaranteed that there's something
+ // in the history.
+ await tree.controller.remove("Remove Selection");
+
+ tree.selectItems([bookmarks[1].guid]);
+
+ // Now open the bookmarks dialog and cancel it.
+ await withBookmarksDialog(
+ true,
+ function openDialog() {
+ tree.controller.doCommand("placesCmd_show:info");
+ },
+ async function test(dialogWin) {
+ let acceptButton = dialogWin.document
+ .getElementById("bookmarkpropertiesdialog")
+ .getButton("accept");
+ await TestUtils.waitForCondition(
+ () => !acceptButton.disabled,
+ "The accept button should be enabled"
+ );
+ }
+ );
+
+ // Check the bookmark is still removed.
+ Assert.ok(
+ !(await PlacesUtils.bookmarks.fetch(bookmarks[0].guid)),
+ "The originally removed bookmark should not exist."
+ );
+
+ Assert.ok(
+ await PlacesUtils.bookmarks.fetch(bookmarks[1].guid),
+ "The second bookmark should still exist"
+ );
+
+ Assert.ok(
+ PlacesTransactions.undo.notCalled,
+ "undo should not have been called"
+ );
+ });
+});
+
+add_task(async function test_cancel_with_changes() {
+ await withSidebarTree("bookmarks", async tree => {
+ tree.selectItems([bookmarks[1].guid]);
+
+ // Now open the bookmarks dialog and cancel it.
+ await withBookmarksDialog(
+ true,
+ function openDialog() {
+ tree.controller.doCommand("placesCmd_show:info");
+ },
+ async function test(dialogWin) {
+ let acceptButton = dialogWin.document
+ .getElementById("bookmarkpropertiesdialog")
+ .getButton("accept");
+ await TestUtils.waitForCondition(
+ () => !acceptButton.disabled,
+ "EditBookmark: The accept button should be enabled"
+ );
+
+ let namePicker = dialogWin.document.getElementById(
+ "editBMPanel_namePicker"
+ );
+ fillBookmarkTextField("editBMPanel_namePicker", "new_n", dialogWin);
+
+ // Ensure that value in field has changed
+ Assert.equal(
+ namePicker.value,
+ "new_n",
+ "EditBookmark: The title is the expected one."
+ );
+ }
+ );
+
+ let oldBookmark = await PlacesUtils.bookmarks.fetch(bookmarks[1].guid);
+ Assert.equal(
+ oldBookmark.title,
+ "bm2",
+ "EditBookmark: The title hasn't been changed"
+ );
+ });
+});