Index: components/payments/core/payments_profile_comparator_unittest.cc |
diff --git a/components/payments/core/profile_util_unittest.cc b/components/payments/core/payments_profile_comparator_unittest.cc |
similarity index 54% |
rename from components/payments/core/profile_util_unittest.cc |
rename to components/payments/core/payments_profile_comparator_unittest.cc |
index 5ff1d7ec4e3d546fa2ca1cc63f451914cf7220ed..ac0691e9992b7c4b42216f83862f11faa205b676 100644 |
--- a/components/payments/core/profile_util_unittest.cc |
+++ b/components/payments/core/payments_profile_comparator_unittest.cc |
@@ -2,7 +2,7 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "components/payments/core/profile_util.h" |
+#include "components/payments/core/payments_profile_comparator.h" |
#include <memory> |
#include <vector> |
@@ -13,12 +13,13 @@ |
#include "components/autofill/core/browser/autofill_profile.h" |
#include "components/autofill/core/browser/autofill_test_utils.h" |
#include "components/payments/core/payment_options_provider.h" |
+#include "components/strings/grit/components_strings.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/base/l10n/l10n_util.h" |
using autofill::AutofillProfile; |
namespace payments { |
-namespace profile_util { |
constexpr uint32_t kRequestPayerName = 1 << 0; |
constexpr uint32_t kRequestPayerEmail = 1 << 1; |
@@ -57,20 +58,36 @@ AutofillProfile CreateProfileWithContactInfo(const char* name, |
return profile; |
} |
+AutofillProfile CreateProfileWithCompleteAddress(const char* name, |
+ const char* phone) { |
+ AutofillProfile profile(base::GenerateGUID(), "http://www.example.com/"); |
+ autofill::test::SetProfileInfo(&profile, name, "", "", "", "", "123 Fake St.", |
+ "", "Fakesville", "MN", "54000", "US", phone); |
+ return profile; |
+} |
+ |
+AutofillProfile CreateProfileWithPartialAddress(const char* name, |
+ const char* phone) { |
+ AutofillProfile profile(base::GenerateGUID(), "http://www.example.com/"); |
+ autofill::test::SetProfileInfo(&profile, name, "", "", "", "", "123 Fake St.", |
+ "", "", "", "54000", "", phone); |
+ return profile; |
+} |
+ |
TEST(PaymentRequestProfileUtilTest, FilterProfilesForContact) { |
// These profiles are subset/equal, so only the first complete one is |
// included. |
AutofillProfile exclude_1 = |
- CreateProfileWithContactInfo("Homer", "", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "", "6515553226"); |
AutofillProfile exclude_2 = |
CreateProfileWithContactInfo("Homer", "homer@simpson.net", ""); |
AutofillProfile include_1 = |
- CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
AutofillProfile exclude_3 = |
- CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
// This profile is different, so it should also be included. Since it is |
// less complete than |include_1|, it will appear after. |
@@ -82,15 +99,17 @@ TEST(PaymentRequestProfileUtilTest, FilterProfilesForContact) { |
// after |include_1| since order is preserved amongst profiles of equal |
// completeness. |
AutofillProfile include_3 = CreateProfileWithContactInfo( |
- "Bart", "eatmyshorts@simpson.net", "5551234567"); |
+ "Bart", "eatmyshorts@simpson.net", "6515553226"); |
std::vector<AutofillProfile*> profiles = {&exclude_1, &exclude_2, &include_1, |
&exclude_3, &include_2, &include_3}; |
MockPaymentOptionsProvider provider(kRequestPayerName | kRequestPayerEmail | |
kRequestPayerPhone); |
+ PaymentsProfileComparator comp("en-US", provider); |
+ |
std::vector<AutofillProfile*> filtered = |
- FilterProfilesForContact(profiles, "en-US", provider); |
+ comp.FilterProfilesForContact(profiles); |
ASSERT_EQ(3u, filtered.size()); |
EXPECT_EQ(&include_1, filtered[0]); |
@@ -101,8 +120,9 @@ TEST(PaymentRequestProfileUtilTest, FilterProfilesForContact) { |
// Under these rules, since all profiles have the same (or no) phone number, |
// we should only see the first profile with a phone number, |exclude_1|. |
MockPaymentOptionsProvider phone_only_provider(kRequestPayerPhone); |
+ PaymentsProfileComparator phone_only_comp("en-US", phone_only_provider); |
std::vector<AutofillProfile*> filtered_phones = |
- FilterProfilesForContact(profiles, "en-US", phone_only_provider); |
+ phone_only_comp.FilterProfilesForContact(profiles); |
ASSERT_EQ(1u, filtered_phones.size()); |
EXPECT_EQ(&exclude_1, filtered_phones[0]); |
} |
@@ -113,17 +133,17 @@ TEST(PaymentRequestProfileUtilTest, IsContactEqualOrSuperset) { |
PaymentsProfileComparator comp("en-US", provider); |
AutofillProfile p1 = |
- CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
// Candidate subset profile is equal. |
AutofillProfile p2 = |
- CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p2)); |
EXPECT_TRUE(comp.IsContactEqualOrSuperset(p2, p1)); |
// Candidate subset profile has non-matching fields. |
AutofillProfile p3 = CreateProfileWithContactInfo( |
- "Homer", "homer@springfieldnuclear.gov", "5551234567"); |
+ "Homer", "homer@springfieldnuclear.gov", "6515553226"); |
EXPECT_FALSE(comp.IsContactEqualOrSuperset(p1, p3)); |
EXPECT_FALSE(comp.IsContactEqualOrSuperset(p3, p1)); |
@@ -136,7 +156,7 @@ TEST(PaymentRequestProfileUtilTest, IsContactEqualOrSuperset) { |
// One field is common, but each has a field which the other is missing. |
AutofillProfile p5 = |
CreateProfileWithContactInfo("Homer", "homer@simpson.net", ""); |
- AutofillProfile p6 = CreateProfileWithContactInfo("Homer", "", "5551234567"); |
+ AutofillProfile p6 = CreateProfileWithContactInfo("Homer", "", "6515553226"); |
EXPECT_FALSE(comp.IsContactEqualOrSuperset(p5, p6)); |
EXPECT_FALSE(comp.IsContactEqualOrSuperset(p6, p5)); |
} |
@@ -147,22 +167,22 @@ TEST(PaymentRequestProfileUtilTest, IsContactEqualOrSuperset_WithFieldIgnored) { |
PaymentsProfileComparator comp("en-US", provider); |
AutofillProfile p1 = |
- CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
// Candidate subset profile is equal. |
AutofillProfile p2 = |
- CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p2)); |
EXPECT_TRUE(comp.IsContactEqualOrSuperset(p2, p1)); |
// Email fields don't match, but profiles are still equal. |
AutofillProfile p3 = CreateProfileWithContactInfo( |
- "Homer", "homer@springfieldnuclear.gov", "5551234567"); |
+ "Homer", "homer@springfieldnuclear.gov", "6515553226"); |
EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p3)); |
EXPECT_TRUE(comp.IsContactEqualOrSuperset(p3, p1)); |
// Profile without an email is mutual subset of profile with an email. |
- AutofillProfile p4 = CreateProfileWithContactInfo("Homer", "", "5551234567"); |
+ AutofillProfile p4 = CreateProfileWithContactInfo("Homer", "", "6515553226"); |
EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p4)); |
EXPECT_TRUE(comp.IsContactEqualOrSuperset(p4, p1)); |
} |
@@ -174,7 +194,7 @@ TEST(PaymentRequestProfileUtilTest, GetContactCompletenessScore) { |
// Two completeness points: One each for name and phone number, but not email |
// as it was not requested. |
AutofillProfile p1 = |
- CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
EXPECT_EQ(2, comp.GetContactCompletenessScore(&p1)); |
// One completeness point for name, no points for phone number (missing) or |
@@ -199,7 +219,7 @@ TEST(PaymentRequestProfileUtilTest, IsContactInfoComplete) { |
// If name and email are present, return true regardless of the (ignored) |
// phone value. |
AutofillProfile p1 = |
- CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
AutofillProfile p2 = |
CreateProfileWithContactInfo("Homer", "homer@simpson.net", ""); |
@@ -209,7 +229,7 @@ TEST(PaymentRequestProfileUtilTest, IsContactInfoComplete) { |
// If name is not present, return false regardless of the (ignored) |
// phone value. |
AutofillProfile p3 = |
- CreateProfileWithContactInfo("", "homer@simpson.net", "5551234567"); |
+ CreateProfileWithContactInfo("", "homer@simpson.net", "6515553226"); |
AutofillProfile p4 = |
CreateProfileWithContactInfo("", "homer@simpson.net", ""); |
@@ -227,5 +247,121 @@ TEST(PaymentRequestProfileUtilTest, IsContactInfoComplete) { |
EXPECT_TRUE(empty_comp.IsContactInfoComplete(nullptr)); |
} |
-} // namespace profile_util |
+TEST(PaymentRequestProfileUtilTest, IsShippingComplete) { |
+ MockPaymentOptionsProvider provider(kRequestShipping); |
+ PaymentsProfileComparator comp("en-US", provider); |
+ |
+ // True if name, phone, and address are all populated. |
+ AutofillProfile p1 = CreateProfileWithCompleteAddress("Homer", "6515553226"); |
+ EXPECT_TRUE(comp.IsShippingComplete(&p1)); |
+ |
+ // False if address is partially populated. |
+ AutofillProfile p2 = CreateProfileWithPartialAddress("Homer", "6515553226"); |
+ EXPECT_FALSE(comp.IsShippingComplete(&p2)); |
+ |
+ // False if name isn't populated. |
+ AutofillProfile p3 = CreateProfileWithCompleteAddress("", "6515553226"); |
+ EXPECT_FALSE(comp.IsShippingComplete(&p3)); |
+ |
+ // False if phone isn't populated. |
+ AutofillProfile p4 = CreateProfileWithCompleteAddress("Homer", ""); |
+ EXPECT_FALSE(comp.IsShippingComplete(&p4)); |
+ |
+ // False if only contact info (no address fields) is populated. |
+ AutofillProfile p5 = |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
+ EXPECT_FALSE(comp.IsShippingComplete(&p5)); |
+ |
+ MockPaymentOptionsProvider provider_no_shipping(0); |
+ PaymentsProfileComparator comp_no_shipping("en-US", provider_no_shipping); |
+ // nullptr is handled correctly: false if shipping requested, true if not. |
+ EXPECT_FALSE(comp.IsShippingComplete(nullptr)); |
+ EXPECT_TRUE(comp_no_shipping.IsShippingComplete(nullptr)); |
+} |
+ |
+TEST(PaymentRequestProfileUtilTest, GetStringForMissingContactFields) { |
+ MockPaymentOptionsProvider provider(kRequestPayerName | kRequestPayerPhone | |
+ kRequestPayerEmail | kRequestShipping); |
+ PaymentsProfileComparator comp("en-US", provider); |
+ |
+ // No error message for complete profile. |
+ AutofillProfile p1 = |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
+ EXPECT_TRUE(comp.GetStringForMissingContactFields(p1).empty()); |
+ |
+ MockPaymentOptionsProvider provider_no_email( |
+ kRequestPayerName | kRequestPayerPhone | kRequestShipping); |
+ PaymentsProfileComparator comp_no_email("en-US", provider_no_email); |
+ |
+ // No error message if missing field wasn't required. |
+ AutofillProfile p2 = CreateProfileWithContactInfo("Homer", "", "6515553226"); |
+ EXPECT_TRUE(comp_no_email.GetStringForMissingContactFields(p2).empty()); |
+ |
+ // Error message for email address if email address is missing and required. |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_EMAIL_REQUIRED), |
+ comp.GetStringForMissingContactFields(p2)); |
+ |
+ // Error message for phone number if phone is missing and required. |
+ AutofillProfile p3 = |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", ""); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_PHONE_NUMBER_REQUIRED), |
+ comp.GetStringForMissingContactFields(p3)); |
+ |
+ // Error message for name if name is missing and required. |
+ AutofillProfile p4 = |
+ CreateProfileWithContactInfo("", "homer@simpson.net", "6515553226"); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_NAME_REQUIRED), |
+ comp.GetStringForMissingContactFields(p4)); |
+ |
+ // Generic error message if multiple fields missing. |
+ AutofillProfile p5 = |
+ CreateProfileWithContactInfo("", "homer@simpson.net", ""); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_MORE_INFORMATION_REQUIRED), |
+ comp.GetStringForMissingContactFields(p5)); |
+} |
+ |
+TEST(PaymentRequestProfileUtilTest, GetStringForMissingShippingFields) { |
+ MockPaymentOptionsProvider provider(kRequestPayerName | kRequestPayerPhone | |
+ kRequestPayerEmail | kRequestShipping); |
+ PaymentsProfileComparator comp("en-US", provider); |
+ |
+ // No error message for complete profile. |
+ AutofillProfile p1 = CreateProfileWithCompleteAddress("Homer", "6515553226"); |
+ EXPECT_TRUE(comp.GetStringForMissingShippingFields(p1).empty()); |
+ |
+ // Error message for shipping if shipping requested and not present. |
+ AutofillProfile p2 = |
+ CreateProfileWithContactInfo("Homer", "homer@simpson.net", "6515553226"); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_INVALID_ADDRESS), |
+ comp.GetStringForMissingShippingFields(p2)); |
+ |
+ // Error message for shipping if shipping requested and only partially |
+ // complete. |
+ AutofillProfile p3 = CreateProfileWithPartialAddress("Homer", "6515553226"); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_INVALID_ADDRESS), |
+ comp.GetStringForMissingShippingFields(p3)); |
+ |
+ // Error message for name if name requested and missing. |
+ AutofillProfile p4 = CreateProfileWithCompleteAddress("", "6515553226"); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_NAME_REQUIRED), |
+ comp.GetStringForMissingShippingFields(p4)); |
+ |
+ // Error message for phone if phone requested and missing. |
+ AutofillProfile p5 = CreateProfileWithCompleteAddress("Homer", ""); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_PHONE_NUMBER_REQUIRED), |
+ comp.GetStringForMissingShippingFields(p5)); |
+ |
+ // Generic error message if multiple fields missing. |
+ AutofillProfile p6 = CreateProfileWithContactInfo("", "", ""); |
+ EXPECT_EQ(l10n_util::GetStringUTF16(IDS_PAYMENTS_MORE_INFORMATION_REQUIRED), |
+ comp.GetStringForMissingShippingFields(p6)); |
+ |
+ MockPaymentOptionsProvider provider_no_shipping( |
+ kRequestPayerName | kRequestPayerPhone | kRequestPayerEmail); |
+ PaymentsProfileComparator comp_no_shipping("en-US", provider_no_shipping); |
+ |
+ // No error message if everything is missing but shipping wasn't requested. |
+ EXPECT_TRUE(comp_no_shipping.GetStringForMissingShippingFields(p6).empty()); |
+} |
+ |
} // namespace payments |