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

Side by Side Diff: ios/chrome/browser/payments/credit_card_edit_view_controller_unittest.mm

Issue 2826593005: [Payment Request] Sever card summary section in the credit card edit form (Closed)
Patch Set: Initial Created 3 years, 8 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
1 // Copyright 2017 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ios/chrome/browser/payments/credit_card_edit_view_controller.h" 5 #import "ios/chrome/browser/payments/credit_card_edit_view_controller.h"
6 6
7 #include "base/mac/foundation_util.h" 7 #include "base/mac/foundation_util.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "components/autofill/core/browser/field_types.h" 9 #include "components/autofill/core/browser/field_types.h"
10 #include "components/autofill/core/browser/test_personal_data_manager.h" 10 #import "ios/chrome/browser/payments/cells/payment_method_item.h"
11 #import "ios/chrome/browser/payments/credit_card_edit_mediator.h"
12 #include "ios/chrome/browser/payments/payment_request.h"
13 #import "ios/chrome/browser/payments/payment_request_editor_field.h" 11 #import "ios/chrome/browser/payments/payment_request_editor_field.h"
14 #include "ios/chrome/browser/payments/payment_request_test_util.h" 12 #include "ios/chrome/browser/payments/payment_request_test_util.h"
15 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h" 13 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
16 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h" 14 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h"
17 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item .h" 15 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item .h"
18 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item .h" 16 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item .h"
19 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item .h" 17 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item .h"
18 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
20 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h " 19 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h "
21 #include "ios/web/public/payments/payment_request.h" 20 #include "ios/web/public/payments/payment_request.h"
22 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
23 22
24 #if !defined(__has_feature) || !__has_feature(objc_arc) 23 #if !defined(__has_feature) || !__has_feature(objc_arc)
25 #error "This file requires ARC support." 24 #error "This file requires ARC support."
26 #endif 25 #endif
27 26
28 @interface TestCreditCardEditViewControllerMediator 27 @interface TestCreditCardEditViewControllerMediator
29 : CreditCardEditViewControllerMediator 28 : NSObject<CreditCardEditViewControllerDataSource>
30 29
31 @end 30 @end
32 31
33 @implementation TestCreditCardEditViewControllerMediator 32 @implementation TestCreditCardEditViewControllerMediator
34 33
35 NSArray<EditorField*>* editorFields() { 34 - (CollectionViewItem*)serverCardSummaryItem {
35 return [[PaymentMethodItem alloc] init];
36 }
37
38 - (NSArray<EditorField*>*)editorFields {
36 return @[ 39 return @[
37 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardNumber 40 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardNumber
38 label:@"Credit Card Number" 41 label:@"Credit Card Number"
39 value:@"4111111111111111" /* Visa */ 42 value:@"4111111111111111" /* Visa */
40 required:YES], 43 required:YES],
41 [[EditorField alloc] 44 [[EditorField alloc]
42 initWithAutofillUIType:AutofillUITypeCreditCardHolderFullName 45 initWithAutofillUIType:AutofillUITypeCreditCardHolderFullName
43 label:@"Cardholder Name" 46 label:@"Cardholder Name"
44 value:@"John Doe" 47 value:@"John Doe"
45 required:YES], 48 required:YES],
46 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpMonth 49 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpMonth
47 label:@"Expiration Month" 50 label:@"Expiration Month"
48 value:@"12" 51 value:@"12"
49 required:YES], 52 required:YES],
50 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpYear 53 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpYear
51 label:@"Expiration Year" 54 label:@"Expiration Year"
52 value:@"2090" 55 value:@"2090"
53 required:YES], 56 required:YES],
54 ]; 57 ];
55 } 58 }
56 59
60 - (NSString*)billingAddressLabelForProfileWithGUID:(NSString*)profileGUID {
61 return nil;
62 }
63
64 - (UIImage*)cardTypeIconFromCardNumber:(NSString*)cardNumber {
65 return nil;
66 }
67
57 @end 68 @end
58 69
59 class PaymentRequestCreditCardEditViewControllerTest 70 class PaymentRequestCreditCardEditViewControllerTest
60 : public CollectionViewControllerTest { 71 : public CollectionViewControllerTest {
61 protected: 72 protected:
62 CollectionViewController* InstantiateController() override { 73 CollectionViewController* InstantiateController() override {
63 payment_request_ = base::MakeUnique<PaymentRequest>( 74 mediator_ = [[TestCreditCardEditViewControllerMediator alloc] init];
64 payment_request_test_util::CreateTestWebPaymentRequest(),
65 &personal_data_manager_);
66
67 CreditCardEditViewControllerMediator* mediator =
68 [[CreditCardEditViewControllerMediator alloc]
69 initWithPaymentRequest:payment_request_.get()
70 creditCard:nil];
71 75
72 CreditCardEditViewController* viewController = 76 CreditCardEditViewController* viewController =
73 [[CreditCardEditViewController alloc] init]; 77 [[CreditCardEditViewController alloc] init];
74 [viewController setDataSource:mediator]; 78 [viewController setDataSource:mediator_];
75 return viewController; 79 return viewController;
76 } 80 }
77 81
78 CreditCardEditViewController* GetCreditCardEditViewController() { 82 CreditCardEditViewController* GetCreditCardEditViewController() {
79 return base::mac::ObjCCastStrict<CreditCardEditViewController>( 83 return base::mac::ObjCCastStrict<CreditCardEditViewController>(
80 controller()); 84 controller());
81 } 85 }
82 86
83 autofill::TestPersonalDataManager personal_data_manager_; 87 TestCreditCardEditViewControllerMediator* mediator_;
macourteau 2017/04/19 15:12:42 nit: = nullptr
Moe 2017/04/19 19:10:29 Done.
84 std::unique_ptr<PaymentRequest> payment_request_;
85 }; 88 };
86 89
87 // Tests that the correct number of items are displayed after loading the model. 90 // Tests that the correct number of items are displayed after loading the model.
88 TEST_F(PaymentRequestCreditCardEditViewControllerTest, TestModel) { 91 TEST_F(PaymentRequestCreditCardEditViewControllerTest, TestModel) {
89 CreateController(); 92 CreateController();
90 CheckController(); 93 CheckController();
91 94
92 [GetCreditCardEditViewController() 95 [GetCreditCardEditViewController()
93 setState:CreditCardEditViewControllerStateEdit]; 96 setState:CreditCardEditViewControllerStateEdit];
94 [GetCreditCardEditViewController() loadModel]; 97 [GetCreditCardEditViewController() loadModel];
95 98
96 // There is one section for every textfield (there are four textfields in 99 // There is one section for every textfield (there are four textfields in
97 // total), one for the footer, and one for the billing address ID item. 100 // total), one for the server card summary section, one for the footer, and
98 ASSERT_EQ(6, NumberOfSections()); 101 // one for the billing address ID item.
102 ASSERT_EQ(7, NumberOfSections());
99 103
100 // The first four sections have only one item of the type AutofillEditItem. 104 // The server card summary section is the first section and has one item of
105 // the type PaymentMethodItem.
101 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(0))); 106 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(0)));
102 id item = GetCollectionViewItem(0, 0); 107 id item = GetCollectionViewItem(0, 0);
103 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); 108 EXPECT_TRUE([item isMemberOfClass:[PaymentMethodItem class]]);
104 109
110 // The next four sections have only one item of the type AutofillEditItem.
105 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(1))); 111 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(1)));
106 item = GetCollectionViewItem(1, 0); 112 item = GetCollectionViewItem(1, 0);
107 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); 113 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]);
108 114
109 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(2))); 115 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(2)));
110 item = GetCollectionViewItem(2, 0); 116 item = GetCollectionViewItem(2, 0);
111 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); 117 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]);
112 118
113 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(3))); 119 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(3)));
114 item = GetCollectionViewItem(3, 0); 120 item = GetCollectionViewItem(3, 0);
115 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); 121 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]);
116 122
123 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(4)));
124 item = GetCollectionViewItem(4, 0);
125 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]);
126
117 // The billing address section contains one item which is of the type 127 // The billing address section contains one item which is of the type
118 // CollectionViewDetailItem. 128 // CollectionViewDetailItem.
119 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(4))); 129 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(5)));
120 item = GetCollectionViewItem(4, 0); 130 item = GetCollectionViewItem(5, 0);
121 EXPECT_TRUE([item isMemberOfClass:[CollectionViewDetailItem class]]); 131 EXPECT_TRUE([item isMemberOfClass:[CollectionViewDetailItem class]]);
122 CollectionViewDetailItem* billing_address_item = item; 132 CollectionViewDetailItem* billing_address_item = item;
123 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, 133 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator,
124 billing_address_item.accessoryType); 134 billing_address_item.accessoryType);
125 135
126 // The footer section contains one item which is of the type 136 // The footer section contains one item which is of the type
127 // CollectionViewFooterItem. 137 // CollectionViewFooterItem.
128 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(5))); 138 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(6)));
129 item = GetCollectionViewItem(5, 0); 139 item = GetCollectionViewItem(6, 0);
130 EXPECT_TRUE([item isMemberOfClass:[CollectionViewFooterItem class]]); 140 EXPECT_TRUE([item isMemberOfClass:[CollectionViewFooterItem class]]);
131 } 141 }
132 142
133 // Tests that the correct number of items are displayed after loading the model, 143 // Tests that the correct number of items are displayed after loading the model,
134 // when creating a new credit card. 144 // when creating a new credit card.
135 TEST_F(PaymentRequestCreditCardEditViewControllerTest, 145 TEST_F(PaymentRequestCreditCardEditViewControllerTest,
136 TestModelCreateNewCreditCard) { 146 TestModelCreateNewCreditCard) {
137 CreateController(); 147 CreateController();
138 CheckController(); 148 CheckController();
139 149
140 [GetCreditCardEditViewController() 150 [GetCreditCardEditViewController()
141 setState:CreditCardEditViewControllerStateCreate]; 151 setState:CreditCardEditViewControllerStateCreate];
142 [GetCreditCardEditViewController() loadModel]; 152 [GetCreditCardEditViewController() loadModel];
143 153
144 // There is an extra section containing a switch that allows the user to save 154 // There is an extra section containing a switch that allows the user to save
145 // the credit card locally. 155 // the credit card locally.
146 ASSERT_EQ(7, NumberOfSections()); 156 ASSERT_EQ(8, NumberOfSections());
147 157
148 // The switch section is the last section before the footer and has one item 158 // The switch section is the last section before the footer and has one item
149 // of the type CollectionViewSwitchItem. The switch is on by defualt. 159 // of the type CollectionViewSwitchItem. The switch is on by defualt.
150 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(5))); 160 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(6)));
151 id item = GetCollectionViewItem(5, 0); 161 id item = GetCollectionViewItem(6, 0);
152 EXPECT_TRUE([item isMemberOfClass:[CollectionViewSwitchItem class]]); 162 EXPECT_TRUE([item isMemberOfClass:[CollectionViewSwitchItem class]]);
153 CollectionViewSwitchItem* switch_item = item; 163 CollectionViewSwitchItem* switch_item = item;
154 EXPECT_EQ(YES, [switch_item isOn]); 164 EXPECT_EQ(YES, [switch_item isOn]);
155 } 165 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698