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

Side by Side Diff: components/payments/core/profile_util_unittest.cc

Issue 2847503002: [WebPayments] Show labels on incomplete profiles (Closed)
Patch Set: test fix Created 3 years, 7 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/payments/core/profile_util.h"
6
7 #include <memory>
8 #include <vector>
9
10 #include "base/guid.h"
11 #include "base/memory/ptr_util.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "components/autofill/core/browser/autofill_profile.h"
14 #include "components/autofill/core/browser/autofill_test_utils.h"
15 #include "components/payments/core/payment_options_provider.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 using autofill::AutofillProfile;
19
20 namespace payments {
21 namespace profile_util {
22
23 constexpr uint32_t kRequestPayerName = 1 << 0;
24 constexpr uint32_t kRequestPayerEmail = 1 << 1;
25 constexpr uint32_t kRequestPayerPhone = 1 << 2;
26 constexpr uint32_t kRequestShipping = 1 << 3;
27
28 class MockPaymentOptionsProvider : public PaymentOptionsProvider {
29 public:
30 MockPaymentOptionsProvider(uint32_t options) : options_(options) {}
31
32 ~MockPaymentOptionsProvider() override {}
33 bool request_payer_name() const override {
34 return options_ & kRequestPayerName;
35 }
36 bool request_payer_email() const override {
37 return options_ & kRequestPayerEmail;
38 }
39 bool request_payer_phone() const override {
40 return options_ & kRequestPayerPhone;
41 }
42 bool request_shipping() const override { return options_ & kRequestShipping; }
43 PaymentShippingType shipping_type() const override {
44 return PaymentShippingType::SHIPPING;
45 }
46
47 private:
48 uint32_t options_;
49 };
50
51 AutofillProfile CreateProfileWithContactInfo(const char* name,
52 const char* email,
53 const char* phone) {
54 AutofillProfile profile(base::GenerateGUID(), "http://www.example.com/");
55 autofill::test::SetProfileInfo(&profile, name, "", "", email, "", "", "", "",
56 "", "", "", phone);
57 return profile;
58 }
59
60 TEST(PaymentRequestProfileUtilTest, FilterProfilesForContact) {
61 // These profiles are subset/equal, so only the first complete one is
62 // included.
63 AutofillProfile exclude_1 =
64 CreateProfileWithContactInfo("Homer", "", "5551234567");
65
66 AutofillProfile exclude_2 =
67 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "");
68
69 AutofillProfile include_1 =
70 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567");
71
72 AutofillProfile exclude_3 =
73 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567");
74
75 // This profile is different, so it should also be included. Since it is
76 // less complete than |include_1|, it will appear after.
77 AutofillProfile include_2 =
78 CreateProfileWithContactInfo("Marge", "marge@simpson.net", "");
79
80 // This profile is different, so it should also be included. Since it is
81 // equally complete with |include_1|, it will appear before |include_2|, but
82 // after |include_1| since order is preserved amongst profiles of equal
83 // completeness.
84 AutofillProfile include_3 = CreateProfileWithContactInfo(
85 "Bart", "eatmyshorts@simpson.net", "5551234567");
86
87 std::vector<AutofillProfile*> profiles = {&exclude_1, &exclude_2, &include_1,
88 &exclude_3, &include_2, &include_3};
89
90 MockPaymentOptionsProvider provider(kRequestPayerName | kRequestPayerEmail |
91 kRequestPayerPhone);
92 std::vector<AutofillProfile*> filtered =
93 FilterProfilesForContact(profiles, "en-US", provider);
94
95 ASSERT_EQ(3u, filtered.size());
96 EXPECT_EQ(&include_1, filtered[0]);
97 EXPECT_EQ(&include_3, filtered[1]);
98 EXPECT_EQ(&include_2, filtered[2]);
99
100 // Repeat the filter using a provider set to only request phone numbers.
101 // Under these rules, since all profiles have the same (or no) phone number,
102 // we should only see the first profile with a phone number, |exclude_1|.
103 MockPaymentOptionsProvider phone_only_provider(kRequestPayerPhone);
104 std::vector<AutofillProfile*> filtered_phones =
105 FilterProfilesForContact(profiles, "en-US", phone_only_provider);
106 ASSERT_EQ(1u, filtered_phones.size());
107 EXPECT_EQ(&exclude_1, filtered_phones[0]);
108 }
109
110 TEST(PaymentRequestProfileUtilTest, IsContactEqualOrSuperset) {
111 MockPaymentOptionsProvider provider(kRequestPayerName | kRequestPayerEmail |
112 kRequestPayerPhone);
113 PaymentsProfileComparator comp("en-US", provider);
114
115 AutofillProfile p1 =
116 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567");
117
118 // Candidate subset profile is equal.
119 AutofillProfile p2 =
120 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567");
121 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p2));
122 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p2, p1));
123
124 // Candidate subset profile has non-matching fields.
125 AutofillProfile p3 = CreateProfileWithContactInfo(
126 "Homer", "homer@springfieldnuclear.gov", "5551234567");
127 EXPECT_FALSE(comp.IsContactEqualOrSuperset(p1, p3));
128 EXPECT_FALSE(comp.IsContactEqualOrSuperset(p3, p1));
129
130 // Candidate subset profile is equal, except for missing fields.
131 AutofillProfile p4 =
132 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "");
133 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p4));
134 EXPECT_FALSE(comp.IsContactEqualOrSuperset(p4, p1));
135
136 // One field is common, but each has a field which the other is missing.
137 AutofillProfile p5 =
138 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "");
139 AutofillProfile p6 = CreateProfileWithContactInfo("Homer", "", "5551234567");
140 EXPECT_FALSE(comp.IsContactEqualOrSuperset(p5, p6));
141 EXPECT_FALSE(comp.IsContactEqualOrSuperset(p6, p5));
142 }
143
144 TEST(PaymentRequestProfileUtilTest, IsContactEqualOrSuperset_WithFieldIgnored) {
145 // Discrepancies in email should be ignored throughout this test.
146 MockPaymentOptionsProvider provider(kRequestPayerName | kRequestPayerPhone);
147 PaymentsProfileComparator comp("en-US", provider);
148
149 AutofillProfile p1 =
150 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567");
151
152 // Candidate subset profile is equal.
153 AutofillProfile p2 =
154 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567");
155 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p2));
156 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p2, p1));
157
158 // Email fields don't match, but profiles are still equal.
159 AutofillProfile p3 = CreateProfileWithContactInfo(
160 "Homer", "homer@springfieldnuclear.gov", "5551234567");
161 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p3));
162 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p3, p1));
163
164 // Profile without an email is mutual subset of profile with an email.
165 AutofillProfile p4 = CreateProfileWithContactInfo("Homer", "", "5551234567");
166 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p1, p4));
167 EXPECT_TRUE(comp.IsContactEqualOrSuperset(p4, p1));
168 }
169
170 TEST(PaymentRequestProfileUtilTest, GetContactCompletenessScore) {
171 MockPaymentOptionsProvider provider(kRequestPayerName | kRequestPayerPhone);
172 PaymentsProfileComparator comp("en-US", provider);
173
174 // Two completeness points: One each for name and phone number, but not email
175 // as it was not requested.
176 AutofillProfile p1 =
177 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567");
178 EXPECT_EQ(2, comp.GetContactCompletenessScore(&p1));
179
180 // One completeness point for name, no points for phone number (missing) or
181 // email (not requested).
182 AutofillProfile p2 =
183 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "");
184 EXPECT_EQ(1, comp.GetContactCompletenessScore(&p2));
185
186 // No completeness points, as the only field present was not requested.
187 AutofillProfile p3 =
188 CreateProfileWithContactInfo("", "homer@simpson.net", "");
189 EXPECT_EQ(0, comp.GetContactCompletenessScore(&p3));
190
191 // Null profile returns 0.
192 EXPECT_EQ(0, comp.GetContactCompletenessScore(nullptr));
193 }
194
195 TEST(PaymentRequestProfileUtilTest, IsContactInfoComplete) {
196 MockPaymentOptionsProvider provider(kRequestPayerName | kRequestPayerEmail);
197 PaymentsProfileComparator comp("en-US", provider);
198
199 // If name and email are present, return true regardless of the (ignored)
200 // phone value.
201 AutofillProfile p1 =
202 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "5551234567");
203 AutofillProfile p2 =
204 CreateProfileWithContactInfo("Homer", "homer@simpson.net", "");
205
206 EXPECT_TRUE(comp.IsContactInfoComplete(&p1));
207 EXPECT_TRUE(comp.IsContactInfoComplete(&p2));
208
209 // If name is not present, return false regardless of the (ignored)
210 // phone value.
211 AutofillProfile p3 =
212 CreateProfileWithContactInfo("", "homer@simpson.net", "5551234567");
213 AutofillProfile p4 =
214 CreateProfileWithContactInfo("", "homer@simpson.net", "");
215
216 EXPECT_FALSE(comp.IsContactInfoComplete(&p3));
217 EXPECT_FALSE(comp.IsContactInfoComplete(&p4));
218
219 // If no fields are requested, any profile (even empty or null) is complete.
220 MockPaymentOptionsProvider empty_provider(0);
221 PaymentsProfileComparator empty_comp("en-US", empty_provider);
222
223 AutofillProfile p5 = CreateProfileWithContactInfo("", "", "");
224
225 EXPECT_TRUE(empty_comp.IsContactInfoComplete(&p1));
226 EXPECT_TRUE(empty_comp.IsContactInfoComplete(&p5));
227 EXPECT_TRUE(empty_comp.IsContactInfoComplete(nullptr));
228 }
229
230 } // namespace profile_util
231 } // namespace payments
OLDNEW
« no previous file with comments | « components/payments/core/profile_util.cc ('k') | ios/chrome/browser/payments/payment_request.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698