Chromium Code Reviews| Index: ios/chrome/browser/payments/payment_request_unittest.mm |
| diff --git a/ios/chrome/browser/payments/payment_request_unittest.mm b/ios/chrome/browser/payments/payment_request_unittest.mm |
| index a63ce95ec395efea84c428d61a175370bff67891..afacf8a3266d839684fa16037395379ecaf6a48f 100644 |
| --- a/ios/chrome/browser/payments/payment_request_unittest.mm |
| +++ b/ios/chrome/browser/payments/payment_request_unittest.mm |
| @@ -16,12 +16,26 @@ |
| #include "ios/chrome/browser/payments/payment_request_test_util.h" |
| #include "ios/chrome/browser/payments/test_payment_request.h" |
| #include "ios/web/public/payments/payment_request.h" |
| +#include "testing/gmock/include/gmock/gmock-matchers.h" |
| +#include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| +namespace { |
|
please use gerrit instead
2017/07/05 12:51:07
Newline after.
Moe
2017/07/05 14:43:20
Done.
|
| +class MockTestPersonalDataManager : public autofill::TestPersonalDataManager { |
| + public: |
| + MockTestPersonalDataManager() : TestPersonalDataManager() {} |
| + MOCK_METHOD1(RecordUseOf, void(const autofill::AutofillDataModel&)); |
| +}; |
| + |
| +MATCHER_P(DataModelMatches, guid, "") { |
|
please use gerrit instead
2017/07/05 12:51:07
s/Data/Guid/
Moe
2017/07/05 14:43:20
Done.
|
| + return arg.guid() == guid; |
| +} |
| +} // namespace |
|
please use gerrit instead
2017/07/05 12:51:07
Newline before.
Moe
2017/07/05 14:43:20
Done.
|
| + |
| class PaymentRequestTest : public testing::Test { |
| protected: |
| // Returns PaymentDetails with one shipping option that's selected. |
| @@ -544,3 +558,131 @@ TEST_F(PaymentRequestTest, SelectedPaymentMethod_Incomplete) { |
| &personal_data_manager); |
| EXPECT_EQ(credit_card.guid(), payment_request.selected_credit_card()->guid()); |
| } |
| + |
| +// Test that the use counts of the data models are updated as expected when the |
| +// same autofill profile is used as the shipping address and the contact info. |
| +TEST_F(PaymentRequestTest, RecordUseStats_RequestShippingAndContactInfo) { |
| + MockTestPersonalDataManager personal_data_manager; |
| + autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| + personal_data_manager.AddTestingProfile(&address); |
| + autofill::CreditCard credit_card = autofill::test::GetCreditCard(); |
| + personal_data_manager.AddTestingCreditCard(&credit_card); |
| + credit_card.set_billing_address_id(address.guid()); |
| + |
| + web::PaymentRequest web_payment_request = |
| + payment_request_test_util::CreateTestWebPaymentRequest(); |
| + |
| + TestPaymentRequest payment_request(web_payment_request, |
| + &personal_data_manager); |
| + EXPECT_EQ(address.guid(), |
| + payment_request.selected_shipping_profile()->guid()); |
| + EXPECT_EQ(address.guid(), payment_request.selected_contact_profile()->guid()); |
| + EXPECT_EQ(credit_card.guid(), payment_request.selected_credit_card()->guid()); |
| + |
| + // Even though |address| is used for contact info, shipping address, and |
| + // credit_card's billing address, the stats should be updated only once. |
| + EXPECT_CALL(personal_data_manager, |
| + RecordUseOf(DataModelMatches(address.guid()))) |
| + .Times(1); |
| + EXPECT_CALL(personal_data_manager, |
| + RecordUseOf(DataModelMatches(credit_card.guid()))) |
| + .Times(1); |
| + |
| + payment_request.RecordUseStats(); |
| +} |
| + |
| +// Test that the use counts of the data models are updated as expected when no |
| +// contact information is requested. |
| +TEST_F(PaymentRequestTest, RecordUseStats_RequestShippingOnly) { |
| + MockTestPersonalDataManager personal_data_manager; |
| + autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| + personal_data_manager.AddTestingProfile(&address); |
| + autofill::CreditCard credit_card = autofill::test::GetCreditCard(); |
| + personal_data_manager.AddTestingCreditCard(&credit_card); |
| + credit_card.set_billing_address_id(address.guid()); |
| + |
| + web::PaymentRequest web_payment_request = |
| + payment_request_test_util::CreateTestWebPaymentRequest(); |
| + web_payment_request.options.request_payer_name = false; |
| + web_payment_request.options.request_payer_email = false; |
| + web_payment_request.options.request_payer_phone = false; |
| + |
| + TestPaymentRequest payment_request(web_payment_request, |
| + &personal_data_manager); |
| + EXPECT_EQ(address.guid(), |
| + payment_request.selected_shipping_profile()->guid()); |
| + EXPECT_EQ(nullptr, payment_request.selected_contact_profile()); |
| + EXPECT_EQ(credit_card.guid(), payment_request.selected_credit_card()->guid()); |
| + |
| + EXPECT_CALL(personal_data_manager, |
| + RecordUseOf(DataModelMatches(address.guid()))) |
| + .Times(1); |
| + EXPECT_CALL(personal_data_manager, |
| + RecordUseOf(DataModelMatches(credit_card.guid()))) |
| + .Times(1); |
| + |
| + payment_request.RecordUseStats(); |
| +} |
| + |
| +// Test that the use counts of the data models are updated as expected when no |
| +// shipping information is requested. |
| +TEST_F(PaymentRequestTest, RecordUseStats_RequestContactInfoOnly) { |
| + MockTestPersonalDataManager personal_data_manager; |
| + autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| + personal_data_manager.AddTestingProfile(&address); |
| + autofill::CreditCard credit_card = autofill::test::GetCreditCard(); |
| + personal_data_manager.AddTestingCreditCard(&credit_card); |
| + credit_card.set_billing_address_id(address.guid()); |
| + |
| + web::PaymentRequest web_payment_request = |
| + payment_request_test_util::CreateTestWebPaymentRequest(); |
| + web_payment_request.options.request_shipping = false; |
| + |
| + TestPaymentRequest payment_request(web_payment_request, |
| + &personal_data_manager); |
| + EXPECT_EQ(nullptr, payment_request.selected_shipping_profile()); |
| + EXPECT_EQ(address.guid(), payment_request.selected_contact_profile()->guid()); |
| + EXPECT_EQ(credit_card.guid(), payment_request.selected_credit_card()->guid()); |
| + |
| + EXPECT_CALL(personal_data_manager, |
| + RecordUseOf(DataModelMatches(address.guid()))) |
| + .Times(1); |
| + EXPECT_CALL(personal_data_manager, |
| + RecordUseOf(DataModelMatches(credit_card.guid()))) |
| + .Times(1); |
| + |
| + payment_request.RecordUseStats(); |
| +} |
| + |
| +// Test that the use counts of the data models are updated as expected when no |
| +// shipping or contact information is requested. |
| +TEST_F(PaymentRequestTest, RecordUseStats_NoShippingOrContactInfoRequested) { |
| + MockTestPersonalDataManager personal_data_manager; |
| + autofill::AutofillProfile address = autofill::test::GetFullProfile(); |
| + personal_data_manager.AddTestingProfile(&address); |
| + autofill::CreditCard credit_card = autofill::test::GetCreditCard(); |
| + personal_data_manager.AddTestingCreditCard(&credit_card); |
| + credit_card.set_billing_address_id(address.guid()); |
| + |
| + web::PaymentRequest web_payment_request = |
| + payment_request_test_util::CreateTestWebPaymentRequest(); |
| + web_payment_request.options.request_shipping = false; |
| + web_payment_request.options.request_payer_name = false; |
| + web_payment_request.options.request_payer_email = false; |
| + web_payment_request.options.request_payer_phone = false; |
| + |
| + TestPaymentRequest payment_request(web_payment_request, |
| + &personal_data_manager); |
| + EXPECT_EQ(nullptr, payment_request.selected_shipping_profile()); |
| + EXPECT_EQ(nullptr, payment_request.selected_contact_profile()); |
| + EXPECT_EQ(credit_card.guid(), payment_request.selected_credit_card()->guid()); |
| + |
| + EXPECT_CALL(personal_data_manager, |
| + RecordUseOf(DataModelMatches(address.guid()))) |
| + .Times(0); |
| + EXPECT_CALL(personal_data_manager, |
| + RecordUseOf(DataModelMatches(credit_card.guid()))) |
| + .Times(1); |
| + |
| + payment_request.RecordUseStats(); |
| +} |
|
please use gerrit instead
2017/07/05 12:51:07
Please add a test case for different profiles bein
Moe
2017/07/05 14:43:20
Done.
|