Bug 615410 - More tests for the bookmark store. r=mconnor
☠☠ backed out by 84fe21efcb57 ☠ ☠
authorPhilipp von Weitershausen <philipp@weitershausen.de>
Mon, 06 Dec 2010 15:51:33 -0800
changeset 58760 a29a2a0ae764266dc436b105723a7364a577dff7
parent 58759 d2fd62ffd88e9c81bfe0271303a0e9f54cc51071
child 58761 3e74c1c15b63bece3bef6664d19cb69cb39eefa6
push id17416
push userpweitershausen@mozilla.com
push dateTue, 07 Dec 2010 07:05:47 +0000
treeherdermozilla-central@4d16d58becaf [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmconnor
bugs615410
Bug 615410 - More tests for the bookmark store. r=mconnor
services/sync/tests/unit/test_bookmark_store.js
--- a/services/sync/tests/unit/test_bookmark_store.js
+++ b/services/sync/tests/unit/test_bookmark_store.js
@@ -1,56 +1,156 @@
 Cu.import("resource://services-sync/engines/bookmarks.js");
+Cu.import("resource://services-sync/type_records/bookmark.js");
 Cu.import("resource://services-sync/util.js");
 
-function run_test() {
-  let store = new BookmarksEngine()._store;
-  store.wipe();
+let store = new BookmarksEngine()._store;
+let fxuri = Utils.makeURI("http://getfirefox.com/");
+let tburi = Utils.makeURI("http://getthunderbird.com/");
 
+function test_bookmark_create() {
   try {
     _("Ensure the record isn't present yet.");
-    let fxuri = Utils.makeURI("http://getfirefox.com/");
     let ids = Svc.Bookmark.getBookmarkIdsForURI(fxuri, {});
     do_check_eq(ids.length, 0);
 
     _("Let's create a new record.");
-    let fxrecord = {id: "{5d81b87c-d5fc-42d9-a114-d69b7342f10e}0",
-                    type: "bookmark",
-                    bmkUri: fxuri.spec,
-                    title: "Get Firefox!",
-                    tags: [],
-                    keyword: "awesome",
-                    loadInSidebar: false,
-                    parentName: "Bookmarks Toolbar",
-                    parentid: "toolbar"};
+    let fxrecord = new Bookmark("bookmarks",
+                                "{5d81b87c-d5fc-42d9-a114-d69b7342f10e}0");
+    fxrecord.bmkUri        = fxuri.spec;
+    fxrecord.description   = "Firefox is awesome.";
+    fxrecord.title         = "Get Firefox!";
+    fxrecord.tags          = ["firefox", "awesome", "browser"];
+    fxrecord.keyword       = "awesome";
+    fxrecord.loadInSidebar = false;
+    fxrecord.parentName    = "Bookmarks Toolbar";
+    fxrecord.parentid      = "toolbar";
     store.applyIncoming(fxrecord);
 
     _("Verify it has been created correctly.");
-    ids = Svc.Bookmark.getBookmarkIdsForURI(fxuri, {});
-    do_check_eq(ids.length, 1);
-    let id = ids[0];
+    let id = Svc.Bookmark.getItemIdForGUID(fxrecord.id);
     do_check_eq(Svc.Bookmark.getItemGUID(id), fxrecord.id);
     do_check_eq(Svc.Bookmark.getItemType(id), Svc.Bookmark.TYPE_BOOKMARK);
     do_check_eq(Svc.Bookmark.getItemTitle(id), fxrecord.title);
     do_check_eq(Svc.Bookmark.getFolderIdForItem(id),
                 Svc.Bookmark.toolbarFolder);
     do_check_eq(Svc.Bookmark.getKeywordForBookmark(id), fxrecord.keyword);
 
     _("Have the store create a new record object. Verify that it has the same data.");
     let newrecord = store.createRecord(fxrecord.id);
-    for each (let property in ["type", "bmkUri", "title", "keyword",
-                               "parentName", "parentid"])
-      do_check_eq(newrecord[property], fxrecord[property]);      
+    do_check_true(newrecord instanceof Bookmark);
+    for each (let property in ["type", "bmkUri", "description", "title",
+                               "keyword", "parentName", "parentid"])
+      do_check_eq(newrecord[property], fxrecord[property]);
+    do_check_true(Utils.deepEquals(newrecord.tags.sort(),
+                                   fxrecord.tags.sort()));
 
     _("The calculated sort index is based on frecency data.");
     do_check_true(newrecord.sortindex >= 150);
+  } finally {
+    _("Clean up.");
+    store.wipe();
+  }
+}
+
+function test_folder_create() {
+  try {
+    _("Create a folder.");
+    let folder = new BookmarkFolder("bookmarks",
+                                    "{5d81b87c-d5fc-42d9-a114-d69b7342f10e}0");
+    folder.parentName = "Bookmarks Toolbar";
+    folder.parentid   = "toolbar";
+    folder.title      = "Test Folder";
+    store.applyIncoming(folder);
+
+    _("Verify it has been created correctly.");
+    let id = Svc.Bookmark.getItemIdForGUID(folder.id);
+    do_check_eq(Svc.Bookmark.getItemType(id), Svc.Bookmark.TYPE_FOLDER);
+    do_check_eq(Svc.Bookmark.getItemTitle(id), folder.title);
+    do_check_eq(Svc.Bookmark.getFolderIdForItem(id),
+                Svc.Bookmark.toolbarFolder);
+
+    _("Have the store create a new record object. Verify that it has the same data.");
+    let newrecord = store.createRecord(folder.id);
+    do_check_true(newrecord instanceof BookmarkFolder);
+    for each (let property in ["title","title", "parentName", "parentid"])
+      do_check_eq(newrecord[property], folder[property]);      
 
     _("Folders have high sort index to ensure they're synced first.");
-    let folder_id = Svc.Bookmark.createFolder(Svc.Bookmark.toolbarFolder,
-                                              "Test Folder", 0);
-    let folder_guid = Svc.Bookmark.getItemGUID(folder_id);
-    let folder_record = store.createRecord(folder_guid);
-    do_check_eq(folder_record.sortindex, 1000000);
+    do_check_eq(newrecord.sortindex, 1000000);
   } finally {
     _("Clean up.");
     store.wipe();
   }
 }
+
+function test_move_folder() {
+  try {
+    _("Create two folders and a bookmark in one of them.");
+    let folder1_id = Svc.Bookmark.createFolder(
+      Svc.Bookmark.toolbarFolder, "Folder1", 0);
+    let folder1_guid = Svc.Bookmark.getItemGUID(folder1_id);
+    let folder2_id = Svc.Bookmark.createFolder(
+      Svc.Bookmark.toolbarFolder, "Folder2", 0);
+    let folder2_guid = Svc.Bookmark.getItemGUID(folder2_id);
+    let bmk_id = Svc.Bookmark.insertBookmark(
+      folder1_id, fxuri, Svc.Bookmark.DEFAULT_INDEX, "Get Firefox!");
+    let bmk_guid = Svc.Bookmark.getItemGUID(bmk_id);
+
+    _("Get a record, reparent it and apply it to the store.");
+    let record = store.createRecord(bmk_guid);
+    do_check_eq(record.parentid, folder1_guid);
+    record.parentid = folder2_guid;
+    record.description = ""; //TODO for some reason we need this
+    store.applyIncoming(record);
+
+    _("Verify the new parent.");
+    let new_folder_id = Svc.Bookmark.getFolderIdForItem(bmk_id);
+    do_check_eq(Svc.Bookmark.getItemGUID(new_folder_id), folder2_guid);
+  } finally {
+    _("Clean up.");
+    store.wipe();
+  }
+}
+
+function test_move_order() {
+  try {
+    _("Create two bookmarks");
+    let bmk1_id = Svc.Bookmark.insertBookmark(
+      Svc.Bookmark.toolbarFolder, fxuri, Svc.Bookmark.DEFAULT_INDEX,
+      "Get Firefox!");
+    let bmk1_guid = Svc.Bookmark.getItemGUID(bmk1_id);
+    let bmk2_id = Svc.Bookmark.insertBookmark(
+      Svc.Bookmark.toolbarFolder, tburi, Svc.Bookmark.DEFAULT_INDEX,
+      "Get Thunderbird!");
+    let bmk2_guid = Svc.Bookmark.getItemGUID(bmk2_id);
+
+    _("Verify order.");
+    do_check_eq(Svc.Bookmark.getItemIndex(bmk1_id), 0);
+    do_check_eq(Svc.Bookmark.getItemIndex(bmk2_id), 1);
+    let rec1 = store.createRecord(bmk1_guid);
+    let rec2 = store.createRecord(bmk2_guid);
+    do_check_eq(rec1.predecessorid, undefined);
+    do_check_eq(rec2.predecessorid, rec1.id);
+
+    _("Move bookmarks around.");
+    rec2.predecessorid = null;
+    rec1.predecessorid = rec2.id;
+    rec2.description = rec1.description = ""; //TODO for some reason we need this
+    store.applyIncoming(rec2);
+    store.applyIncoming(rec1);
+
+    _("Verify new order.");
+    do_check_eq(Svc.Bookmark.getItemIndex(bmk2_id), 0);
+    do_check_eq(Svc.Bookmark.getItemIndex(bmk1_id), 1);
+
+  } finally {
+    _("Clean up.");
+    store.wipe();
+  }
+}
+
+function run_test() {
+  test_bookmark_create();
+  test_folder_create();
+  test_move_folder();
+  test_move_order();
+}