Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 #import "ios/chrome/browser/ui/payments/payment_request_mediator.h" | |
| 6 | |
| 7 #import <Foundation/Foundation.h> | |
| 8 | |
| 9 #include "base/mac/foundation_util.h" | |
| 10 #include "base/memory/ptr_util.h" | |
| 11 #include "base/strings/utf_string_conversions.h" | |
| 12 #include "components/autofill/core/browser/autofill_profile.h" | |
| 13 #include "components/autofill/core/browser/autofill_test_utils.h" | |
| 14 #include "components/autofill/core/browser/credit_card.h" | |
| 15 #include "components/autofill/core/browser/test_personal_data_manager.h" | |
| 16 #include "components/payments/core/strings_util.h" | |
| 17 #include "components/signin/core/browser/signin_manager.h" | |
| 18 #include "components/strings/grit/components_strings.h" | |
| 19 #include "ios/chrome/browser/browser_state/test_chrome_browser_state.h" | |
| 20 #include "ios/chrome/browser/payments/payment_request_test_util.h" | |
| 21 #include "ios/chrome/browser/payments/payment_request_util.h" | |
| 22 #include "ios/chrome/browser/payments/test_payment_request.h" | |
| 23 #include "ios/chrome/browser/signin/fake_signin_manager_builder.h" | |
| 24 #include "ios/chrome/browser/signin/signin_manager_factory.h" | |
| 25 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item .h" | |
| 26 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item .h" | |
| 27 #import "ios/chrome/browser/ui/payments/cells/autofill_profile_item.h" | |
| 28 #import "ios/chrome/browser/ui/payments/cells/payment_method_item.h" | |
| 29 #import "ios/chrome/browser/ui/payments/cells/payments_text_item.h" | |
| 30 #import "ios/chrome/browser/ui/payments/cells/price_item.h" | |
| 31 #include "ios/web/public/payments/payment_request.h" | |
| 32 #include "ios/web/public/test/test_web_thread_bundle.h" | |
| 33 #include "testing/gtest/include/gtest/gtest.h" | |
| 34 #include "testing/platform_test.h" | |
| 35 #include "ui/base/l10n/l10n_util.h" | |
| 36 | |
| 37 #if !defined(__has_feature) || !__has_feature(objc_arc) | |
| 38 #error "This file requires ARC support." | |
| 39 #endif | |
| 40 | |
| 41 namespace { | |
| 42 using ::payments::GetShippingOptionSectionString; | |
| 43 using ::payment_request_util::GetEmailLabelFromAutofillProfile; | |
| 44 using ::payment_request_util::GetNameLabelFromAutofillProfile; | |
| 45 using ::payment_request_util::GetPhoneNumberLabelFromAutofillProfile; | |
| 46 using ::payment_request_util::GetShippingAddressLabelFromAutofillProfile; | |
| 47 } // namespace | |
| 48 | |
| 49 class PaymentRequestMediatorTest : public PlatformTest { | |
| 50 protected: | |
| 51 PaymentRequestMediatorTest() | |
| 52 : autofill_profile_(autofill::test::GetFullProfile()), | |
| 53 credit_card_(autofill::test::GetCreditCard()) { | |
| 54 // Add testing profile and credit card to autofill::TestPersonalDataManager. | |
| 55 personal_data_manager_.AddTestingProfile(&autofill_profile_); | |
| 56 personal_data_manager_.AddTestingCreditCard(&credit_card_); | |
| 57 | |
| 58 payment_request_ = base::MakeUnique<TestPaymentRequest>( | |
| 59 payment_request_test_util::CreateTestWebPaymentRequest(), | |
| 60 &personal_data_manager_); | |
| 61 | |
| 62 TestChromeBrowserState::Builder test_cbs_builder; | |
| 63 test_cbs_builder.AddTestingFactory(ios::SigninManagerFactory::GetInstance(), | |
| 64 &ios::BuildFakeSigninManager); | |
| 65 chrome_browser_state_ = test_cbs_builder.Build(); | |
| 66 mediator_ = [[PaymentRequestMediator alloc] | |
| 67 initWithBrowserState:chrome_browser_state_.get() | |
| 68 paymentRequest:payment_request_.get()]; | |
| 69 } | |
| 70 | |
| 71 PaymentRequestMediator* GetPaymentRequestMediator() { return mediator_; } | |
| 72 | |
| 73 web::TestWebThreadBundle thread_bundle_; | |
| 74 | |
|
lpromero
2017/06/06 09:43:55
Is there a reason for this new line? (For example,
Moe
2017/06/07 02:12:51
Exactly. Here, https://cs.chromium.org/chromium/sr
| |
| 75 autofill::AutofillProfile autofill_profile_; | |
| 76 autofill::CreditCard credit_card_; | |
| 77 autofill::TestPersonalDataManager personal_data_manager_; | |
| 78 std::unique_ptr<TestPaymentRequest> payment_request_; | |
| 79 std::unique_ptr<TestChromeBrowserState> chrome_browser_state_; | |
| 80 PaymentRequestMediator* mediator_; | |
| 81 }; | |
| 82 | |
| 83 // Tests wether payment can be completed when expected. | |
|
lpromero
2017/06/06 09:43:55
*whether
Moe
2017/06/07 02:12:51
Done.
| |
| 84 TEST_F(PaymentRequestMediatorTest, TestCanPay) { | |
| 85 // Payment cannot be completed if there is no selected credit card. | |
| 86 EXPECT_TRUE([GetPaymentRequestMediator() canPay]); | |
| 87 autofill::CreditCard* selected_credit_card = | |
| 88 payment_request_->selected_credit_card(); | |
| 89 payment_request_->set_selected_credit_card(nullptr); | |
| 90 EXPECT_FALSE([GetPaymentRequestMediator() canPay]); | |
| 91 | |
| 92 // Restore the selected credit card. | |
| 93 payment_request_->set_selected_credit_card(selected_credit_card); | |
| 94 EXPECT_TRUE([GetPaymentRequestMediator() canPay]); | |
| 95 | |
| 96 // Payment cannot be completed if there is no selected shipping profile, | |
| 97 // unless no shipping information is requested. | |
| 98 autofill::AutofillProfile* selected_shipping_profile = | |
| 99 payment_request_->selected_shipping_profile(); | |
| 100 payment_request_->set_selected_shipping_profile(nullptr); | |
| 101 EXPECT_FALSE([GetPaymentRequestMediator() canPay]); | |
| 102 payment_request_->web_payment_request().options.request_shipping = false; | |
| 103 EXPECT_FALSE([GetPaymentRequestMediator() requestShipping]); | |
| 104 EXPECT_TRUE([GetPaymentRequestMediator() canPay]); | |
| 105 | |
| 106 // Restore the selected shipping profile and request for shipping information. | |
| 107 payment_request_->set_selected_shipping_profile(selected_shipping_profile); | |
| 108 payment_request_->web_payment_request().options.request_shipping = true; | |
| 109 EXPECT_TRUE([GetPaymentRequestMediator() requestShipping]); | |
| 110 EXPECT_TRUE([GetPaymentRequestMediator() canPay]); | |
| 111 | |
| 112 // Payment cannot be completed if there is no selected shipping option, | |
| 113 // unless no shipping information is requested. | |
| 114 web::PaymentShippingOption* selected_shipping_option = | |
| 115 payment_request_->selected_shipping_option(); | |
| 116 payment_request_->set_selected_shipping_option(nullptr); | |
| 117 EXPECT_FALSE([GetPaymentRequestMediator() canPay]); | |
| 118 payment_request_->web_payment_request().options.request_shipping = false; | |
| 119 EXPECT_TRUE([GetPaymentRequestMediator() canPay]); | |
| 120 | |
| 121 // Restore the selected shipping option and request for shipping information. | |
| 122 payment_request_->set_selected_shipping_option(selected_shipping_option); | |
| 123 payment_request_->web_payment_request().options.request_shipping = true; | |
| 124 EXPECT_TRUE([GetPaymentRequestMediator() canPay]); | |
| 125 | |
| 126 // Payment cannot be completed if there is no selected contact profile, unless | |
| 127 // no contact information is requested. | |
| 128 payment_request_->set_selected_contact_profile(nullptr); | |
| 129 EXPECT_FALSE([GetPaymentRequestMediator() canPay]); | |
| 130 payment_request_->web_payment_request().options.request_payer_name = false; | |
| 131 EXPECT_TRUE([GetPaymentRequestMediator() requestContactInfo]); | |
| 132 EXPECT_FALSE([GetPaymentRequestMediator() canPay]); | |
| 133 payment_request_->web_payment_request().options.request_payer_phone = false; | |
| 134 EXPECT_TRUE([GetPaymentRequestMediator() requestContactInfo]); | |
| 135 EXPECT_FALSE([GetPaymentRequestMediator() canPay]); | |
| 136 payment_request_->web_payment_request().options.request_payer_email = false; | |
| 137 EXPECT_FALSE([GetPaymentRequestMediator() requestContactInfo]); | |
| 138 EXPECT_TRUE([GetPaymentRequestMediator() canPay]); | |
| 139 } | |
| 140 | |
| 141 // Tests that the Payment Summary item is created as expected. | |
| 142 TEST_F(PaymentRequestMediatorTest, TestPaymentSummaryItem) { | |
| 143 EXPECT_TRUE([GetPaymentRequestMediator() hasPaymentItems]); | |
| 144 | |
| 145 // Payment Summary item should be of type PriceItem. | |
| 146 id item = [GetPaymentRequestMediator() paymentSummaryItem]; | |
| 147 ASSERT_TRUE([item isMemberOfClass:[PriceItem class]]); | |
| 148 PriceItem* payment_summary_item = base::mac::ObjCCastStrict<PriceItem>(item); | |
| 149 EXPECT_TRUE([payment_summary_item.item isEqualToString:@"Total"]); | |
| 150 EXPECT_TRUE([payment_summary_item.price isEqualToString:@"USD $1.00"]); | |
| 151 EXPECT_EQ(nil, payment_summary_item.notification); | |
| 152 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 153 payment_summary_item.accessoryType); | |
| 154 | |
| 155 // A label should indicate if the total value was changed. | |
| 156 GetPaymentRequestMediator().totalValueChanged = YES; | |
| 157 item = [GetPaymentRequestMediator() paymentSummaryItem]; | |
| 158 payment_summary_item = base::mac::ObjCCastStrict<PriceItem>(item); | |
| 159 EXPECT_TRUE([payment_summary_item.notification | |
| 160 isEqualToString:l10n_util::GetNSString(IDS_PAYMENTS_UPDATED_LABEL)]); | |
| 161 | |
| 162 // The next time the data source is queried for the Payment Summary item, the | |
| 163 // label should disappear. | |
| 164 item = [GetPaymentRequestMediator() paymentSummaryItem]; | |
| 165 payment_summary_item = base::mac::ObjCCastStrict<PriceItem>(item); | |
| 166 EXPECT_EQ(nil, payment_summary_item.notification); | |
| 167 | |
| 168 // Remove the display items. | |
| 169 web::PaymentRequest web_payment_request = | |
| 170 payment_request_->web_payment_request(); | |
| 171 web_payment_request.details.display_items.clear(); | |
| 172 payment_request_->UpdatePaymentDetails(web_payment_request.details); | |
| 173 EXPECT_FALSE([GetPaymentRequestMediator() hasPaymentItems]); | |
| 174 | |
| 175 // No accessory view indicates there are no display items. | |
| 176 item = [GetPaymentRequestMediator() paymentSummaryItem]; | |
| 177 payment_summary_item = base::mac::ObjCCastStrict<PriceItem>(item); | |
| 178 EXPECT_EQ(MDCCollectionViewCellAccessoryNone, | |
| 179 payment_summary_item.accessoryType); | |
| 180 } | |
| 181 | |
| 182 // Tests that the Shipping section header item is created as expected. | |
| 183 TEST_F(PaymentRequestMediatorTest, TestShippingHeaderItem) { | |
| 184 // Shipping section header item should be of type PaymentsTextItem. | |
| 185 id item = [GetPaymentRequestMediator() shippingSectionHeaderItem]; | |
| 186 ASSERT_TRUE([item isMemberOfClass:[PaymentsTextItem class]]); | |
| 187 PaymentsTextItem* shipping_section_header_item = | |
| 188 base::mac::ObjCCastStrict<PaymentsTextItem>(item); | |
| 189 EXPECT_TRUE([shipping_section_header_item.text | |
| 190 isEqualToString:l10n_util::GetNSString( | |
| 191 IDS_PAYMENTS_SHIPPING_SUMMARY_LABEL)]); | |
| 192 EXPECT_EQ(nil, shipping_section_header_item.detailText); | |
| 193 } | |
| 194 | |
| 195 // Tests that the Shipping Address item is created as expected. | |
| 196 TEST_F(PaymentRequestMediatorTest, TestShippingAddressItem) { | |
| 197 // Shipping Address item should be of type AutofillProfileItem. | |
| 198 id item = [GetPaymentRequestMediator() shippingAddressItem]; | |
| 199 ASSERT_TRUE([item isMemberOfClass:[AutofillProfileItem class]]); | |
| 200 AutofillProfileItem* shipping_address_item = | |
| 201 base::mac::ObjCCastStrict<AutofillProfileItem>(item); | |
| 202 EXPECT_TRUE([shipping_address_item.name | |
| 203 isEqualToString:GetNameLabelFromAutofillProfile( | |
| 204 *payment_request_->selected_shipping_profile())]); | |
| 205 EXPECT_TRUE([shipping_address_item.address | |
| 206 isEqualToString:GetShippingAddressLabelFromAutofillProfile( | |
| 207 *payment_request_->selected_shipping_profile())]); | |
| 208 EXPECT_TRUE([shipping_address_item.phoneNumber | |
| 209 isEqualToString:GetPhoneNumberLabelFromAutofillProfile( | |
| 210 *payment_request_->selected_shipping_profile())]); | |
| 211 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 212 shipping_address_item.accessoryType); | |
| 213 | |
| 214 // Reset the selected shipping profile. | |
| 215 payment_request_->set_selected_shipping_profile(nullptr); | |
| 216 | |
| 217 // When there is no selected shipping address, the Shipping Address item | |
| 218 // should be of type CollectionViewDetailItem. | |
| 219 item = [GetPaymentRequestMediator() shippingAddressItem]; | |
| 220 ASSERT_TRUE([item isMemberOfClass:[CollectionViewDetailItem class]]); | |
| 221 CollectionViewDetailItem* add_shipping_address_item = | |
| 222 base::mac::ObjCCastStrict<CollectionViewDetailItem>(item); | |
| 223 EXPECT_TRUE([add_shipping_address_item.text | |
| 224 isEqualToString:l10n_util::GetNSString( | |
| 225 IDS_PAYMENTS_SHIPPING_ADDRESS_LABEL)]); | |
| 226 EXPECT_EQ(nil, add_shipping_address_item.detailText); | |
| 227 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 228 add_shipping_address_item.accessoryType); | |
| 229 | |
| 230 // Remove the shipping profiles. | |
| 231 payment_request_->ClearShippingProfiles(); | |
| 232 | |
| 233 // No accessory view indicates there are no shipping profiles to choose from. | |
| 234 item = [GetPaymentRequestMediator() shippingAddressItem]; | |
| 235 add_shipping_address_item = | |
| 236 base::mac::ObjCCastStrict<CollectionViewDetailItem>(item); | |
| 237 EXPECT_TRUE([add_shipping_address_item.detailText | |
| 238 isEqualToString:[l10n_util::GetNSString(IDS_ADD) | |
| 239 uppercaseStringWithLocale:[NSLocale currentLocale]]]); | |
| 240 EXPECT_EQ(MDCCollectionViewCellAccessoryNone, | |
| 241 add_shipping_address_item.accessoryType); | |
| 242 } | |
| 243 | |
| 244 // Tests that the Shipping Option item is created as expected. | |
| 245 TEST_F(PaymentRequestMediatorTest, TestShippingOptionItem) { | |
| 246 // Shipping Option item should be of type PaymentsTextItem. | |
| 247 id item = [GetPaymentRequestMediator() shippingOptionItem]; | |
| 248 ASSERT_TRUE([item isMemberOfClass:[PaymentsTextItem class]]); | |
| 249 PaymentsTextItem* shipping_option_item = | |
| 250 base::mac::ObjCCastStrict<PaymentsTextItem>(item); | |
| 251 EXPECT_TRUE([shipping_option_item.text isEqualToString:@"1-Day"]); | |
| 252 EXPECT_TRUE([shipping_option_item.detailText isEqualToString:@"$0.99"]); | |
| 253 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 254 shipping_option_item.accessoryType); | |
| 255 | |
| 256 // Reset the selected shipping option. | |
| 257 payment_request_->set_selected_shipping_option(nullptr); | |
| 258 | |
| 259 // When there is no selected shipping option, the Shipping Option item should | |
| 260 // be of type CollectionViewDetailItem. | |
| 261 item = [GetPaymentRequestMediator() shippingOptionItem]; | |
| 262 ASSERT_TRUE([item isMemberOfClass:[CollectionViewDetailItem class]]); | |
| 263 CollectionViewDetailItem* add_shipping_option_item = | |
| 264 base::mac::ObjCCastStrict<CollectionViewDetailItem>(item); | |
| 265 EXPECT_TRUE([add_shipping_option_item.text | |
| 266 isEqualToString:l10n_util::GetNSString( | |
| 267 IDS_PAYMENTS_SHIPPING_OPTION_LABEL)]); | |
| 268 EXPECT_EQ(nil, add_shipping_option_item.detailText); | |
| 269 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 270 add_shipping_option_item.accessoryType); | |
| 271 } | |
| 272 | |
| 273 // Tests that the Payment Method section header item is created as expected. | |
| 274 TEST_F(PaymentRequestMediatorTest, TestPaymentMethodHeaderItem) { | |
| 275 // Payment Method section header item should be of type PaymentsTextItem. | |
| 276 id item = [GetPaymentRequestMediator() paymentMethodSectionHeaderItem]; | |
| 277 ASSERT_TRUE([item isMemberOfClass:[PaymentsTextItem class]]); | |
| 278 PaymentsTextItem* payment_method_section_header_item = | |
| 279 base::mac::ObjCCastStrict<PaymentsTextItem>(item); | |
| 280 EXPECT_TRUE([payment_method_section_header_item.text | |
| 281 isEqualToString:l10n_util::GetNSString( | |
| 282 IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME)]); | |
| 283 EXPECT_EQ(nil, payment_method_section_header_item.detailText); | |
| 284 } | |
| 285 | |
| 286 // Tests that the Payment Method item is created as expected. | |
| 287 TEST_F(PaymentRequestMediatorTest, TestPaymentMethodItem) { | |
| 288 // Payment Method item should be of type PaymentsTextItem. | |
| 289 id item = [GetPaymentRequestMediator() paymentMethodItem]; | |
| 290 ASSERT_TRUE([item isMemberOfClass:[PaymentMethodItem class]]); | |
| 291 PaymentMethodItem* payment_method_item = | |
| 292 base::mac::ObjCCastStrict<PaymentMethodItem>(item); | |
| 293 EXPECT_TRUE([payment_method_item.methodID hasPrefix:@"Visa"]); | |
| 294 EXPECT_TRUE([payment_method_item.methodID hasSuffix:@"1111"]); | |
| 295 EXPECT_TRUE([payment_method_item.methodDetail isEqualToString:@"Test User"]); | |
| 296 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 297 payment_method_item.accessoryType); | |
| 298 | |
| 299 // Reset the selected credit card. | |
| 300 payment_request_->set_selected_credit_card(nullptr); | |
| 301 | |
| 302 // When there is no selected credit card, the Payment Method item should be of | |
| 303 // type CollectionViewDetailItem. | |
| 304 item = [GetPaymentRequestMediator() paymentMethodItem]; | |
| 305 ASSERT_TRUE([item isMemberOfClass:[CollectionViewDetailItem class]]); | |
| 306 CollectionViewDetailItem* add_payment_method_item = | |
| 307 base::mac::ObjCCastStrict<CollectionViewDetailItem>(item); | |
| 308 EXPECT_TRUE([add_payment_method_item.text | |
| 309 isEqualToString:l10n_util::GetNSString( | |
| 310 IDS_PAYMENT_REQUEST_PAYMENT_METHOD_SECTION_NAME)]); | |
| 311 EXPECT_EQ(nil, add_payment_method_item.detailText); | |
| 312 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 313 add_payment_method_item.accessoryType); | |
| 314 | |
| 315 // Remove the credit cards. | |
| 316 payment_request_->ClearCreditCards(); | |
| 317 | |
| 318 // No accessory view indicates there are no payment methods to choose from. | |
| 319 item = [GetPaymentRequestMediator() paymentMethodItem]; | |
| 320 add_payment_method_item = | |
| 321 base::mac::ObjCCastStrict<CollectionViewDetailItem>(item); | |
| 322 EXPECT_TRUE([add_payment_method_item.detailText | |
| 323 isEqualToString:[l10n_util::GetNSString(IDS_ADD) | |
| 324 uppercaseStringWithLocale:[NSLocale currentLocale]]]); | |
| 325 EXPECT_EQ(MDCCollectionViewCellAccessoryNone, | |
| 326 add_payment_method_item.accessoryType); | |
| 327 } | |
| 328 | |
| 329 // Tests that the Contact Info section header item is created as expected. | |
| 330 TEST_F(PaymentRequestMediatorTest, TestContactInfoHeaderItem) { | |
| 331 // Contact Info section header item should be of type PaymentsTextItem. | |
| 332 id item = [GetPaymentRequestMediator() contactInfoSectionHeaderItem]; | |
| 333 ASSERT_TRUE([item isMemberOfClass:[PaymentsTextItem class]]); | |
| 334 PaymentsTextItem* contact_info_section_header_item = | |
| 335 base::mac::ObjCCastStrict<PaymentsTextItem>(item); | |
| 336 EXPECT_TRUE([contact_info_section_header_item.text | |
| 337 isEqualToString:l10n_util::GetNSString( | |
| 338 IDS_PAYMENTS_CONTACT_DETAILS_LABEL)]); | |
| 339 EXPECT_EQ(nil, contact_info_section_header_item.detailText); | |
| 340 } | |
| 341 | |
| 342 // Tests that the Contact Info item is created as expected. | |
| 343 TEST_F(PaymentRequestMediatorTest, TestContactInfoItem) { | |
| 344 // Contact Info item should be of type AutofillProfileItem. | |
| 345 id item = [GetPaymentRequestMediator() contactInfoItem]; | |
| 346 ASSERT_TRUE([item isMemberOfClass:[AutofillProfileItem class]]); | |
| 347 AutofillProfileItem* contact_info_item = | |
| 348 base::mac::ObjCCastStrict<AutofillProfileItem>(item); | |
| 349 EXPECT_TRUE([contact_info_item.name | |
| 350 isEqualToString:GetNameLabelFromAutofillProfile( | |
| 351 *payment_request_->selected_contact_profile())]); | |
| 352 EXPECT_TRUE([contact_info_item.phoneNumber | |
| 353 isEqualToString:GetPhoneNumberLabelFromAutofillProfile( | |
| 354 *payment_request_->selected_contact_profile())]); | |
| 355 EXPECT_TRUE([contact_info_item.email | |
| 356 isEqualToString:GetEmailLabelFromAutofillProfile( | |
| 357 *payment_request_->selected_contact_profile())]); | |
| 358 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 359 contact_info_item.accessoryType); | |
| 360 | |
| 361 // Reset the selected contact profile. | |
| 362 payment_request_->set_selected_contact_profile(nullptr); | |
| 363 | |
| 364 // When there is no selected contact profile, the Payment Method item should | |
| 365 // be of type CollectionViewDetailItem. | |
| 366 item = [GetPaymentRequestMediator() contactInfoItem]; | |
| 367 ASSERT_TRUE([item isMemberOfClass:[CollectionViewDetailItem class]]); | |
| 368 CollectionViewDetailItem* add_contact_info_item = | |
| 369 base::mac::ObjCCastStrict<CollectionViewDetailItem>(item); | |
| 370 EXPECT_TRUE([add_contact_info_item.text | |
| 371 isEqualToString:l10n_util::GetNSString( | |
| 372 IDS_PAYMENTS_CONTACT_DETAILS_LABEL)]); | |
| 373 EXPECT_EQ(nil, add_contact_info_item.detailText); | |
| 374 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, | |
| 375 add_contact_info_item.accessoryType); | |
| 376 | |
| 377 // Remove the contact profiles. | |
| 378 payment_request_->ClearContactProfiles(); | |
| 379 | |
| 380 // No accessory view indicates there are no contact profiles to choose from. | |
| 381 item = [GetPaymentRequestMediator() contactInfoItem]; | |
| 382 add_contact_info_item = | |
| 383 base::mac::ObjCCastStrict<CollectionViewDetailItem>(item); | |
| 384 EXPECT_TRUE([add_contact_info_item.detailText | |
| 385 isEqualToString:[l10n_util::GetNSString(IDS_ADD) | |
| 386 uppercaseStringWithLocale:[NSLocale currentLocale]]]); | |
| 387 EXPECT_EQ(MDCCollectionViewCellAccessoryNone, | |
| 388 add_contact_info_item.accessoryType); | |
| 389 } | |
| 390 | |
| 391 // Tests that the Footer item is created as expected. | |
| 392 TEST_F(PaymentRequestMediatorTest, TestFooterItem) { | |
| 393 // Make sure the user is signed out. | |
| 394 SigninManager* signin_manager = ios::SigninManagerFactory::GetForBrowserState( | |
| 395 chrome_browser_state_.get()); | |
| 396 if (signin_manager->IsAuthenticated()) { | |
| 397 signin_manager->SignOut(signin_metrics::SIGNOUT_TEST, | |
| 398 signin_metrics::SignoutDelete::IGNORE_METRIC); | |
| 399 } | |
| 400 | |
| 401 // Footer item should be of type CollectionViewFooterItem. | |
| 402 id item = [GetPaymentRequestMediator() footerItem]; | |
| 403 ASSERT_TRUE([item isMemberOfClass:[CollectionViewFooterItem class]]); | |
| 404 CollectionViewFooterItem* footer_item = | |
| 405 base::mac::ObjCCastStrict<CollectionViewFooterItem>(item); | |
| 406 EXPECT_TRUE([footer_item.text | |
| 407 isEqualToString:l10n_util::GetNSString( | |
| 408 IDS_PAYMENTS_CARD_AND_ADDRESS_SETTINGS_SIGNED_OUT)]); | |
| 409 | |
| 410 // Fake a signed in user. | |
| 411 signin_manager->SetAuthenticatedAccountInfo("12345", "username@example.com"); | |
| 412 | |
| 413 item = [GetPaymentRequestMediator() footerItem]; | |
| 414 footer_item = base::mac::ObjCCastStrict<CollectionViewFooterItem>(item); | |
| 415 EXPECT_TRUE([footer_item.text | |
| 416 isEqualToString:l10n_util::GetNSStringF( | |
| 417 IDS_PAYMENTS_CARD_AND_ADDRESS_SETTINGS_SIGNED_IN, | |
| 418 base::ASCIIToUTF16("username@example.com"))]); | |
| 419 } | |
| OLD | NEW |