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

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

Issue 2876603005: [Payment Request] Refactors the edit view controller (Closed)
Patch Set: 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
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/ui/payments/credit_card_edit_view_controller.h" 5 #import "ios/chrome/browser/ui/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 "ios/chrome/browser/payments/payment_request_test_util.h" 10 #include "ios/chrome/browser/payments/payment_request_test_util.h"
11 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h" 11 #import "ios/chrome/browser/ui/autofill/autofill_ui_type.h"
12 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h" 12 #import "ios/chrome/browser/ui/autofill/cells/autofill_edit_item.h"
13 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_detail_item .h"
14 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item .h" 13 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_footer_item .h"
15 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item .h" 14 #import "ios/chrome/browser/ui/collection_view/cells/collection_view_switch_item .h"
16 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h" 15 #import "ios/chrome/browser/ui/collection_view/cells/test_utils.h"
17 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h " 16 #import "ios/chrome/browser/ui/collection_view/collection_view_controller_test.h "
18 #import "ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h" 17 #import "ios/chrome/browser/ui/payments/cells/accepted_payment_methods_item.h"
19 #import "ios/chrome/browser/ui/payments/cells/payment_method_item.h" 18 #import "ios/chrome/browser/ui/payments/cells/payment_method_item.h"
19 #import "ios/chrome/browser/ui/payments/cells/payments_selector_edit_item.h"
20 #import "ios/chrome/browser/ui/payments/payment_request_editor_field.h" 20 #import "ios/chrome/browser/ui/payments/payment_request_editor_field.h"
21 #include "ios/web/public/payments/payment_request.h" 21 #include "ios/web/public/payments/payment_request.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 #if !defined(__has_feature) || !__has_feature(objc_arc) 24 #if !defined(__has_feature) || !__has_feature(objc_arc)
25 #error "This file requires ARC support." 25 #error "This file requires ARC support."
26 #endif 26 #endif
27 27
28 @interface TestCreditCardEditViewControllerMediator 28 @interface TestCreditCardEditViewControllerMediator
29 : NSObject<CreditCardEditViewControllerDataSource> 29 : NSObject<CreditCardEditViewControllerDataSource>
30 30
31 @end 31 @end
32 32
33 @implementation TestCreditCardEditViewControllerMediator 33 @implementation TestCreditCardEditViewControllerMediator
34 34
35 @synthesize state = _state; 35 @synthesize state = _state;
36 36
37 - (CollectionViewItem*)serverCardSummaryItem { 37 - (CollectionViewItem*)headerItem {
38 return [[PaymentMethodItem alloc] init]; 38 return [[PaymentMethodItem alloc] init];
39 } 39 }
40 40
41 - (CollectionViewItem*)acceptedPaymentMethodsItem { 41 - (BOOL)shouldHideBackgroundForHeaderItem {
42 return [[AcceptedPaymentMethodsItem alloc] init]; 42 return NO;
43 } 43 }
44 44
45 - (NSArray<EditorField*>*)editorFields { 45 - (NSArray<EditorField*>*)editorFields {
46 return @[ 46 return @[
47 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardNumber 47 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardNumber
48 fieldType:EditorFieldTypeTextField
48 label:@"Credit Card Number" 49 label:@"Credit Card Number"
49 value:@"4111111111111111" /* Visa */ 50 value:@"4111111111111111" /* Visa */
50 required:YES], 51 required:YES],
51 [[EditorField alloc] 52 [[EditorField alloc]
52 initWithAutofillUIType:AutofillUITypeCreditCardHolderFullName 53 initWithAutofillUIType:AutofillUITypeCreditCardHolderFullName
54 fieldType:EditorFieldTypeTextField
53 label:@"Cardholder Name" 55 label:@"Cardholder Name"
54 value:@"John Doe" 56 value:@"John Doe"
55 required:YES], 57 required:YES],
56 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpMonth 58 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpMonth
59 fieldType:EditorFieldTypeTextField
57 label:@"Expiration Month" 60 label:@"Expiration Month"
58 value:@"12" 61 value:@"12"
59 required:YES], 62 required:YES],
60 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpYear 63 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpYear
64 fieldType:EditorFieldTypeTextField
61 label:@"Expiration Year" 65 label:@"Expiration Year"
62 value:@"2090" 66 value:@"2090"
63 required:YES], 67 required:YES],
68 [[EditorField alloc] initWithAutofillUIType:AutofillUITypeCreditCardExpYear
macourteau 2017/05/11 18:59:40 ExpYear?
Moe 2017/05/11 19:39:38 Done.
69 fieldType:EditorFieldTypeSelector
70 label:@"Billing Address"
71 value:@"12345"
72 required:YES],
64 ]; 73 ];
65 } 74 }
66 75
67 - (NSString*)billingAddressLabelForProfileWithGUID:(NSString*)profileGUID {
68 return nil;
69 }
70
71 - (UIImage*)cardTypeIconFromCardNumber:(NSString*)cardNumber { 76 - (UIImage*)cardTypeIconFromCardNumber:(NSString*)cardNumber {
72 return nil; 77 return nil;
73 } 78 }
74 79
75 @end 80 @end
76 81
77 class PaymentRequestCreditCardEditViewControllerTest 82 class PaymentRequestCreditCardEditViewControllerTest
78 : public CollectionViewControllerTest { 83 : public CollectionViewControllerTest {
79 protected: 84 protected:
80 CollectionViewController* InstantiateController() override { 85 CollectionViewController* InstantiateController() override {
(...skipping 11 matching lines...) Expand all
92 } 97 }
93 98
94 TestCreditCardEditViewControllerMediator* mediator_ = nil; 99 TestCreditCardEditViewControllerMediator* mediator_ = nil;
95 }; 100 };
96 101
97 // Tests that the correct number of items are displayed after loading the model. 102 // Tests that the correct number of items are displayed after loading the model.
98 TEST_F(PaymentRequestCreditCardEditViewControllerTest, TestModel) { 103 TEST_F(PaymentRequestCreditCardEditViewControllerTest, TestModel) {
99 CreateController(); 104 CreateController();
100 CheckController(); 105 CheckController();
101 106
102 [mediator_ setState:CreditCardEditViewControllerStateEdit]; 107 [mediator_ setState:EditViewControllerStateEdit];
103 [GetCreditCardEditViewController() loadModel]; 108 [GetCreditCardEditViewController() loadModel];
104 109
105 // There is one section containing the credit card type icons for the accepted 110 // There is one section containing the credit card type icons for the accepted
106 // payment methods. In addition to that, there is one section for every 111 // payment methods. In addition to that, there is one section for every
107 // textfield (there are four textfields in total), one for the server card 112 // textfield (there are four textfields in total), one for the server card
108 // summary section, one for the footer, and one for the billing address ID 113 // summary section, one for the footer, and one for the billing address ID
109 // item. 114 // item.
110 ASSERT_EQ(8, NumberOfSections()); 115 ASSERT_EQ(7, NumberOfSections());
macourteau 2017/05/11 18:59:40 Please update comment, which describes 8 sections
Moe 2017/05/11 19:39:38 Done.
111 116
112 // The server card summary section is the first section and has one item of 117 // The server card summary section is the first section and has one item of
113 // the type PaymentMethodItem. 118 // the type PaymentMethodItem.
114 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(0))); 119 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(0)));
115 id item = GetCollectionViewItem(0, 0); 120 id item = GetCollectionViewItem(0, 0);
116 EXPECT_TRUE([item isMemberOfClass:[PaymentMethodItem class]]); 121 EXPECT_TRUE([item isMemberOfClass:[PaymentMethodItem class]]);
117 122
118 // The next section is the accepted payment methods section and has one item 123 // The next four sections have only one item of the type AutofillEditItem.
119 // of the type AcceptedPaymentMethodsItem.
120 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(1))); 124 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(1)));
121 item = GetCollectionViewItem(1, 0); 125 item = GetCollectionViewItem(1, 0);
122 EXPECT_TRUE([item isMemberOfClass:[AcceptedPaymentMethodsItem class]]); 126 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]);
123 127
124 // The next four sections have only one item of the type AutofillEditItem.
125 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(2))); 128 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(2)));
126 item = GetCollectionViewItem(2, 0); 129 item = GetCollectionViewItem(2, 0);
127 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); 130 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]);
128 131
129 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(3))); 132 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(3)));
130 item = GetCollectionViewItem(3, 0); 133 item = GetCollectionViewItem(3, 0);
131 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); 134 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]);
132 135
133 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(4))); 136 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(4)));
134 item = GetCollectionViewItem(4, 0); 137 item = GetCollectionViewItem(4, 0);
135 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); 138 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]);
136 139
140 // The billing address section contains one item which is of the type
141 // PaymentsSelectorEditItem.
137 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(5))); 142 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(5)));
138 item = GetCollectionViewItem(5, 0); 143 item = GetCollectionViewItem(5, 0);
139 EXPECT_TRUE([item isMemberOfClass:[AutofillEditItem class]]); 144 EXPECT_TRUE([item isMemberOfClass:[PaymentsSelectorEditItem class]]);
140 145 PaymentsSelectorEditItem* billing_address_item = item;
141 // The billing address section contains one item which is of the type
142 // CollectionViewDetailItem.
143 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(6)));
144 item = GetCollectionViewItem(6, 0);
145 EXPECT_TRUE([item isMemberOfClass:[CollectionViewDetailItem class]]);
146 CollectionViewDetailItem* billing_address_item = item;
147 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator, 146 EXPECT_EQ(MDCCollectionViewCellAccessoryDisclosureIndicator,
148 billing_address_item.accessoryType); 147 billing_address_item.accessoryType);
149 148
150 // The footer section contains one item which is of the type 149 // The footer section contains one item which is of the type
151 // CollectionViewFooterItem. 150 // CollectionViewFooterItem.
152 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(7))); 151 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(6)));
153 item = GetCollectionViewItem(7, 0); 152 item = GetCollectionViewItem(6, 0);
154 EXPECT_TRUE([item isMemberOfClass:[CollectionViewFooterItem class]]); 153 EXPECT_TRUE([item isMemberOfClass:[CollectionViewFooterItem class]]);
155 } 154 }
156 155
157 // Tests that the correct number of items are displayed after loading the model, 156 // Tests that the correct number of items are displayed after loading the model,
158 // when creating a new credit card. 157 // when creating a new credit card.
159 TEST_F(PaymentRequestCreditCardEditViewControllerTest, 158 TEST_F(PaymentRequestCreditCardEditViewControllerTest,
160 TestModelCreateNewCreditCard) { 159 TestModelCreateNewCreditCard) {
161 CreateController(); 160 CreateController();
162 CheckController(); 161 CheckController();
163 162
164 [mediator_ setState:CreditCardEditViewControllerStateCreate]; 163 [mediator_ setState:EditViewControllerStateCreate];
165 [GetCreditCardEditViewController() loadModel]; 164 [GetCreditCardEditViewController() loadModel];
166 165
167 // There is an extra section containing a switch that allows the user to save 166 // There is an extra section containing a switch that allows the user to save
168 // the credit card locally. 167 // the credit card locally.
169 ASSERT_EQ(9, NumberOfSections()); 168 ASSERT_EQ(8, NumberOfSections());
170 169
171 // The switch section is the last section before the footer and has one item 170 // The switch section is the last section before the footer and has one item
172 // of the type CollectionViewSwitchItem. The switch is on by defualt. 171 // of the type CollectionViewSwitchItem. The switch is on by defualt.
173 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(7))); 172 ASSERT_EQ(1U, static_cast<unsigned int>(NumberOfItemsInSection(6)));
174 id item = GetCollectionViewItem(7, 0); 173 id item = GetCollectionViewItem(6, 0);
175 EXPECT_TRUE([item isMemberOfClass:[CollectionViewSwitchItem class]]); 174 EXPECT_TRUE([item isMemberOfClass:[CollectionViewSwitchItem class]]);
176 CollectionViewSwitchItem* switch_item = item; 175 CollectionViewSwitchItem* switch_item = item;
177 EXPECT_EQ(YES, [switch_item isOn]); 176 EXPECT_EQ(YES, [switch_item isOn]);
178 } 177 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698