summaryrefslogtreecommitdiff
path: root/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc')
-rw-r--r--chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc107
1 files changed, 107 insertions, 0 deletions
diff --git a/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc b/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc
index f407085d98f..c31ea73a9d5 100644
--- a/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc
+++ b/chromium/components/autofill/core/browser/webdata/autofill_wallet_syncable_service_unittest.cc
@@ -7,6 +7,7 @@
#include <memory>
#include <vector>
+#include "base/strings/utf_string_conversions.h"
#include "components/autofill/core/browser/autofill_profile.h"
#include "components/autofill/core/browser/credit_card.h"
#include "components/autofill/core/browser/test_autofill_clock.h"
@@ -246,4 +247,110 @@ TEST(AutofillWalletSyncableServiceTest, EmptyNameOnCard) {
wallet_cards.back().GetRawInfo(autofill::CREDIT_CARD_NAME_LAST).empty());
}
+TEST(AutofillWalletSyncableServiceTest, ComputeCardsDiff) {
+ // Some arbitrary cards for testing.
+ CreditCard card0(CreditCard::MASKED_SERVER_CARD, "a");
+ CreditCard card1(CreditCard::MASKED_SERVER_CARD, "b");
+ CreditCard card2(CreditCard::MASKED_SERVER_CARD, "c");
+ CreditCard card3(CreditCard::MASKED_SERVER_CARD, "d");
+ // Make sure that card0 < card1 < card2 < card3.
+ ASSERT_LT(card0.Compare(card1), 0);
+ ASSERT_LT(card1.Compare(card2), 0);
+ ASSERT_LT(card2.Compare(card3), 0);
+
+ struct TestCase {
+ const char* name;
+ const std::vector<CreditCard> old_cards;
+ const std::vector<CreditCard> new_cards;
+ int expected_added;
+ int expected_removed;
+ } test_cases[] = {
+ {"Both empty", {}, {}, 0, 0},
+ {"Old empty", {}, {card0}, 1, 0},
+ {"New empty", {card0}, {}, 0, 1},
+ {"Identical", {card0, card1}, {card0, card1}, 0, 0},
+ {"Identical unsorted", {card0, card1}, {card1, card0}, 0, 0},
+ {"Added one", {card0}, {card0, card1}, 1, 0},
+ {"Added two", {card1}, {card0, card1, card2}, 2, 0},
+ {"Removed one", {card0, card1}, {card1}, 0, 1},
+ {"Removed two", {card0, card1, card2}, {card1}, 0, 2},
+ {"Replaced one", {card0}, {card1}, 1, 1},
+ {"Replaced two", {card0, card1}, {card2, card3}, 2, 2},
+ {"Added and removed one", {card0, card1}, {card1, card2}, 1, 1},
+ };
+
+ for (const TestCase& test_case : test_cases) {
+ SCOPED_TRACE(test_case.name);
+
+ // ComputeDiff expects a vector of unique_ptrs for the old data.
+ std::vector<std::unique_ptr<CreditCard>> old_cards_ptrs;
+ for (const CreditCard& card : test_case.old_cards)
+ old_cards_ptrs.push_back(std::make_unique<CreditCard>(card));
+
+ AutofillWalletSyncableService::Diff diff =
+ AutofillWalletSyncableService::ComputeDiff(old_cards_ptrs,
+ test_case.new_cards);
+
+ EXPECT_EQ(test_case.expected_added, diff.items_added);
+ EXPECT_EQ(test_case.expected_removed, diff.items_removed);
+ }
+}
+
+TEST(AutofillWalletSyncableServiceTest, ComputeAddressesDiff) {
+ // Some arbitrary addresses for testing.
+ AutofillProfile address0(AutofillProfile::SERVER_PROFILE, "a");
+ AutofillProfile address1(AutofillProfile::SERVER_PROFILE, "b");
+ AutofillProfile address2(AutofillProfile::SERVER_PROFILE, "c");
+ AutofillProfile address3(AutofillProfile::SERVER_PROFILE, "d");
+ address0.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("a"));
+ address1.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("b"));
+ address2.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("c"));
+ address3.SetRawInfo(NAME_FULL, base::ASCIIToUTF16("d"));
+ // Make sure that address0 < address1 < address2 < address3.
+ ASSERT_LT(address0.Compare(address1), 0);
+ ASSERT_LT(address1.Compare(address2), 0);
+ ASSERT_LT(address2.Compare(address3), 0);
+
+ struct TestCase {
+ const char* name;
+ const std::vector<AutofillProfile> old_addresses;
+ const std::vector<AutofillProfile> new_addresses;
+ int expected_added;
+ int expected_removed;
+ } test_cases[] = {
+ {"Both empty", {}, {}, 0, 0},
+ {"Old empty", {}, {address0}, 1, 0},
+ {"New empty", {address0}, {}, 0, 1},
+ {"Identical", {address0, address1}, {address0, address1}, 0, 0},
+ {"Identical unsorted", {address0, address1}, {address1, address0}, 0, 0},
+ {"Added one", {address0}, {address0, address1}, 1, 0},
+ {"Added two", {address1}, {address0, address1, address2}, 2, 0},
+ {"Removed one", {address0, address1}, {address1}, 0, 1},
+ {"Removed two", {address0, address1, address2}, {address1}, 0, 2},
+ {"Replaced one", {address0}, {address1}, 1, 1},
+ {"Replaced two", {address0, address1}, {address2, address3}, 2, 2},
+ {"Added and removed one",
+ {address0, address1},
+ {address1, address2},
+ 1,
+ 1},
+ };
+
+ for (const TestCase& test_case : test_cases) {
+ SCOPED_TRACE(test_case.name);
+
+ // ComputeDiff expects a vector of unique_ptrs for the old data.
+ std::vector<std::unique_ptr<AutofillProfile>> old_addresses_ptrs;
+ for (const AutofillProfile& address : test_case.old_addresses)
+ old_addresses_ptrs.push_back(std::make_unique<AutofillProfile>(address));
+
+ AutofillWalletSyncableService::Diff diff =
+ AutofillWalletSyncableService::ComputeDiff(old_addresses_ptrs,
+ test_case.new_addresses);
+
+ EXPECT_EQ(test_case.expected_added, diff.items_added);
+ EXPECT_EQ(test_case.expected_removed, diff.items_removed);
+ }
+}
+
} // namespace autofill