"use strict";

add_task(async function add_folder_default_button() {
  info(
    "Bug 475529 - Add is the default button for the new folder dialog + " +
      "Bug 1206376 - Changing properties of a new bookmark while adding it " +
      "acts on the last bookmark in the current container"
  );

  // Add a new bookmark at index 0 in the unfiled folder.
  let insertionIndex = 0;
  let newBookmark = await PlacesUtils.bookmarks.insert({
    index: insertionIndex,
    type: PlacesUtils.bookmarks.TYPE_BOOKMARK,
    parentGuid: PlacesUtils.bookmarks.unfiledGuid,
    url: "http://example.com/",
  });

  await withSidebarTree("bookmarks", async function (tree) {
    // Select the new bookmark in the sidebar.
    tree.selectItems([newBookmark.guid]);
    Assert.ok(
      tree.controller.isCommandEnabled("placesCmd_new:folder"),
      "'placesCmd_new:folder' on current selected node is enabled"
    );

    // Create a new folder.  Since the new bookmark is selected, and new items
    // are inserted at the index of the currently selected item, the new folder
    // will be inserted at index 0.
    await withBookmarksDialog(
      false,
      function openDialog() {
        tree.controller.doCommand("placesCmd_new:folder");
      },
      async function test(dialogWin) {
        const notifications = [
          PlacesTestUtils.waitForNotification("bookmark-added", events =>
            events.some(e => e.title === "n")
          ),
          PlacesTestUtils.waitForNotification("bookmark-moved", null),
        ];

        fillBookmarkTextField("editBMPanel_namePicker", "n", dialogWin, false);

        // Confirm and close the dialog.
        EventUtils.synthesizeKey("VK_RETURN", {}, dialogWin);
        await Promise.all(notifications);

        let newFolder = await PlacesUtils.bookmarks.fetch({
          parentGuid: PlacesUtils.bookmarks.unfiledGuid,
          index: insertionIndex,
        });

        is(newFolder.title, "n", "folder name has been edited");

        let bm = await PlacesUtils.bookmarks.fetch(newBookmark.guid);
        Assert.equal(
          bm.index,
          insertionIndex + 1,
          "Bookmark should have been shifted to the next index"
        );

        await PlacesUtils.bookmarks.remove(newFolder);
        await PlacesUtils.bookmarks.remove(newBookmark);
      }
    );
  });
});
