| Index: sync/internal_api/sync_manager_impl_unittest.cc
|
| diff --git a/sync/internal_api/sync_manager_impl_unittest.cc b/sync/internal_api/sync_manager_impl_unittest.cc
|
| index d2b1dec039e054f0f50b431c3981a744bb70a073..eeba3bdc8ccc6b8392d466c5e9adb99694fe7c8a 100644
|
| --- a/sync/internal_api/sync_manager_impl_unittest.cc
|
| +++ b/sync/internal_api/sync_manager_impl_unittest.cc
|
| @@ -24,6 +24,7 @@
|
| #include "base/values.h"
|
| #include "google_apis/gaia/gaia_constants.h"
|
| #include "sync/engine/sync_scheduler.h"
|
| +#include "sync/internal_api/public/base/attachment_id_proto.h"
|
| #include "sync/internal_api/public/base/cancelation_signal.h"
|
| #include "sync/internal_api/public/base/model_type_test_util.h"
|
| #include "sync/internal_api/public/change_record.h"
|
| @@ -866,6 +867,7 @@ class SyncManagerTest : public testing::Test,
|
| (*out)[PASSWORDS] = GROUP_PASSIVE;
|
| (*out)[PREFERENCES] = GROUP_PASSIVE;
|
| (*out)[PRIORITY_PREFERENCES] = GROUP_PASSIVE;
|
| + (*out)[ARTICLES] = GROUP_PASSIVE;
|
| }
|
|
|
| ModelTypeSet GetEnabledTypes() {
|
| @@ -2872,6 +2874,8 @@ class SyncManagerChangeProcessingTest : public SyncManagerTest {
|
| return last_changes_.Get().size();
|
| }
|
|
|
| + void ClearChangeList() { last_changes_ = ImmutableChangeRecordList(); }
|
| +
|
| protected:
|
| ImmutableChangeRecordList last_changes_;
|
| TestIdFactory id_factory_;
|
| @@ -3107,6 +3111,66 @@ TEST_F(SyncManagerChangeProcessingTest, DeletionsAndChanges) {
|
| EXPECT_LT(folder_b_pos, folder_a_pos);
|
| }
|
|
|
| +// See that attachment metadata changes are not filtered out by
|
| +// SyncManagerImpl::VisiblePropertiesDiffer.
|
| +TEST_F(SyncManagerChangeProcessingTest, AttachmentMetadataOnlyChanges) {
|
| + // Create an article with no attachments. See that a change is generated.
|
| + int64 article_id = kInvalidId;
|
| + {
|
| + syncable::WriteTransaction trans(
|
| + FROM_HERE, syncable::SYNCER, share()->directory.get());
|
| + int64 type_root = GetIdForDataType(ARTICLES);
|
| + syncable::Entry root(&trans, syncable::GET_BY_HANDLE, type_root);
|
| + ASSERT_TRUE(root.good());
|
| + syncable::MutableEntry article(
|
| + &trans, syncable::CREATE, ARTICLES, root.GetId(), "article");
|
| + ASSERT_TRUE(article.good());
|
| + SetNodeProperties(&article);
|
| + article_id = article.GetMetahandle();
|
| + }
|
| + ASSERT_EQ(1UL, GetChangeListSize());
|
| + FindChangeInList(article_id, ChangeRecord::ACTION_ADD);
|
| + ClearChangeList();
|
| +
|
| + // Modify the article by adding one attachment. Don't touch anything else.
|
| + // See that a change is generated.
|
| + {
|
| + syncable::WriteTransaction trans(
|
| + FROM_HERE, syncable::SYNCER, share()->directory.get());
|
| + syncable::MutableEntry article(&trans, syncable::GET_BY_HANDLE, article_id);
|
| + sync_pb::AttachmentMetadata metadata;
|
| + *metadata.add_record()->mutable_id() = CreateAttachmentIdProto();
|
| + article.PutAttachmentMetadata(metadata);
|
| + }
|
| + ASSERT_EQ(1UL, GetChangeListSize());
|
| + FindChangeInList(article_id, ChangeRecord::ACTION_UPDATE);
|
| + ClearChangeList();
|
| +
|
| + // Modify the article by replacing its attachment with a different one. See
|
| + // that a change is generated.
|
| + {
|
| + syncable::WriteTransaction trans(
|
| + FROM_HERE, syncable::SYNCER, share()->directory.get());
|
| + syncable::MutableEntry article(&trans, syncable::GET_BY_HANDLE, article_id);
|
| + sync_pb::AttachmentMetadata metadata = article.GetAttachmentMetadata();
|
| + *metadata.add_record()->mutable_id() = CreateAttachmentIdProto();
|
| + article.PutAttachmentMetadata(metadata);
|
| + }
|
| + ASSERT_EQ(1UL, GetChangeListSize());
|
| + FindChangeInList(article_id, ChangeRecord::ACTION_UPDATE);
|
| + ClearChangeList();
|
| +
|
| + // Modify the article by replacing its attachment metadata with the same
|
| + // attachment metadata. No change should be generated.
|
| + {
|
| + syncable::WriteTransaction trans(
|
| + FROM_HERE, syncable::SYNCER, share()->directory.get());
|
| + syncable::MutableEntry article(&trans, syncable::GET_BY_HANDLE, article_id);
|
| + article.PutAttachmentMetadata(article.GetAttachmentMetadata());
|
| + }
|
| + ASSERT_EQ(0UL, GetChangeListSize());
|
| +}
|
| +
|
| // During initialization SyncManagerImpl loads sqlite database. If it fails to
|
| // do so it should fail initialization. This test verifies this behavior.
|
| // Test reuses SyncManagerImpl initialization from SyncManagerTest but overrides
|
|
|