Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2476)

Unified Diff: chrome/browser/chromeos/contacts/contact_database_unittest.cc

Issue 10933127: contacts: Don't save deleted contacts to disk. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: merge Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/contacts/contact_database_unittest.cc
diff --git a/chrome/browser/chromeos/contacts/contact_database_unittest.cc b/chrome/browser/chromeos/contacts/contact_database_unittest.cc
index 31f8e4055fed7a77ebced524c20d8ffc0a8dcd39..751bd0210ec3dae35fd94c87c25556ad5d6e5c40 100644
--- a/chrome/browser/chromeos/contacts/contact_database_unittest.cc
+++ b/chrome/browser/chromeos/contacts/contact_database_unittest.cc
@@ -77,11 +77,16 @@ class ContactDatabaseTest : public testing::Test {
// Calls ContactDatabase::SaveContacts() and blocks until the operation is
// complete.
- void SaveContacts(scoped_ptr<ContactPointers> contacts,
+ void SaveContacts(scoped_ptr<ContactPointers> contacts_to_save,
+ scoped_ptr<ContactDatabaseInterface::ContactIds>
+ contact_ids_to_delete,
scoped_ptr<UpdateMetadata> metadata,
bool is_full_update) {
CHECK(db_);
- db_->SaveContacts(contacts.Pass(), metadata.Pass(), is_full_update,
+ db_->SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata.Pass(),
+ is_full_update,
base::Bind(&ContactDatabaseTest::OnContactsSaved,
base::Unretained(this)));
message_loop_.Run();
@@ -165,12 +170,17 @@ TEST_F(ContactDatabaseTest, SaveAndReload) {
SetPhoto(gfx::Size(20, 20), contact.get());
scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
contacts_to_save->push_back(contact.get());
+ scoped_ptr<ContactDatabaseInterface::ContactIds> contact_ids_to_delete(
+ new ContactDatabaseInterface::ContactIds);
const int64 kLastUpdateTime = 1234;
scoped_ptr<UpdateMetadata> metadata_to_save(new UpdateMetadata);
metadata_to_save->set_last_update_start_time(kLastUpdateTime);
- SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ true);
scoped_ptr<ScopedVector<Contact> > loaded_contacts;
scoped_ptr<UpdateMetadata> loaded_metadata;
LoadContacts(&loaded_contacts, &loaded_metadata);
@@ -190,10 +200,14 @@ TEST_F(ContactDatabaseTest, SaveAndReload) {
SetPhoto(gfx::Size(64, 64), contact.get());
contacts_to_save.reset(new ContactPointers);
contacts_to_save->push_back(contact.get());
+ contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
metadata_to_save.reset(new UpdateMetadata);
const int64 kNewLastUpdateTime = 5678;
metadata_to_save->set_last_update_start_time(kNewLastUpdateTime);
- SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ true);
LoadContacts(&loaded_contacts, &loaded_metadata);
EXPECT_EQ(VarContactsToString(1, contact.get()),
@@ -219,8 +233,13 @@ TEST_F(ContactDatabaseTest, FullAndIncrementalUpdates) {
scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
contacts_to_save->push_back(contact1.get());
contacts_to_save->push_back(contact2.get());
+ scoped_ptr<ContactDatabaseInterface::ContactIds> contact_ids_to_delete(
+ new ContactDatabaseInterface::ContactIds);
scoped_ptr<UpdateMetadata> metadata_to_save(new UpdateMetadata);
- SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ true);
scoped_ptr<ScopedVector<Contact> > loaded_contacts;
scoped_ptr<UpdateMetadata> loaded_metadata;
@@ -234,8 +253,12 @@ TEST_F(ContactDatabaseTest, FullAndIncrementalUpdates) {
"", true, contact2.get());
contacts_to_save.reset(new ContactPointers);
contacts_to_save->push_back(contact2.get());
+ contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
metadata_to_save.reset(new UpdateMetadata);
- SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), false);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ false);
LoadContacts(&loaded_contacts, &loaded_metadata);
EXPECT_EQ(VarContactsToString(2, contact1.get(), contact2.get()),
ContactsToString(*loaded_contacts));
@@ -243,10 +266,14 @@ TEST_F(ContactDatabaseTest, FullAndIncrementalUpdates) {
// Do an empty incremental update and check that the metadata is still
// updated.
contacts_to_save.reset(new ContactPointers);
+ contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
metadata_to_save.reset(new UpdateMetadata);
const int64 kLastUpdateTime = 1234;
metadata_to_save->set_last_update_start_time(kLastUpdateTime);
- SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), false);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ false);
LoadContacts(&loaded_contacts, &loaded_metadata);
EXPECT_EQ(VarContactsToString(2, contact1.get(), contact2.get()),
ContactsToString(*loaded_contacts));
@@ -261,16 +288,24 @@ TEST_F(ContactDatabaseTest, FullAndIncrementalUpdates) {
"", true, contact1.get());
contacts_to_save.reset(new ContactPointers);
contacts_to_save->push_back(contact1.get());
+ contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
metadata_to_save.reset(new UpdateMetadata);
- SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ true);
LoadContacts(&loaded_contacts, &loaded_metadata);
EXPECT_EQ(VarContactsToString(1, contact1.get()),
ContactsToString(*loaded_contacts));
// Do a full update including no contacts. The database should be cleared.
contacts_to_save.reset(new ContactPointers);
+ contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
metadata_to_save.reset(new UpdateMetadata);
- SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ true);
LoadContacts(&loaded_contacts, &loaded_metadata);
EXPECT_TRUE(loaded_contacts->empty());
}
@@ -292,8 +327,13 @@ TEST_F(ContactDatabaseTest, DeleteWhenCorrupt) {
InitContact("1", "1", false, contact.get());
scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
contacts_to_save->push_back(contact.get());
+ scoped_ptr<ContactDatabaseInterface::ContactIds> contact_ids_to_delete(
+ new ContactDatabaseInterface::ContactIds);
scoped_ptr<UpdateMetadata> metadata_to_save(new UpdateMetadata);
- SaveContacts(contacts_to_save.Pass(), metadata_to_save.Pass(), true);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ true);
scoped_ptr<ScopedVector<Contact> > loaded_contacts;
scoped_ptr<UpdateMetadata> loaded_metadata;
@@ -302,5 +342,75 @@ TEST_F(ContactDatabaseTest, DeleteWhenCorrupt) {
ContactsToString(*loaded_contacts));
}
+TEST_F(ContactDatabaseTest, DeleteRequestedContacts) {
+ // Insert two contacts into the database with a full update.
+ const std::string kContactId1 = "contact_id_1";
+ scoped_ptr<Contact> contact1(new Contact);
+ InitContact(kContactId1, "1", false, contact1.get());
+ const std::string kContactId2 = "contact_id_2";
+ scoped_ptr<Contact> contact2(new Contact);
+ InitContact(kContactId2, "2", false, contact2.get());
+
+ scoped_ptr<ContactPointers> contacts_to_save(new ContactPointers);
+ contacts_to_save->push_back(contact1.get());
+ contacts_to_save->push_back(contact2.get());
+ scoped_ptr<ContactDatabaseInterface::ContactIds> contact_ids_to_delete(
+ new ContactDatabaseInterface::ContactIds);
+ scoped_ptr<UpdateMetadata> metadata_to_save(new UpdateMetadata);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ true);
+
+ // Do an incremental update that inserts a third contact and deletes the first
+ // contact.
+ const std::string kContactId3 = "contact_id_3";
+ scoped_ptr<Contact> contact3(new Contact);
+ InitContact(kContactId3, "3", false, contact3.get());
+
+ contacts_to_save.reset(new ContactPointers);
+ contacts_to_save->push_back(contact3.get());
+ contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
+ contact_ids_to_delete->push_back(kContactId1);
+ metadata_to_save.reset(new UpdateMetadata);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ false);
+
+ // LoadContacts() should return only the second and third contacts.
+ scoped_ptr<ScopedVector<Contact> > loaded_contacts;
+ scoped_ptr<UpdateMetadata> loaded_metadata;
+ LoadContacts(&loaded_contacts, &loaded_metadata);
+ EXPECT_EQ(VarContactsToString(2, contact2.get(), contact3.get()),
+ ContactsToString(*loaded_contacts));
+
+ // Do another incremental update that deletes the second contact.
+ contacts_to_save.reset(new ContactPointers);
+ contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
+ contact_ids_to_delete->push_back(kContactId2);
+ metadata_to_save.reset(new UpdateMetadata);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ false);
+ LoadContacts(&loaded_contacts, &loaded_metadata);
+ EXPECT_EQ(VarContactsToString(1, contact3.get()),
+ ContactsToString(*loaded_contacts));
+
+ // Deleting a contact that isn't present should be a no-op.
+ contacts_to_save.reset(new ContactPointers);
+ contact_ids_to_delete.reset(new ContactDatabaseInterface::ContactIds);
+ contact_ids_to_delete->push_back("bogus_id");
+ metadata_to_save.reset(new UpdateMetadata);
+ SaveContacts(contacts_to_save.Pass(),
+ contact_ids_to_delete.Pass(),
+ metadata_to_save.Pass(),
+ false);
+ LoadContacts(&loaded_contacts, &loaded_metadata);
+ EXPECT_EQ(VarContactsToString(1, contact3.get()),
+ ContactsToString(*loaded_contacts));
+}
+
} // namespace test
} // namespace contacts

Powered by Google App Engine
This is Rietveld 408576698