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/contact_info_edit_mediator.h" |
| 6 |
| 7 #include "base/mac/foundation_util.h" |
| 8 #include "base/memory/ptr_util.h" |
| 9 #include "components/autofill/core/browser/autofill_profile.h" |
| 10 #include "components/autofill/core/browser/autofill_test_utils.h" |
| 11 #include "components/autofill/core/browser/test_personal_data_manager.h" |
| 12 #include "components/strings/grit/components_strings.h" |
| 13 #include "ios/chrome/browser/payments/payment_request_test_util.h" |
| 14 #include "ios/chrome/browser/payments/test_payment_request.h" |
| 15 #import "ios/chrome/browser/ui/autofill/autofill_ui_type_util.h" |
| 16 #import "ios/chrome/browser/ui/payments/payment_request_edit_consumer.h" |
| 17 #import "ios/chrome/browser/ui/payments/payment_request_editor_field.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include "testing/platform_test.h" |
| 20 #include "third_party/ocmock/OCMock/OCMock.h" |
| 21 #include "third_party/ocmock/gtest_support.h" |
| 22 #include "ui/base/l10n/l10n_util.h" |
| 23 |
| 24 #if !defined(__has_feature) || !__has_feature(objc_arc) |
| 25 #error "This file requires ARC support." |
| 26 #endif |
| 27 |
| 28 class PaymentRequestContactInfoEditMediatorTest : public PlatformTest { |
| 29 protected: |
| 30 PaymentRequestContactInfoEditMediatorTest() |
| 31 : payment_request_(base::MakeUnique<TestPaymentRequest>( |
| 32 payment_request_test_util::CreateTestWebPaymentRequest(), |
| 33 &personal_data_manager_)) {} |
| 34 |
| 35 autofill::TestPersonalDataManager personal_data_manager_; |
| 36 std::unique_ptr<TestPaymentRequest> payment_request_; |
| 37 }; |
| 38 |
| 39 // Tests that the expected editor fields are created when creating a profile. |
| 40 TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsWhenCreate) { |
| 41 id check_block = ^BOOL(id value) { |
| 42 EXPECT_TRUE([value isKindOfClass:[NSArray class]]); |
| 43 NSArray* fields = base::mac::ObjCCastStrict<NSArray>(value); |
| 44 EXPECT_EQ(3U, fields.count); |
| 45 |
| 46 id field = fields[0]; |
| 47 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 48 EditorField* editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 49 EXPECT_EQ(AutofillUITypeProfileFullName, editor_field.autofillUIType); |
| 50 EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType); |
| 51 EXPECT_TRUE([editor_field.label |
| 52 isEqualToString:l10n_util::GetNSString( |
| 53 IDS_PAYMENTS_NAME_FIELD_IN_CONTACT_DETAILS)]); |
| 54 EXPECT_EQ(nil, editor_field.value); |
| 55 |
| 56 field = fields[1]; |
| 57 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 58 editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 59 EXPECT_EQ(AutofillUITypeProfileHomePhoneWholeNumber, |
| 60 editor_field.autofillUIType); |
| 61 EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType); |
| 62 EXPECT_TRUE([editor_field.label |
| 63 isEqualToString:l10n_util::GetNSString( |
| 64 IDS_PAYMENTS_PHONE_FIELD_IN_CONTACT_DETAILS)]); |
| 65 EXPECT_EQ(nil, editor_field.value); |
| 66 |
| 67 field = fields[2]; |
| 68 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 69 editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 70 EXPECT_EQ(AutofillUITypeProfileEmailAddress, editor_field.autofillUIType); |
| 71 EXPECT_EQ(EditorFieldTypeTextField, editor_field.fieldType); |
| 72 EXPECT_TRUE([editor_field.label |
| 73 isEqualToString:l10n_util::GetNSString( |
| 74 IDS_PAYMENTS_EMAIL_FIELD_IN_CONTACT_DETAILS)]); |
| 75 EXPECT_EQ(nil, editor_field.value); |
| 76 |
| 77 return YES; |
| 78 }; |
| 79 |
| 80 // Mock the consumer. |
| 81 id consumer = |
| 82 [OCMockObject mockForProtocol:@protocol(PaymentRequestEditConsumer)]; |
| 83 [[consumer expect] setEditorFields:[OCMArg checkWithBlock:check_block]]; |
| 84 |
| 85 ContactInfoEditMediator* mediator = [[ContactInfoEditMediator alloc] |
| 86 initWithPaymentRequest:payment_request_.get() |
| 87 profile:nil]; |
| 88 [mediator setConsumer:consumer]; |
| 89 |
| 90 EXPECT_OCMOCK_VERIFY(consumer); |
| 91 } |
| 92 |
| 93 // Tests that the expected editor fields are created when editing a profile. |
| 94 TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsWhenEdit) { |
| 95 id check_block = ^BOOL(id value) { |
| 96 EXPECT_TRUE([value isKindOfClass:[NSArray class]]); |
| 97 NSArray* fields = base::mac::ObjCCastStrict<NSArray>(value); |
| 98 EXPECT_EQ(3U, fields.count); |
| 99 |
| 100 id field = fields[0]; |
| 101 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 102 EditorField* editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 103 EXPECT_TRUE([editor_field.value isEqualToString:@"John H. Doe"]); |
| 104 |
| 105 field = fields[1]; |
| 106 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 107 editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 108 EXPECT_TRUE([editor_field.value isEqualToString:@"16502111111"]); |
| 109 |
| 110 field = fields[2]; |
| 111 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 112 editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 113 EXPECT_TRUE([editor_field.value isEqualToString:@"johndoe@hades.com"]); |
| 114 |
| 115 return YES; |
| 116 }; |
| 117 |
| 118 // Mock the consumer. |
| 119 id consumer = |
| 120 [OCMockObject mockForProtocol:@protocol(PaymentRequestEditConsumer)]; |
| 121 [[consumer expect] setEditorFields:[OCMArg checkWithBlock:check_block]]; |
| 122 |
| 123 autofill::AutofillProfile autofill_profile = autofill::test::GetFullProfile(); |
| 124 ContactInfoEditMediator* mediator = [[ContactInfoEditMediator alloc] |
| 125 initWithPaymentRequest:payment_request_.get() |
| 126 profile:&autofill_profile]; |
| 127 [mediator setConsumer:consumer]; |
| 128 |
| 129 EXPECT_OCMOCK_VERIFY(consumer); |
| 130 } |
| 131 |
| 132 // Tests that the expected editor fields are created when only name is |
| 133 // requested. |
| 134 TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsRequestNameOnly) { |
| 135 id check_block = ^BOOL(id value) { |
| 136 EXPECT_TRUE([value isKindOfClass:[NSArray class]]); |
| 137 NSArray* fields = base::mac::ObjCCastStrict<NSArray>(value); |
| 138 EXPECT_EQ(1U, fields.count); |
| 139 |
| 140 id field = fields[0]; |
| 141 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 142 EditorField* editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 143 EXPECT_EQ(AutofillUITypeProfileFullName, editor_field.autofillUIType); |
| 144 |
| 145 return YES; |
| 146 }; |
| 147 |
| 148 payment_request_->web_payment_request().options.request_payer_phone = false; |
| 149 payment_request_->web_payment_request().options.request_payer_email = false; |
| 150 |
| 151 // Mock the consumer. |
| 152 id consumer = |
| 153 [OCMockObject mockForProtocol:@protocol(PaymentRequestEditConsumer)]; |
| 154 [[consumer expect] setEditorFields:[OCMArg checkWithBlock:check_block]]; |
| 155 |
| 156 ContactInfoEditMediator* mediator = [[ContactInfoEditMediator alloc] |
| 157 initWithPaymentRequest:payment_request_.get() |
| 158 profile:nil]; |
| 159 [mediator setConsumer:consumer]; |
| 160 |
| 161 EXPECT_OCMOCK_VERIFY(consumer); |
| 162 } |
| 163 |
| 164 // Tests that the expected editor fields are created when phone number and email |
| 165 // are requested. |
| 166 TEST_F(PaymentRequestContactInfoEditMediatorTest, TestFieldsRequestPhoneEmail) { |
| 167 id check_block = ^BOOL(id value) { |
| 168 EXPECT_TRUE([value isKindOfClass:[NSArray class]]); |
| 169 NSArray* fields = base::mac::ObjCCastStrict<NSArray>(value); |
| 170 EXPECT_EQ(2U, fields.count); |
| 171 |
| 172 id field = fields[0]; |
| 173 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 174 EditorField* editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 175 EXPECT_EQ(AutofillUITypeProfileHomePhoneWholeNumber, |
| 176 editor_field.autofillUIType); |
| 177 |
| 178 field = fields[1]; |
| 179 EXPECT_TRUE([field isKindOfClass:[EditorField class]]); |
| 180 editor_field = base::mac::ObjCCastStrict<EditorField>(field); |
| 181 EXPECT_EQ(AutofillUITypeProfileEmailAddress, editor_field.autofillUIType); |
| 182 |
| 183 return YES; |
| 184 }; |
| 185 |
| 186 payment_request_->web_payment_request().options.request_payer_name = false; |
| 187 |
| 188 // Mock the consumer. |
| 189 id consumer = |
| 190 [OCMockObject mockForProtocol:@protocol(PaymentRequestEditConsumer)]; |
| 191 [[consumer expect] setEditorFields:[OCMArg checkWithBlock:check_block]]; |
| 192 |
| 193 ContactInfoEditMediator* mediator = [[ContactInfoEditMediator alloc] |
| 194 initWithPaymentRequest:payment_request_.get() |
| 195 profile:nil]; |
| 196 [mediator setConsumer:consumer]; |
| 197 |
| 198 EXPECT_OCMOCK_VERIFY(consumer); |
| 199 } |
OLD | NEW |