Index: sync/engine/process_updates_command_unittest.cc |
diff --git a/sync/engine/process_updates_command_unittest.cc b/sync/engine/process_updates_command_unittest.cc |
index f4cc583dc29c38ccf8f9eb82c5db6c505c16e888..362e7b2766913aee0d361f75dda90290fa5c240c 100644 |
--- a/sync/engine/process_updates_command_unittest.cc |
+++ b/sync/engine/process_updates_command_unittest.cc |
@@ -5,15 +5,20 @@ |
#include "base/basictypes.h" |
#include "sync/engine/process_updates_command.h" |
#include "sync/internal_api/public/base/model_type.h" |
+#include "sync/internal_api/public/test/test_entry_factory.h" |
#include "sync/sessions/sync_session.h" |
#include "sync/syncable/mutable_entry.h" |
+#include "sync/syncable/read_transaction.h" |
#include "sync/syncable/syncable_id.h" |
+#include "sync/syncable/syncable_proto_util.h" |
+#include "sync/syncable/write_transaction.h" |
#include "sync/test/engine/fake_model_worker.h" |
#include "sync/test/engine/syncer_command_test.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace syncer { |
+using sync_pb::SyncEntity; |
using syncable::Id; |
using syncable::MutableEntry; |
using syncable::UNITTEST; |
@@ -35,6 +40,7 @@ class ProcessUpdatesCommandTest : public SyncerCommandTest { |
(*mutable_routing_info())[BOOKMARKS] = GROUP_UI; |
(*mutable_routing_info())[AUTOFILL] = GROUP_DB; |
SyncerCommandTest::SetUp(); |
+ test_entry_factory_.reset(new TestEntryFactory(directory())); |
} |
void CreateLocalItem(const std::string& item_id, |
@@ -54,18 +60,21 @@ class ProcessUpdatesCommandTest : public SyncerCommandTest { |
entry.Put(syncable::SERVER_SPECIFICS, default_specifics); |
} |
- void AddUpdate(sync_pb::GetUpdatesResponse* updates, |
+ SyncEntity* AddUpdate(sync_pb::GetUpdatesResponse* updates, |
const std::string& id, const std::string& parent, |
const ModelType& type) { |
sync_pb::SyncEntity* e = updates->add_entries(); |
- e->set_id_string("b1"); |
+ e->set_id_string(id); |
e->set_parent_id_string(parent); |
- e->set_non_unique_name("b1"); |
- e->set_name("b1"); |
+ e->set_non_unique_name(id); |
+ e->set_name(id); |
+ e->set_version(1000); |
AddDefaultFieldValue(type, e->mutable_specifics()); |
+ return e; |
} |
ProcessUpdatesCommand command_; |
+ scoped_ptr<TestEntryFactory> test_entry_factory_; |
private: |
DISALLOW_COPY_AND_ASSIGN(ProcessUpdatesCommandTest); |
@@ -74,8 +83,6 @@ class ProcessUpdatesCommandTest : public SyncerCommandTest { |
TEST_F(ProcessUpdatesCommandTest, GroupsToChange) { |
std::string root = syncable::GetNullId().GetServerId(); |
- CreateLocalItem("b1", root, BOOKMARKS); |
- CreateLocalItem("b2", root, BOOKMARKS); |
CreateLocalItem("p1", root, PREFERENCES); |
CreateLocalItem("a1", root, AUTOFILL); |
@@ -84,8 +91,6 @@ TEST_F(ProcessUpdatesCommandTest, GroupsToChange) { |
sync_pb::GetUpdatesResponse* updates = |
session()->mutable_status_controller()-> |
mutable_updates_response()->mutable_get_updates(); |
- AddUpdate(updates, "b1", root, BOOKMARKS); |
- AddUpdate(updates, "b2", root, BOOKMARKS); |
AddUpdate(updates, "p1", root, PREFERENCES); |
AddUpdate(updates, "a1", root, AUTOFILL); |
@@ -94,6 +99,74 @@ TEST_F(ProcessUpdatesCommandTest, GroupsToChange) { |
command_.ExecuteImpl(session()); |
} |
+static const char kCacheGuid[] = "tuiWdG8hV+8y4RT9N5Aikg=="; |
+ |
+// Test that the bookmark tag is set on newly created items. |
+TEST_F(ProcessUpdatesCommandTest, NewBookmarkTag) { |
+ std::string root = syncable::GetNullId().GetServerId(); |
+ sync_pb::GetUpdatesResponse* updates = |
+ session()->mutable_status_controller()-> |
+ mutable_updates_response()->mutable_get_updates(); |
+ Id server_id = Id::CreateFromServerId("b1"); |
+ SyncEntity* e = |
+ AddUpdate(updates, SyncableIdToProto(server_id), root, BOOKMARKS); |
+ |
+ e->set_originator_cache_guid( |
+ std::string(kCacheGuid, arraysize(kCacheGuid)-1)); |
+ Id client_id = Id::CreateFromClientString("-42"); |
+ e->set_originator_client_item_id(client_id.value()); |
+ e->set_position_in_parent(0); |
+ |
+ command_.ExecuteImpl(session()); |
+ |
+ syncable::ReadTransaction trans(FROM_HERE, directory()); |
+ syncable::Entry entry(&trans, syncable::GET_BY_ID, server_id); |
+ ASSERT_TRUE(entry.good()); |
+ EXPECT_TRUE( |
+ UniquePosition::IsValidSuffix(entry.Get(syncable::UNIQUE_BOOKMARK_TAG))); |
+} |
+ |
+// Test that the bookmark tag is updated on existing items. |
+TEST_F(ProcessUpdatesCommandTest, UpdeateExistingBookmarkTag) { |
+ int64 handle = test_entry_factory_->CreateSyncedBookmarkItem("b1", false); |
+ |
+ Id server_id; |
+ std::string original_suffix; |
+ { |
+ syncable::ReadTransaction trans(FROM_HERE, directory()); |
+ syncable::Entry entry(&trans, syncable::GET_BY_HANDLE, handle); |
+ ASSERT_TRUE(entry.good()); |
+ original_suffix = entry.Get(syncable::UNIQUE_BOOKMARK_TAG); |
+ EXPECT_TRUE(UniquePosition::IsValidSuffix( |
+ entry.Get(syncable::UNIQUE_BOOKMARK_TAG))); |
+ server_id = entry.Get(syncable::ID); |
+ } |
+ |
+ std::string root = syncable::GetNullId().GetServerId(); |
+ sync_pb::GetUpdatesResponse* updates = |
+ session()->mutable_status_controller()-> |
+ mutable_updates_response()->mutable_get_updates(); |
+ SyncEntity* e = |
+ AddUpdate(updates, SyncableIdToProto(server_id), root, BOOKMARKS); |
+ |
+ e->set_originator_cache_guid( |
+ std::string(kCacheGuid, arraysize(kCacheGuid)-1)); |
+ Id client_id = Id::CreateFromClientString("-42"); |
+ e->set_originator_client_item_id(client_id.value()); |
+ e->set_position_in_parent(0); |
+ |
+ command_.ExecuteImpl(session()); |
+ |
+ { |
+ syncable::ReadTransaction trans(FROM_HERE, directory()); |
+ syncable::Entry entry(&trans, syncable::GET_BY_HANDLE, handle); |
+ ASSERT_TRUE(entry.good()); |
+ std::string new_suffix = entry.Get(syncable::UNIQUE_BOOKMARK_TAG); |
+ EXPECT_TRUE(UniquePosition::IsValidSuffix(new_suffix)); |
+ EXPECT_NE(original_suffix, new_suffix); |
+ } |
+} |
+ |
} // namespace |
} // namespace syncer |